百度空间 | 百度首页 
 
查看文章
 
2006年百度之星程序设计大赛总决赛题目
2007-05-09 13:57

俄罗斯方块

俄罗斯游戏中共有七种方块,每种方块都由四个方格组成,如下图所示,七种方块分别编号为1~7

游戏中,每次落下一个方块,落到一个宽度为10格的槽中。方块的下部一旦碰到槽的底部,或槽中已有的方块,就不能再移动。方块落下不动后,如果有某些行因落下的方块而填满,这些行将被消去。方块下落前,你可以控制方块的左右移动和旋转,以将其放在合适的位置。你对方块的所有移动和旋转操作在下落前(槽外)就计算完毕,然后直接下落到底,下落过程中不能再做操作。如果方块刚刚落下后顶部高度大于17行,游戏结束--即使此时有些行可以消除。

交互方式
你的程序应当包含tetris_lib.h,并连接相应的库文件。库中的两个重要函数是:
void StartGame(int* t1, int* t2);
int Step(int r, int l, int* next);

你的程序应该首先调用StartGame,其中t1t2表示前两个方块的编号(t2对应于传统游戏中的"下一个方块")。接下来,你的程序每次可以使用Step函数下落一个方块,返回消去的行数。r表示旋转方式(r=0, 1, 2, 3分别表示顺时针旋转0度、90度、180度、270度),l表示方块在旋转后的最左边一格的列编号(从左到右依次为1, 2, …, 10),而next表示方块落下后新的下一个方块编号(0代表没有下一个方块,下一次Step调用后库将自动终止你的程序)。你的程序不应自行终止。

关于自测的提示
调用StartGame函数时,库将从标准输入中读入若干行,每行包括一个整数,表示方块的编号。你可以利用这一点对你的程序进行测试。程序运行结束后,测试库将把结束原因和得分显示在标准输出中。

库中还有两个函数可以用于自测:
void SetLog(const char* filename);
void Snapshot();

如果需要测试库记录程序的行为,请在调用StartGame之前调用SetLog函数。

评分规则
在与测试库交互的过程中,出现以下条件之一,则库将终止程序:
1
、调用参数非法
2
、方块刚刚落下后,其顶部高度大于17
3
、所有方块均已落下
4
、本数据的运行总时间超过1秒钟

程序终止后,假设一次消去1行、2行、3行、4行的次数分别为a, b, c, d,则该数据原始得分为2b+6c+10d。换句话说,消去单独的1行不得分。

对于每个数据,得分排名前八的程序分别得到10, 7, 6, 5, 4, 3, 2, 1分。如果原始得分相同,则消去行数多的排名在前;如果原始得分和消去行数都相同,则下落方块总数多的排名在前。如果三者都相同,则得分相同。消去行数为0的程序不得分,即使它排在前八。

最终成绩按照50个数据的总分从大到小排序,如果总分相同则按所有数据的原始得分之和排序;如果仍有相同,则按所有数据的消去的总行数排序;如果仍相同,则名次相同。


类别:百度之星历年题目 | 添加到搜藏 | 浏览() | 评论 (33)
 
最近读者:
 
网友评论:
1
2007-05-10 19:59 | 回复
能不能提供lib和h文件,让大家练练手,嘿嘿...
 
2
2007-05-11 16:52 | 回复
注册页面无法注册。总是说“请输入正确的验证码”,明明是正确的。是网页的bug还是怎么回事?
 
3
2007-05-11 18:35 | 回复
发现了个BUG.呵呵! 打开以下页面:http://star.baidu.com/down/main/intro.php
 
4
2007-05-11 21:20 | 回复
我们的注册平台一直是工作正常的,所以不知道是不是本地的原因导致无法提交呢?
 
5
2007-05-11 21:53 | 回复
roast同学的地址是啥地址啊?
 
6
2007-05-13 14:29 | 回复
呵呵,果然是个bug。页面不停的刷新 http://star.baidu.com/down/main/intro.php
 
