您的位置:首页 > 其它

俄罗斯方块类的实现以及方块在画布中显示

2016-04-09 21:33 369 查看
俄罗斯方块类的实现以及方块在画布中显示:

1,  实现方块类,方块工厂类;

2,  在控制器类中通过方块产生器的内部类调用工厂产生方块;

3,  在测试程序中测试这两个类的正确性。

具体实现代码如下:

一、实现方块类:

/**
*作 者: Helloway
*类 名:CBlock
*类说明: 标准方块类
*/
public class CBlock {
private Color blockColor;//方块的颜色
private int blockStyle;//方块的形状,16进制数
private int speed;//方块的速度,随着难度等级增加,方块往下掉的速度越快
private Point pos;//方块的位置
private boolean moving;//方块是否在移动,是暂停的还是往下掉的
public CBlock(Color blockColor,int blockStyle,Point pos){
this.blockColor=blockColor;
this.blockStyle=blockStyle;
this.pos=pos;
}
/**
* 方法说明:方块实现画自己的功能
*/
public void drawSelf(CShowPanel panel,Point pos,int style){
if (pos==null) {
pos=this.pos;
}
if (panel==null) {
return;
}
if (style==-1) {
style=this.blockStyle;
}
int key=0x8000;//bit位的校验码,判断方块的网格中哪些是0哪些是1
for (int i = 0; i < CGlobal.Block_Rows; i++) {
for (int j = 0; j < CGlobal.Block_Cols; j++) {
if ((key&style)!=0) {
CGrid grid=panel.getCGridPanel(pos.x+i, pos.y+j);
if (grid==null) {
key=key>>1;//右移一位
continue;
}
grid.setGridColor(blockColor);
}
key=key>>1;
}
}
panel.repaint();
}
}

二、实现方块工厂类:

/**
*类 名:BlockFactory
*类说明:方块工厂类,实现方块的生产
*/
public class BlockFactory {
public CBlock generateBlock(Color blockColor,int blockStyle,Point pos) {
return new CBlock(blockColor,blockStyle,pos);
}
}三、通过控制器生产方块:在CController .java控制器类中新增和修改以下蓝色代码即可。
/**
*作 者: Helloway
*类 名:CController
*类说明: 控制器类,主要用来控制游戏
*/
public class CController implements GameListener{
private BlockFactory factory;
private CBlock block;
private CShowPanel gamePanel;
private int STYLES[][]={//方块的28种状态
{ 0x0f00, 0x4444, 0x0f00, 0x4444 }, // 长条型的四种状态
{ 0x04e0, 0x0464, 0x00e4, 0x04c4 },
{ 0x4620, 0x6c00, 0x4620, 0x6c00 },
{ 0x2640, 0xc600, 0x2640, 0xc600 },
{ 0x6220, 0x1700, 0x2230, 0x0740 },
{ 0x6440, 0x0e20, 0x44c0, 0x8e00 },
{ 0x0660, 0x0660, 0x0660, 0x0660 }//正方形方块的四种状态都一样
};
public CController(BlockFactory factory,CShowPanel gamePanel) {
this.factory=factory;
this.gamePanel=gamePanel;
}
/**
* 定义一个内部类,专门生产方块
*/
private class BlockGenerator{
public BlockGenerator(){
int style=STYLES[2][1];
block=factory.generateBlock(Color.GREEN, style, new Point(8,5));
block.drawSelf(gamePanel, null, -1);
}
}
/**
* 开始游戏
*/
public void startGame() {
BlockGenerator blockGenerator=new BlockGenerator();
}
/**
* 实现actionEvent事件的方法
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
System.exit(0);
}
}
}
四、测试程序实现:在TestMyGame.java测试程序类中新增和修改以下蓝色代码即可。

/**
*作 者:Helloway
*类 名:TextMyGame
*类说明:用户创建窗口开始游戏及测试其他的类的正确性
*/
public class TestMyGame {
public static void main(String[] args) {
JFrame myFrame=new JFrame("我的俄罗斯方块");
CControlPanel myControlPanel = new CControlPanel();
CMessagePanel myMsgPanel= new CMessagePanel();
CShowPanel gamePanel=new CShowPanel(20, 12, Color.PINK);
BlockFactory factory=new BlockFactory();
CController myController = new CController(factory,gamePanel);
myController.startGame();//点击开始按钮,开始生产自定义方块
CMenu myMenu=new CMenu();
myMenu.addActionListener(myController);
myFrame.setJMenuBar(myMenu.createMenuStruct());
Container con=myFrame.getContentPane();
con.add(myControlPanel,BorderLayout.EAST);
con.add(myMsgPanel,BorderLayout.SOUTH);
con.add(gamePanel,BorderLayout.CENTER);
myFrame.setSize(400, 500);
CGlobal.showCenter(myFrame);
myFrame.setVisible(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
具体界面展示效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  俄罗斯方块 界面