问题描述
俄罗斯方块(Tetris)作为风靡全球38年的现象级益智游戏,其简单易学但难于精通的特性使其成为游戏史上的不朽经典。以下是其核心游戏规则解析及我们的要求:
游戏界面由20行×10列的可视区域组成,7种不同形状的四格方块(I/T/O/J/L/S/Z型)随机从顶部生成下落(具体形状如下图所示),并且在一个方块生成后,玩家可以知道下一个方块的形状。
• 横向范围:X轴区间 [0, 9](共10列)
• 纵向范围:Y轴区间 [0, 19](共20行,Y=0为底部,Y=19为顶部)
• 死亡判定线:Y ≥ 15(当方块堆叠高度触达此线时游戏结束)
在本问题中玩家使用的是简化版的操作规则,只能进行以下三种操作:
• 横向移动:左右平移
• 旋转操作:支持0°、90°、180°、270°四向旋转
• 瞬间落地:瞬间抵达当前可到达的最底部位置
当一行及以上(Y轴坐标相同)的全部位置被完全填充时,这些行将被消除,并且玩家将根据同时消除的行数获得分数:
• 单行消除:100分
• 双行消除:300分
• 三行消除:500分
• 四行消除:800分
本次作业要求做两个版本,一个OJ版,一个图形化版。其中OJ版需个人独立完成,图形化版需由3人组成的小组合作完成。
图形化版界面及玩法自行设计,但至少要完成单人游戏及记分功能。
OJ版为交互式题目。要求在每次输出数据后、读入下一个数据前使用fflush(stdout)刷新输出缓冲区。
OJ版输入
第一行为两个单字符,即和(、。和分别表示第一个要下落的方块和第二个要下落的方块的形状。交互过程中,你每次依次输出一个方块的放置方案。在你每次输出放置方块的方案后,交互程序将再给你一行新的输入,该输入为一个单字符,即()。表示一个新的下个要下落的方块的形状。若为X表示X前边的方块是最后一个方块,程序应该在输出最后一个方块的放置方案后结束。若为E表示玩家的放置方案已导致游戏结束(堆叠高度触达死亡判定线),程序应直接退出。测试数据均采用随机种子生成,且保证输入数据的总长度(即掉落的方块总数)小于1,000,000。
输出
每次交互需输出两行,第一行为用一个空格分隔的两个整数,依次为c和x。其中c表示方块顺时针旋转的a角度(0、90、180、270),x表示方块在x坐标上的最小值。第二行为一个整数,表示放置完方块后玩家当前的得分。
源代码详询https://space.bilibili.com/553303442?spm_id_from=333.1007.0.0