俄罗斯方蟹(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游戏”