《程序设计基础二》类的设计部分练习题目:1432--1446,运算符重载部分练习题目:1447--1461

Problem 2139. -- 俄罗斯方块

2139: 俄罗斯方块

Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lld
Submitted: 11  Accepted: 1
[Submit][Status][Web Board]

Description

    让我们用这题来致敬经典——俄罗斯方块。

其实俄罗斯方块的英文名并不是“俄罗斯方块”,原名是俄语Тетрис(英语是Tetris),这个名字来源于希腊语tetra,它的意思就是“四”。因为每个组合块都是由4个小正方块组成,所有的形状都是有由下图7种基本形状旋转得到。
有一个高为h宽为w的空白游戏场景,如果游戏者全程挂机(即让组合块竖直落下),如果我们知道了这局游戏一共会落下n个组合块,第i个组合块的形状是由第ai个形状顺时针旋转bi次得到(每次旋转90度),第i个组合块的最左端的在位置ci处(水平位置)。让第1 -> n个组合块按顺序依次落下,计算游戏者最终得分。
(游戏规则:
        1:下落过程中,如果下面触碰到其他块或触底,则停止下落;
        2:每次停止下落后:相邻的块会紧紧黏在一起,如果碰触上顶(即高度>=h)则该局游戏结束;
        3:如果有层满(即该层小方块个数为w),则该层消失,得分加1,上面的块按规则匀速下落;


Input

第一行1个正整数T,表示测试样例组数。
每组输入如下:
第一行3个正整数n, h, w。
接下来n行,每行3个正整数ai, bi, ci。
数据范围:1 <= T <= 10; 1 <= n <= 50; 5<= h,w <= 20; 1 <= ai <= 7; 0 <= bi <= 10; 1 <= ci <= w。
数据保证:组合块右端位置不大于w。

Output

每组输出如下:
第一行"Case x:",x表示第几组样例。
然后:如果游戏结束,输出一行”Game Over”(不含引号);否则第一行输出游戏者得分,接下来输出一个h+2行w+2列矩阵,表示最终游戏场景图(用'*'表示小正方块,'$'表示边框,空格表示空白)。

Sample Input

2
4 5 6
2 1 1
4 3 4
1 0 3
3 0 5
3 5 6
6 0 1
7 2 4
1 0 3

Sample Output

Case 1:
1
$$$$$$$$
$      $
$     *$
$  *  *$
$  * **$
$***  *$
$$$$$$$$
Case 2:
Game Over

[Submit][Status][Web Board]