在家闲着没事,做了一个俄罗斯方块程序,界面如下:
大体思路如下:
1. 每个方块占用固定大小,我这里的方块是20*20像素,方块显示区域为15行9列,
因此需要绘制一个180*300的矩形区域,用来显示方块。
2.创建各种类型的方块对象,一共7种方块,每种方块其实可以看成四个小方块的组合,我这里使用二维数组来存储不同类型的方块;
3.接下来将方块绘制在Panel上面。
4.创建一个线程,定时改变方块的位置,每次让方块下移一步;
5.还需要创建一个线程定时刷新界面,这样方块就在界面往下移动了;
6.监听键盘事件,处理方向键被按下事件,当方向键被按下时改变方块的位置;
7.碰撞检测,每次方块移动时检测方块是否超出界面;
8.当方块移动到底部或者碰撞到其他方块时,方块停止移动;
9.创建一个15行9列的二维数组来存储停止移动的方块,并将方块绘制到界面上;
10.每次方块停止移动后,检测是否可以消除方块,也即是检测二维数组是否存在整行的方块,如果存在则将该行方块
清空,上面的所有方块下移;
11.使用方块的旋转,这一步最复杂,可以参考https://blog.csdn.net/janchin/article/details/6310654,
使用二维数组来存储每种类型的方块,方块的旋转就转变成了二维数组的旋转,需要选取一个点作为旋转的轴心,旋转后根据轴心的坐标来调整方块的坐标。
12.每消除一行方块,计分并计算等级;
13.检测方块是否碰撞到界面顶部,碰撞到顶部则游戏结束,显示游戏结束提示并显示重新开始按钮;
代码已经上传到github上,github地址:https://github.com/hgq0916/tetris.git