c语言俄罗斯方块实验报告.pdf
《c语言俄罗斯方块实验报告.pdf》由会员分享,可在线阅读,更多相关《c语言俄罗斯方块实验报告.pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 C语言之游戏俄罗斯方块课程设计报告专业: 学生姓名: 指导教师: 完成时间:2 目录一、需求分析 . 错误! 未定义书签。二、概要设计 . 错误! 未定义书签。三、详细设计 . 错误! 未定义书签。四、调试分析 . 19 五、用户手册 . 20 六、测试数据 . 错误! 未定义书签。七、附录 . 错误! 未定义书签。3 一、需求分析1. 该程序是完成一个简易的俄罗斯方块的任务,其要完成几个重要的功能: 界面,方块下落,旋转,判断是否还能下落,左右移动,分数,速度设置,清楚满的每行,下个方块的预览等;2. 可用#include 的头文件来实用几个函数来控制并完成游戏的界面;3. 可用 7 个
2、二维 5*5 数组去实现下落方块的全部类型, 再用随机函数使其随机下落;4. 用#include 的头文件去使用按键的控制,以保证用户能够合理操作;并用 #include 的头文件来使用 rand 函数来随机出示七种方块;完成正常的显示和下个方块的预览;5. 用 #include 来运用时针去控制时间;6. 程序执行过程:然后加上几个基本的头文件来执行函数,首先设置按键操作,用:w,a,d,s 控制,然后进行界面的初始化设置,启动,时针参数设置,开始新游戏, 开始随机下落方块, 显示下一个方块, 再行旋转, 移动,清除,加分,速度参数,最后判断是否已满,停止游戏,打出分数,结束的画面设置,游戏
3、终止. 二、概要设计该程序中的函数设置总体主要功能大致如下1. 找到合适的方块盒子 (7 种)使其一一下落 boxMAX_C55 = /*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, 4 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. 设置时间指针,实现旋转,移动,消去,显示加分,改变速度分别
4、用下面函数表示 int setTimer(Timer *t, unsigned int intv, BOOL en); /* 设置时钟 t, 参数分别为时钟指针 , 时间间隔 , 是否活动 */ void rotateBox(int box155, int box255) /* 旋转 box1 输出到 box2*/ int move(int dir) /*实现移动,返回成功与否*/ void clear() /*清除掉满行 */ void prscore() /*打印现在的分数 */ void spe()/*显示速度的改变 */ 3. 外部函数功能如下图4. 建立整个函数的流程图如下: 益智游
5、戏俄罗斯方块判 断 最后 , 游戏 结 束的操作 ; 用prscore( ) 和界 面 设置完成开始界面界面设置void initMap 函数 和void render绘图函数随 机 显 示 方块,并建立下一个;用 rand( )与void rebuidNext 方块的旋转和移动下落;用rorate()move()与 drop ()来实现判断是否能继续下落;用 int test()函 数 来 完成;分数的改变与速度设置;用prscore ()与 spe()来完成5 N Y Y N 时间指针设定随机出示方块,并显示下个方块实现方块的旋转,移动判断是否到底加分,速度设置判断是否已满打印分数,结束处
6、理游戏结束6 流程简介:玩家定义游戏开始,游戏显示开始界面,时针已经设定好,然后随机出示方块,玩家进行方块的旋转,左右移动,和下落控制,然后在旁边的表格中出示另一个表格显示下一个即将下落的方块,然后判断是否到达底部, 若到,继续出示方块,若没,则可继续变换,下落到低端后在进行判断,是否可以消除该行,再进行分数的变换,速度的调整,然后判断是否已经满,若未满,则继续出示下一个方块,若满,则结束游戏,打印分数,出示结束界面,游戏终止。三、详细设计1. 设置七种方块:这个用int boxMAX_C55 = /*MAX_C(7)种预定义的盒子*/ 来实现;即七个 5*5 的盒子数组,方块实体用1 表示,
7、 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, 7 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,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
8、 , 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 , 8 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. 时钟的控制,用来控制方块的下落间隔
9、时间及速度/* 时钟结构控制 */ typedef struct /*时钟结构 */ BOOL enabled; /*时钟是否开启 */ unsigned int intervel; /*定时间隔 */ unsigned int lasttime; /*这个属于内部使用变量 */ Timer; 4.int GetTickCount() /*读取 BIOS时钟*/ int ret; ret = peek(0 x0,0 x46e); /*实际上读取了内存0:046e 处的内容 */ ret enabled = en; /*设置一个时钟罗 */ 9 t - intervel = intv; t -
10、lasttime = GetTickCount(); /*lasttime记录的是上一个 */ /*tickcount返回的东西 */ /* 这样当再一次测试时间时新的tickcount产生了它来减去上一次的 tickcount就得出了一个时间间隔, 这个就可以和 intervel比较从而得出是否激活了 */ return 0; 实现了以上的操作后,接下来要实现界面的设置一方便盒子在界面上的显示和操作;5.void initMap(void) /*初始化地图 */ /* 我们须要一圈卫兵呵呵,全是1. 用来保证方块不会出来 */ int x, y; for(y = 0; y MAX_Y; y+
11、) for(x = 0; x MAX_X; x+) if(x MAX_X - 3 | y MAX_Y - 3) mapyx = 1; else mapyx = 0; /*这里初始化出这个形状 */ /*当然是无盖的 .*/ void render(void) /*这里唯一的绘图函数 */ int x, y; static int cPage = 0; /*当前页 , 换页用 */ #define STARTX 50 /*定义几个常量 */ #define STARTY 0 /*数值根据自己的需要可以自己设置*/ #define LEN 18 10 setactivepage(cPage=(cP
12、age = 0?1:0); /*选择页 */ cleardevice(); /*清屏*/ setcolor(12);/*前景颜色 */ prscore(); setcolor(15); rectangle( STARTX + LEN * 2 - 2, STARTY + LEN * 3 - 2, STARTX + LEN * (MAX_X - 2) + 2, STARTY + LEN * (MAX_Y - 2) + 2); /* 用白色画一个外框 */ setfillstyle(SOLID_FILL, 5); for(y = 3; y MAX_Y - 2; y+) /*画地图 */ for(x
13、= 2; x MAX_X - 2; x+) if(mapyx) rectangle( x * LEN + STARTX, y * LEN + STARTY, x * LEN + STARTX + LEN, y * LEN + STARTY + LEN); bar( x * LEN + STARTX + 1, y * LEN + STARTY + 1, x * LEN + STARTX + LEN - 2, y * LEN + STARTY + LEN - 2); /* 绘图操作就不要作太复杂的介绍了, 这只写作用 */ /* 以上段 , 根据地图上的点阵情况将地图反映到屏幕上*/ for(y
14、= 0; y 5; y+) /*画下落物 */ for(x = 0; x 2) rectangle( (x + curx) * LEN + STARTX, (y + cury) * LEN + STARTY, (x + curx) * LEN + STARTX + LEN, (y + cury) * LEN + STARTY + LEN); bar( (x + curx) * LEN + STARTX +1, (y + cury) * LEN + STARTY + 1, (x + curx) * LEN + STARTX + LEN - 2, (y + cury) * LEN + STARTY
15、 + LEN - 2); /* 以上将下落的盒子按昭它在地图上的坐标, 画到对应的区域里 */ for(y = 0; y 5; y+) /*画下一个 */ for(x = 0; x 5; x+) if(nextboxyx) rectangle( x * LEN + 320, y * LEN + 10, x * LEN + 338, y * LEN + 28); bar( x * LEN + 321, y * LEN + 11, x * LEN + 336, y * LEN + 26); 12 /* 这个画出下一个盒子的预览*/ setvisualpage(cPage); /*确认在 cPage
16、页里画好了 */ /* 将它显示出来 */ 这样我们的初始化界面和盒子在图上的意义显示已经完成;5. 接下里我们要对即将出现的方块的形状进行预览即建立一个新的函数用来显示下一个下落的盒子; void rebuidNext() /*新建下一个形状并放到nextbox 中*/ int i, x, y; i = random(MAX_C); /*从几种方块里面选一种 */ for(y = 0; y 5; y+) /*并复制过来 */ for(x = 0; x 5; x+) nextboxyx = boxiyx; /*复制*/ void putBox() /*将 curbox 填充到地图上 */ in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 俄罗斯方块 实验 报告
限制150内