俄罗斯方块的简单实现
2005-01-24 22:45
302 查看
也是很早很早的东西了:P 这是我几年以前写的《Seven Puzzles》(该游戏为DOS版,可在鄙人主页http://ssscomic.yeah.net内找到)里的俄罗斯方块的实现方法,当时接触编程仅半年而已,希望可以给初学者一点帮助。 几乎没有写什么代码,而且后阶段方块旋转、消去方面更是只大致介绍了一点方法,不过应该还是可以让人明白的。 本人才疏学浅,如有不当之处,还望各位多多指教。 世界 世界即游戏进行的场所,在俄罗斯方块里就是MXN个小格子,我们可以使用一数组来表示 BYTE g_byScene [M] 其中,N为行数、M为每行格数,左上角为(0,0) 我们可以继续定义 #define SCENE_EMPTY 0 就是当g_byScene[y][x]==0时代表该格为空,可以放入方块,否则当方块落到(y+1,x)时就不可以继续下落 因为后面还有许些功能可能需要用到g_byScene,所以暂时只用定义0值,以后再说。 角色 角色就是玩家可控制的那个东东了,在这里就是由4块小正方体组合成的方块。 大家可以穷举出所有可能的组合 ————————————————— ** ** ————————————————— * **** 、 * * * ————————————————— ** * ** 、** * ————————————————— ** * ** 、** * ————————————————— * * * *** 、** 、** 、*** * * * ————————————————— * ** * *** 、* 、*** 、 * * * ** ————————————————— * * ** *** 、* 、*** 、 * ** * * ————————————————— 大家还看得清楚吧,由于不能使用图片,所以只好用字符方式,一共7种方块,旋转变化后共有17种。 这些方块都可以置于4X4的空格之中,图简单,我们可以建一个4X4大小的数组,储存方块信息,由于一共有17种,所以应该 #define ELEMENT_NUM_T_MAX 17 BYTE g_byElement[ELEMENT_NUM_T_MAX][4][4] 其中每个数值应该在游戏初始化时定义,这样在游戏中我们就可以通过方块号(0-16)来索引方块了。 为了方便实现旋转,最好按照顺时针变化的顺序将只是方向不同的方块放到一起,我上面的顺序可能有点不对。 方块的下落 我们还需要定义 int g_iX,g_iY; //这是方块坐标,对g_byElement[][][]来说,这个坐标是左上角坐标 BYTE g_byElementCur; //这是当前活动的方块、0-16 然后,写个移动判断函数,就可以简单的游戏了(方块不能转动) 向下移动的主要判断部分,没有进行边界判断,返回false为不可移动、true为可以移动 for(i=0;i<4;i++) for(j=0;j<4;j++) { if(g_byElement[g_byElementCur][i][j]!=SCENE_EMPTY &&g_byScene[g_iY+i+1][g_iX+j]!=SCENE_EMPTY) return false; } return true; 应该没有写错吧!^^ 处理键盘的同时还应该不停的计时,保证方块每一段时间下落一格(g_iY++),直到不能下落为止。 方块的旋转 方块的旋转其实和位图旋转没有关系,只是方块号改变了而已,我刚才将方块按顺时针旋转放在一起,也就是这个原因,我们可以通过g_byElementCur++、g_byElementCur--来实现顺时针或逆时针旋转,当然要做边界的判断。 另外,由于方块旋转后,占用的位置就改变了,所以还需要判断目前位置是否可以旋转,和判断下落的方法差不多。 方块的消去 方块落定后,就应当马上刷新g_byScene[][],并做消去判断,如果某一行可以消去,还应该将该行上的所有g_byScnen[][]值向下移一行,并刷新屏幕。 |
相关文章推荐
- 学习C#从俄罗斯方块开始(二)俄罗斯方块的规则和算法的简单实现
- Gtk+3.0 实现简单的俄罗斯方块
- 实现简单的俄罗斯方块小游戏
- python和pygame实现简单俄罗斯方块游戏
- 一个简单的俄罗斯方块实现
- java俄罗斯方块简单实现,新手适合学习
- 学习C#从俄罗斯方块开始(二)俄罗斯方块的规则和算法的简单实现
- canvas标签应用 简单俄罗斯方块游戏的实现
- 一个简单的俄罗斯方块的Win32 API实现
- JQuery 简单实现折叠菜单
- 链表的相关操作及简单通讯录系统的实现
- 沉浸式状态栏简单实现
- 利用文件实现Free Pascal中的简单排序功能
- Domino数据读取接口的简单实现
- 用jquery实现动画跳到顶部和底部(这个比较简单)
- 拼图实现简单译码器与加法器
- 【Direct3D9】用D3D9实现一个简单的Galgame #2 创建GraphicsDevice
- jquery 跳到顶部和底部动画2句代码简单实现
- iOS上简单推送通知(Push Notification)的实现
- socket编程中服务器端常用函数 以及简单实现