- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 738
- 收听数
- 1
- 能力
- 23 分
- 体力
- 77169 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 27077
- 相册
- 1
- 日志
- 14
- 记录
- 36
- 帖子
- 4293
- 主题
- 1341
- 精华
- 15
- 分享
- 16
- 好友
- 1975

数学中国总编辑
TA的每日心情 | 衰 2016-11-18 10:46 |
|---|
签到天数: 206 天 [LV.7]常住居民III 超级版主
 群组: 2011年第一期数学建模 群组: 第一期sas基础实训课堂 群组: 第二届数模基础实训 群组: 2012第二期MCM/ICM优秀 群组: MCM优秀论文解析专题 |
俄罗斯方块 ' c; P% \7 m% g4 f( O7 F9 @& R
俄罗斯游戏禁用词语有七种方块,每种方块都由四个方格组成,如下图所示,七种方块分别编号为1~7。
$ P4 I8 t% N, a0 w1 }7 U {1 l游戏中,每次落下一个方块,落到一个宽度为10格的槽中。方块的下部一旦碰到槽的底部,或槽中已有的方块,就不能再移动。方块落下不动后,如果有某些行因落下的方块而填满,这些行将被消去。方块下落前,你可以控制方块的左右移动和旋转,以将其放在合适的位置。你对方块的所有移动和旋转操作在下落前(槽外)就计算完毕,然后直接下落到底,下落过程中不能再做操作。如果方块刚刚落下后顶部高度大于17行,游戏结束--即使此时有些行可以消除。
3 R X! K$ {6 c: [8 s8 Y* P交互方式8 d0 J, [, c2 [ X: M9 e$ Z
你的程序应当包含tetris_lib.h,并连接相应的库文件。库中的两个重要函数是:2 {9 Y# V$ b: z+ b
void StartGame(int* t1, int* t2);3 d. d5 E% k* S4 E2 O0 B, m9 N% k' y
int Step(int r, int l, int* next);! u5 C0 O6 H; ~% r
你的程序应该首先调用StartGame,其中t1和t2表示前两个方块的编号(t2对应于传统游戏中的"下一个方块")。接下来,你的程序每次可以使用Step函数下落一个方块,返回消去的行数。r表示旋转方式(r=0, 1, 2, 3分别表示顺时针旋转0度、90度、180度、270度),l表示方块在旋转后的最左边一格的列编号(从左到右依次为1, 2, …, 10),而next表示方块落下后新的下一个方块编号(0代表没有下一个方块,下一次Step调用后库将自动终止你的程序)。你的程序不应自行终止。
2 N0 h) h3 k& x$ _0 D1 K关于自测的提示7 ^* x( p' B! e& j
调用StartGame函数时,库将从标准输入中读入若干行,每行包括一个整数,表示方块的编号。你可以利用这一点对你的程序进行测试。程序运行结束后,测试库将把结束原因和得分显示在标准输出中。
9 B6 d) r d6 i% ~* [/ n3 z3 |3 K库中还有两个函数可以用于自测:
/ s' U* L; q4 Q! T' Yvoid SetLog(const char* filename);& |) n F: Z2 s- P; i6 U% ]
void Snapshot();
* N2 o+ @6 }2 P9 D$ q3 }- b9 E1 T4 {如果需要测试库记录程序的行为,请在调用StartGame之前调用SetLog函数。
7 L/ `) L( Q1 b( Z( S, w评分规则
( P* \- f7 b. L# E在与测试库交互的过程中,出现以下条件之一,则库将终止程序:5 ]7 E0 S2 t1 k5 C# l4 x' {
1、调用参数非法
& }3 Z( \3 m( X( [0 _0 m5 n2、方块刚刚落下后,其顶部高度大于17行 ]8 g$ K9 ^( E( P: G. y2 }3 q
3、所有方块均已落下' k$ `0 m+ l0 @( k/ S: Y% u
4、本数据的运行总时间超过1秒钟
4 K2 t1 z- ^$ k7 M/ q( u程序终止后,假设一次消去1行、2行、3行、4行的次数分别为a, b, c, d,则该数据原始得分为2b+6c+10d。换句话说,消去单独的1行不得分。
, k% K3 @* F4 Z( D( M' H, ]对于每个数据,得分排名前八的程序分别得到10, 7, 6, 5, 4, 3, 2, 1分。如果原始得分相同,则消去行数多的排名在前;如果原始得分和消去行数都相同,则下落方块总数多的排名在前。如果三者都相同,则得分相同。消去行数为0的程序不得分,即使它排在前八。
- \ p. A) k2 Q" F最终成绩按照50个数据的总分从大到小排序,如果总分相同则按所有数据的原始得分之和排序;如果仍有相同,则按所有数据的消去的总行数排序;如果仍相同,则名次相同。7 |1 y# @$ G0 ~) w1 l
![]() |
zan
|