7
2007-05-14 14:24 | 回复
我注册的身份证号码明明正确 可就是说输入数据不对 什么破东西
 
8
2007-05-14 18:02 | 回复
关于注册的问题,欢迎把具体详情发送到star@baidu.com 当然,如果包括问题页面的截屏最好:)
 
9
2007-05-17 13:08 | 回复
有意思 比05年的好
 
10
2007-05-17 13:13 | 回复
看来不是很难的题嘛,可惜我才大一,MFC还没学精通,明年再来参寒吧
 
11
2007-05-17 14:10 | 回复
注册信息中毕业时间最早是2000年,那就是说更早毕业的师兄们没有参赛资格啦?
 
12
2007-05-17 16:45 | 回复
嘿嘿,逗着玩,看看先,百度的薪水也不咋地,………………路过………………
 
13
2007-05-17 16:49 | 回复
哈哈,大哥的话是真的吗? 刚刚看了看上面网友摘的地址,测试了一下,居然……、main。main。main。百度本身就是做搜索引擎的,怎么会让网页出现着这样的问题呢?提出来了还视而不见,效率呀!!!吧敢恭维
 
14
2007-05-17 17:03 | 回复
我也是注册不了,身份证,电话,明明对着说我错了
 
15
2007-05-17 17:42 | 回复
本来是想注册的,一看什么编码程序都不知道,算了 ,还是不注册了 ,可悲啊!~~~~``
 
16
2007-05-17 18:16 | 回复
要是有源文件(C语言)就好了!!
 
17
2007-05-17 22:19 | 回复
我的也是,身份证号码明明没有错的,可是就是注册不了~~~~ 嘎嘎嘎嘎~~
 
18
2007-05-17 22:37 | 回复
baidu就是垃圾 我自己的身份证不行 网上找半天没找到一个行的 就这水平还办什么比赛啊
 
19
2007-05-17 23:57 | 回复
18楼莫急,别人都注册成功了,唯你不行,你应该找找自己的原因!
 
20
2007-05-18 10:50 | 回复
2006决赛第一题,我给出答案了,欢迎大家看一下阿!!
 
21
2007-05-18 11:52 | 回复
身份证最基本的就是生日,如果生日和身份证号上的对不上,肯定人家不认撒,我晕
 
22
2007-05-21 09:54 | 回复
挺难!
 
23
2007-05-22 00:28 | 回复
这种题都出了,做数据,先做个可视化程序,然后让俄罗斯方块高手来玩,记录相应操作,再拿最好成绩去就去。 在网吧见个高手反应都比显示来得快了,真是无奇不有,行行都有高手在。
 
24
2007-05-22 14:26 | 回复
身份证号码的生日必须和你填的生日一样的~~~~~~~
 
25
2007-05-23 15:25 | 回复
今天注册成功了,挺快的,就等比赛了。
 
26
2007-05-24 15:00 | 回复
我想进复赛
 
27
2007-05-27 10:42 | 回复
俄罗斯方块我都写过好多次了,有C++版的,还写过javascript版的呢。javascript版的代码我放在http://www.yourblog.org/Data/200612/496017.html的。有兴趣的朋友可以去看看。
 
28
2007-05-27 10:48 | 回复
只不过,我的程序只是实现了一个俄罗斯方块,而不是计算机玩俄罗斯方块,刚才没看清楚题目,我还以为是实现一个俄罗斯方块呢。
 
29
2007-06-04 19:23 | 回复
如果可以把参赛的作品在比赛后公布出来的话……虽然是一菜鸟
 
33
2007-06-14 16:47 | 回复
看了題目才知道真的很難呀!
 
34
2008-05-11 23:35 | 回复
go go go
 
35
2008-08-03 11:32 | 回复
关注百度之星~~~~~~~~!
 
36
2008-08-04 13:14 | 回复
看一下,留下脚印
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu