俄罗斯方块(Tetris)作为风靡全球41年的现象级益智游戏,其简单易学但难于精通的特性使其成为游戏史上的不朽经典。以下是其核心游戏规则解析及我们的要求:
游戏界面由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分
第一行为两个单字符,即S0和S1({I,T,O,J,L,S,Z})。S0和S1分别表示第一个要下落的方块和第二个要下落的方块的形状。交互过程中,你每次依次输出一个方块的放置方案。在你每次输出放置方块的方案后,交互程序将再给你一行新的输入,该输入为一个单字符,
即Si({I,T,O,J,L,S,Z,X,E})。表示一个新的下个要下落的方块的形状。若Si为X表示X前边的方块是最后一个方块,程序应该在输出最后一个方块的放置方案后结束。若为E表示玩家的放置方案已导致游戏结束(堆叠高度触达死亡判定线),程序应直接退出。测试数据均采用随机种子生成,且保证输入数据的总长度(即掉落的方块总数)小于1,000,000。
每次交互需输出两行,第一行为用一个空格分隔的两个整数,依次为c和x。其中c(0、1、2、3)表示方块顺时针旋转的角度(0、90、180、270),x表示方块在x坐标上的最小值。第二行为一个整数,表示放置完方块后玩家当前的得分。
无
无
交互程序会首先提供给你1行2个输入:
IT
表示第一个方块为I,下一个方块为T。
然后你的程序输出将方块I旋转的角度和放置的位置及当前玩家得分,比如:
0 0
0
表示顺时针旋转0度、最左端放置在x=0的列上,当前得分为0。
然后交互程序提供新的下一个方块的形状:
T
此时当前方块形状变为T、下一个方块的形状也为T。
你的程序在输出将方块T旋转的角度和放置的位置及当前玩家得分,比如:
0 4
0
然后交互程序提供输入X告诉你方块已经终止:
X
最后你输出最后一个T的放置方式及当前玩家得分,比如:
0 7
100
此时最下面一行刚好被放满,因此玩家当前得分为100分。
测试数据规模:
1、10万块,给10秒时间,超时不能得分;
2、如果10万块得分超过100万,可以参加100万块测试。