当前位置:文档之家› C语言实现俄罗斯方块

C语言实现俄罗斯方块


模块1.界面设计
基本符合一般的俄罗斯方块游戏; 我们设计时考虑倒我们屏幕的大小,采用
16X24的方格阵.背景用蓝色,墙用红色, 墙 内用白色. 这部分已设计好,看演示!
模块2.定义所有方块
所有俄罗斯方块都是有四个方格,所有可能情况有二 十种(由于方块所占比率太小,有两!颜色随机!)
具体如下:0. 1.
三.所用知识:
基本的C语言知识。 数据结构。 图形交互技术。 算法分析和设计。 数据库知识. 人工智能
四.模块分析
根据七种功能可得到六个模块. 分别为:1.界面; 2.方块; 3.下落及控制; 4.碰壁停止; 5.消行及玩完; 6.电脑判别最优走法(难) 7.记录.(难) 具体见下:
这一部分比较难,我们正在查找相应的书,学 习相应的知识.
模块7.玩者姓名及成绩排行榜
分数由所消行数及难度确定. 设计时定义好. 在指定时间之内,或失败后都有一个最终分
数.可以选择记录之.这将会被录入对应文件. 用到C语言的文件操作. 能够调出排行榜,及最高纪录.用到数据库方 面知识,及排序. 这一部分不容易,我们还在思考之中!
3.头节点及方块号码数据结构:
typedef struct{ Pos node0; /*int x1;int y1;*/ //方块头节点左上点 int num; //方块号码不同,对应形状不同
}PosType;
4.方块定义:
typedef struct{ Pos node[4]; //0号为头节点,其他三个与之对应 int color; //方块颜色 }Square;
言实现的。 这里我们要用C语言实现之。
二.功能分析:
1具有基本的游戏背景/界面。 2能随机生成所有可能的方块。 3能根据难度确定方块下落速度。 4能用键盘控制方向,变形。 5方块判别停止条件及墙壁。 6能判别消行及游戏结束。 7电脑能自动玩,可以选择人机对抗玩.(难) 8能记录玩者姓名及最佳成绩。
squa.node[3].y=squa.node[0].y;
//3号
break; //以上的 STEP 为每正方块边长,定义为20象素.
C语言实现俄罗斯方块
邓友明(20020263) 胡文峰(20020260)
李乐(20020248) 李博(20020272)
具体内容
1俄罗斯方块简介. 2功能简介. 3所用知识 4模块分析. 5数据结构. 6算法设计.
一. 俄罗斯方块简介:
相信大家都应该玩过俄罗斯方块这个游戏。 具体介绍略。 大部分俄罗斯方块游戏都是用比较高级的语
以上数据结构不算完美,有待改进. 用上述结构,实际使用如下全局变量: PoseType start; // start.num号对应方块及头节点起始位置
Square squa; // 一种方块.
………….还有其他 自定义一个Square initsqua( PoseType start)
的函数可将start.num号方块返回在start.Pos 位置.方块具体设计见下一页:
应颜色.用自定义的getbk()函数返回新的数组m. 这一部分我们正在努力之中!!!
模块5.消行操作及失败判断
消行操作是难点. 首先是判断哪几行已满,然后要将该行以
上所有内容整体下移所消的行数.具体算法 我们还在研究之中. 失败与否就是判断是否有方块超过界面上 界.不难!
模块6.能实现电脑玩
squa.node[1].y=squa.node[0].y-STEP*1; //1号
squa.node[2].x=squa.node[0].x+STEP*1;
squa.node[2].y=squa.node[0].y;
//2号
squa.node[3].x=squa.node[0].x-STEP*1;
五.数据结构
通过以上模块分析,我们已经设计出如下数据结构: 1.点坐标结构: typedef struct{ int x; int y; }Pos; 2.点及颜色数据结构: Typedef struct{
Pos pos; //点坐标 int color; //颜色值 }PosType1; //用于保存界面及其他
2.
3.
4
5.
6.
7.
8.
9.
10.
11.
12.13.14.1.16.17.
18.
19.
上述二十种方块中,0号1号可循环变形;2,3 号相同;4,5,6,7可循环变形;8,9,10,11可循 环变形;12,13,14,15可循环变形;16,17,18,19 可循环变形.
具体实现见数据结构部分.
演示之.
模块4.墙和已有方块阻挡的实现
我们讨论得到的一个方案为: 定义界面的时候,墙设为红色(好看起见),空白格为
白色.方块为除黑白的其他随机颜色. 定义一个数组m保存界面当前每个方格的坐标及
颜色值. 方块下落过程中遇到非白色的就停止.自定义一个
stopmove( m,…)判断是否停止. 控制遇到非白色阻挡就失效. 停止的方块替换掉所在位置以前界面数组m的对
以下为initsqua()函数内部12号方块
1
的定义:
squa.node[0].x=start.node0.x;
302
squa.node[0].y=start.node0.y; //0号节点
switch(start.num)
//start.num为12
……….
case 12:
squa.node[1].x=squa.node[0].x;
此模块已实现,看演示!
模块3.下落及控制
下落比较简单.
即图形的插,写及步长的大小来实现. 插写速度及步长大小可控制难度.
已实现,有演示!
控制也容易.
控制包括控制方向和变形. 变形可由方块定义的号码循环变换.
已部分实现,演示!
但两个嵌套起来就出现了问题(请大家指
教):
即控制的时候不要影响下落,但控制时如用 到getch()函数,要等待输入字符,因此下落因 等待停止!查到一个kbhit()函数虽能在输入字 符时不影响下落,但不能返回所输字符!最后 用kbhit()判断是否有控制输入,用getch()判 断控制操作虽能实现,但反应滞后!!??不完美!
相关主题