一个控制台俄罗斯方块游戏的简单实现. 已在 github.com/SlimeNull/Tetris 开源.
思路
很简单, 一个二维数组存储当前游戏的方块地图, 用 bool
即可, true
表示当前块被填充, false
表示没有.
然后, 抽一个 “形状” 类, 形状表示当前玩家正在操作的一个形状, 例如方块, 直线, T 形什么的. 一个形状又有不同的样式, 也就是玩家可以切换的样式. 每一个样式都是原来样式旋转之后的结果. 为了方便, 可以直接使用硬编码的方式存储所有样式中方块的相对坐标.
一个形状有一个自己的坐标, 并且它包含很多方块. 在绘制的时候, 获取它每一个方块的坐标, 转换为地图内的绝对坐标, 然后使用 StringBuilder
拼接字符串, 即可.
资料
俄罗斯方块中总共有这七种方块
类型定义
一个简单的二维坐标
|
|
形状的一个样式, 单纯使用坐标数组存储即可.
|
|
形状
|
|
一个 T 形状的实现
|
|
主逻辑
上面的定义已经写好了, 接下来就是写游戏主逻辑.
主逻辑包含每一回合自动向下移动形状, 如果无法继续向下移动, 则把当前的形状存储到地图中. 并进行一次扫描, 将所有的整行全部消除.
抽一个 TetrisGame
的类用来表示俄罗斯方块游戏, 下面是这个类的基本定义.
|
|
判断当前形状是否可以进行移动的方法
|
|
判断当前形状是否能够切换到下一个样式的方法
|
|
把当前形状存储到地图中
|
|
生成一个新形状
|
|
扫描地图, 消除所有整行
|
|
封装一些用户操作使用的方法
|
|
游戏每一轮的主逻辑
|
|
将地图渲染到控制台
|
|