c语言俄罗斯方块实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言之游戏

俄罗斯方块课程设计报告

专业:[]

学生姓名:[]

指导教师:[]

完成时间:

目录

一、需求分析.................................... 错误!未定义书签。

二、概要设计.................................... 错误!未定义书签。

三、详细设计.................................... 错误!未定义书签。

四、调试分析 (19)

五、用户手册 (20)

六、测试数据.................................... 错误!未定义书签。

七、附录........................................ 错误!未定义书签。

一、需求分析

1.该程序是完成一个简易的俄罗斯方块的任务,其要完成几个重要的功能:界面,方块下落,旋转,判断是否还能下落,左右移动,分数,速度设置,清楚满的每行,下个方块的预览等;

2.可用#include 的头文件来实用几个函数来控制并完成游戏的界面;

3.可用7个二维5*5数组去实现下落方块的全部类型,再用随机函数使其随机下落;

4.用#include 的头文件去使用按键的控制,以保证用户能够合理操作;并用#include 的头文件来使用rand函数来随机出示七种方块;完成正常的显示和下个方块的预览;

5.用 #include 来运用时针去控制时间;

6.程序执行过程:然后加上几个基本的头文件来执行函数,首先设置按键操作,用:w,a,d,s控制,然后进行界面的初始化设置,启动,时针参数设置,开始新游戏,开始随机下落方块,显示下一个方块,再行旋转,移动,清除,加分,速度参数,最后判断是否已满,停止游戏,打出分数,结束的画面设置,游戏终止...

二、概要设计

该程序中的函数设置总体主要功能大致如下

1.找到合适的方块盒子(7种)使其一一下落 box[MAX_C][5][5] = { /*MAX_C(7)种预定义的盒子*/ 这样用类似的7个5*5二维数组来实现每个盒子方块的形状,自此就引荐两个作为介绍, {

{0,0,0,0,0},

{0,0,0,0,0},

{0,0,1,0,0},

{0,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{0,0,0,0,0},

{1,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},如此中用1代表显示的格子,0代表空。

2.设置时间指针,实现旋转,移动,消去,显示加分,改变速度分别用下面函数表示

int setTimer(Timer *t, unsigned int intv, BOOL en);

/*设置时钟t,参数分别为时钟指针,时间间隔,是否活动*/

void rotateBox(int box1[5][5], int box2[5][5])

/*旋转box1输出到box2*/

int move(int dir) /*实现移动,返回成功与否*/

void clear() /*清除掉满行*/

void prscore() /*打印现在的分数*/

void spe()/*显示速度的改变*/

3.外部函数功能如下图

流程简介:玩家定义游戏开始,游戏显示开始界面,时针已经设定好,然后随机出示方块,玩家进行方块的旋转,左右移动,和下落控制,然后在旁边的表格中出示另一个表格显示下一个即将下落的方块,然后判断是否到达底部,若到,继续出示方块,若没,则可继续变换,下落到低端后在进行判断,是否可以消除该行,再进行分数的变换,速度的调整,然后判断是否已经满,若未满,则继续出示下一个方块,若满,则结束游戏,打印分数,出示结束界面,游戏终止。

三、详细设计

1.设置七种方块:这个用int box[MAX_C][5][5] = /*MAX_C(7)种预定义的盒子*/ 来实现;即七个5*5的盒子数组,方块实体用1表示,0表示空;七种如下所示,细心就会发现{

{0,0,0,0,0},

{0,0,0,0,0},

{1,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,0,1,0,0},

{0,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,1,1,0,0},

{0,0,0,0,0}, {0,0,0,0,0} },

{

{0,0,0,0,0}, {0,0,1,1,0}, {0,1,1,0,0}, {0,0,0,0,0}, {0,0,0,0,0} },

{

{0,0,0,0,0}, {0,1,1,0,0}, {0,0,1,0,0}, {0,0,1,0,0}, {0,0,0,0,0} },

{

{0,0,0,0,0}, {0,0,1,1,0}, {0,0,1,0,0}, {0,0,1,0,0}, {0,0,0,0,0} },

{

{0,0,1,1,0},

{0,0,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

}

}; 这样七种盒子的方块就被清楚的展现在你们面前。用来保证方块不会出来2.我们要进行按键的设置#define KEY_UP 'w' /*定义上下左右按按键*/

#define KEY_DOWN 's'

#define KEY_LEFT 'a'

#define KEY_RIGHT 'd'

#define KEY_ESC 27 /*退出*/

3.时钟的控制,用来控制方块的下落间隔时间及速度/*时钟结构控制*/

typedef struct { /*时钟结构*/

BOOL enabled; /*时钟是否开启*/

unsigned int intervel; /*定时间隔*/

unsigned int lasttime; /*这个属于内部使用变量*/

} Timer;

4.int GetTickCount() { /*读取BIOS时钟*/

int ret;

ret = peek(0x0,0x46e); /*实际上读取了内存0:046e处的内容*/

ret <<= 8; /*这个地方是$%#$^$%&^*/

ret += peek(0x0,0x46c); /*太多新的东西了,找点书看一看吧*/

return (ret);

}

int setTimer(Timer *t, unsigned int intv, BOOL en)

{

t -> enabled = en; /*设置一个时钟罗*/

相关文档
最新文档