上次编写俄罗斯方块,好像是N年前的大学时代,使用TC2.0在DOS平台上开发的,由于当时的代码是保存在3.5寸软盘上的,到现在那些程序早已经作了古,没有了踪影。俄罗斯方块其实编写并不太容易,要考虑的东西还是蛮多的,以前想在PPC上用.Net精简框架集实现,后来起了个头,没有太大的动力,也就作罢了。现在对MF充满了激情,所以从零做起(没有参考任何现成代码,只不过还是依照我早期的思路编写而成),花费我大半天的时间才编写完毕(在编写过程中,还发现MF对二维数组支持不大好,我后面会提到)。
好了,让我们在.Net Micro Framework模拟器(由于我这里没有带LCD屏的MF开发板,所以很遗憾,不知道在实际的设备上该程序的性能会怎样)上体验一下俄罗斯方块游戏吧。
进入MF Windows(姑且这么叫吧),单击“开始”菜单按钮(MF平台不支持鼠标,是单击模拟器上的Menu按钮,或在键盘敲“空格”或“Windows”键),我们用光标键选中“俄罗斯方块”游戏,按OK键(或按键盘上的“回车”键)进入游戏。
通过开始菜单进入“俄罗斯方块”游戏
编写的俄罗斯方块游戏可是具备经典版的所有功能哟!可以翻转,可以移动,可以得分,可以快速降落等等!要认真玩,否则很快就“Game Over”的。
在编写过程中发现MF对二维数组支持不是太好。
下面的代码编译时会报错:
bool[,] bFlag=new bool[10,20];
所以在MF中二维数组必须这样声明才行:
- bool[][] bShowFlag = new bool[22][]; //主显示区含边框
- for (int i = 0; i < 22; i++)
- {
- bShowFlag[i] = new bool[12];
- }
附:MF俄罗斯方块核心代码
- //俄罗斯方块(叶帆工作室:http://yfsoft.blog.51cto.com)
- public class ElsGame
- {
- int Current_Y = -2, Current_X =3;
- int intGrade = 0;
- bool[][] bShowFlag = new bool[22][]; //主显示区含边框
- bool[][] bMetaShowFlag = new bool[4][]; //下一个方块显示区
- bool[][] bCurrentMetaShowFlag = new bool[4][]; //当前方块显示区
- int intNextNo = 0; //下一个方块索引
- int intCurrentNo = 0; //当前方块索引
- enum MoveWay{Left,Down,Right};
- DispatcherTimer GameTimer; //游戏时钟
- bool bGameRunFlag = false; //游戏运行标志
- public ElsGame(DispatcherTimer GameTimer)
- {
- this.GameTimer = GameTimer;
- Init();
- }
- //元素
- private bool[][] GetElsMeta(int intNo)
- {
- bool[][] ElsMetaFlag = new bool[4][];
- for (int i = 0; i < 4; i++)
- {
- ElsMetaFlag[i] = new bool[4];
- }
- switch (intNo)
- {
- case 0: //田
- ElsMetaFlag[1][1] = true;
- ElsMetaFlag[1][2] = true;
- ElsMetaFlag[2][1] = true;
- ElsMetaFlag[2][2] = true;
- return ElsMetaFlag;
- case 1: //-
- ElsMetaFlag[2][0] = true;
- ElsMetaFlag[2][1] = true;
- ElsMetaFlag[2][2] = true;
- ElsMetaFlag[2][3] = true;
- return ElsMetaFlag;
- case 2: //|
- ElsMetaFlag[0][2] = true;
- ElsMetaFlag[1][2] = true;
- ElsMetaFlag[2][2] = true;
- ElsMetaFlag[3][2] = true;
- return ElsMetaFlag;
- case 3: //┻
- ElsMetaFlag[1][2] = true;
- ElsMetaFlag[2][1] = true;
- ElsMetaFlag[2][2] = true;
- ElsMetaFlag[2][3] = true;
- return ElsMetaFlag;
- case 4: //┣
- ElsMetaFlag[2][2] = true;
- ElsMetaFlag[1][1] = true;
- ElsMetaFlag[2][1] = true;
- ElsMetaFlag[3][1] = true;
- return ElsMetaFlag;
本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/322921,如需转载请自行联系原作者