俄罗斯方蟹(Crabtris)
这是什么
俄罗斯方蟹 = Crab(蟹)+ Tetris(俄罗斯方块),是一个用C语言实现的俄罗斯方块游戏,只能在终端横着走。
GitHub: https://github.com/wsgggws/Crabtris
游戏截图
设计说明
- 该蟹身长 22 坐标点,宽 10 坐标点。
- 方块向右前进,可上下移动与旋转。
- 没有开始选项。
- 没有暂停选择。
- 结束只能Ctrl+c。
- 能消列,但不计分数,只看能玩多久
- 蟹如人生呀,戏T!
实现说明
用一个二维数组表示俄罗斯地图,可视的只有22,另外3行隐藏,以便随机产生新的方块。
(0,0)--------------->x(WIDTH) | | . | |y(HIGHT)
地图元素有哪些组成。
- 固定的方块
- 移动的方块
- 加锚点的空气
- 边界
方块用4个坐标点表示,可以列出有7种方块。不同的元素输出不同的字符。
如何出现动画?
每秒都从终端的坐标点(0,0)开始输出,每秒输出的内容不一样,就形成了动画。这需要使用到termios 库。
如何监听键盘输入
需要设置终端以非阻塞读取输入,根据输入重新生成地图,即改变二维数组里每个元素的值。并重新从(0,0)输出。
每秒向右移动如何实现
- 每个坐标点的X坐标加一操作,赋值给一个临时方块保存。
- 地图里旧的坐标点都设置为空气,地图里临时保存方块的坐标设置为移动方块。
- 向上下左右移动类似。但都需要在移动前检查移动位置的有效性(是否超越了地图,新位置是否已经有固定了的方块。
向上平移效果
在向上下平衡时,需要设置加一个缓冲等待时间(默认是每次等待一秒刷新地图的),以实现平移效果,而不是平移加向右的别扭效果。
如何清行
在每次移动的方块变成固定的方块后,尝试清行,即检查每一列是否都为固定的方块。如发现可消的列,前面所有的列往后移动,并继续从该列开始检查,可只检查4次,毕竟一次操作最多只能消除4列,当然,为了函数简便,我检查了所有列。
如何计分
不计分,游戏开始时有个开始时间,当游戏结束时,两时间相减,即为你能玩的时间,也可以说是你浪费的时间。
如何结束游戏
不会检查固定的列是否到达了顶点,它会一直产生新的方块,永无止境。按ctrl+c通过信号强制结束程序。
游戏结束之后做什么
从游戏本身来说,它需要恢复原生的 terminal 运行环境。对于玩者来说:“这算什么蟹T游戏”