Dotcpp  >  编程题库  >  [北邮大作业]俄罗斯方块OJ版
题目 3349:

[北邮大作业]俄罗斯方块OJ版

时间限制: 2s 内存限制: 192MB 提交: 236 解决: 8

题目描述

俄罗斯方块(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俄罗斯方块.png({I,T,O,J,L,S,Z})。S0和S1分别表示第一个要下落的方块和第二个要下落的方块的形状。交互过程中,你每次依次输出一个方块的放置方案。在你每次输出放置方块的方案后,交互程序将再给你一行新的输入,该输入为一个单字符,

即Si俄罗斯方块.png({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万块测试。

标签