c语言俄罗斯方块实验报告
更新时间:2023-10-05 04:34:01 阅读量: 综合文库 文档下载
C语言之游戏
俄罗斯方块课程设计报告
专
业:学生姓名:指导教师:完成时间:
[] []
1
[]
目录
一、需求分析 ................................. 错误!未定义书签。 二、概要设计 ................................. 错误!未定义书签。 三、详细设计 ................................. 错误!未定义书签。 四、调试分析 ................................................ 19 五、用户手册 ................................................ 20 六、测试数据 ................................. 错误!未定义书签。 七、附录 ..................................... 错误!未定义书签。
2
一、需求分析
1.该程序是完成一个简易的俄罗斯方块的任务,其要完成几个重要的功能:界面,方块下落,旋转,判断是否还能下落,左右移动,分数,速度设置,清楚满的每行,下个方块的预览等;
2.可用#include
3.可用7个二维5*5数组去实现下落方块的全部类型,再用随机函数使其随机下落;
4.用#include
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},
3
{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.外部函数功能如下图 界面设置 void initMap函数 和void render绘 益智游戏 俄罗斯方块 随机显示方块,并建立下一个;用rand() 与方块的旋转和移动下落;用判断是否能继续下落;用int test()函数来完成; 分数的改变与速度设置;用prscore()与spe()来完成 判断最后,游戏结束的操作;用prscore()和界面设置完成 rorate()move()void 图函数 4.建立整个函数的流程图如下: 与droprebuidNext ()来实现 开始界面 4
时间指针设定 随机出示方块, 并显示下个方块 实现方块的旋转,移动 判断是否到底 N Y 加分,速度设置 Y
判断是否已满
打印分数,结束处理 游戏结束
N 5
流程简介:玩家定义游戏开始,游戏显示开始界面,时针已经设定好,然后随机出示方块,玩家进行方块的旋转,左右移动,和下落控制,然后在旁边的表格中出示另一个表格显示下一个即将下落的方块,然后判断是否到达底部,若到,继续出示方块,若没,则可继续变换,下落到低端后在进行判断,是否可以消除该行,再进行分数的变换,速度的调整,然后判断是否已经满,若未满,则继续出示下一个方块,若满,则结束游戏,打印分数,出示结束界面,游戏终止。
三、详细设计
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},
6
{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} }, {
{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} }, {
7
{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; /*设置一个时钟罗*/
8
t -> intervel = intv;
t -> lasttime = GetTickCount(); /*lasttime记录的是上一个*/ /*tickcount返回的东西*/
/*这样当再一次测试时间时新的tickcount产生了
它来减去上一次的tickcount就得出了一个时间 间隔,这个就可以和intervel比较从而得出是否 激活了 */ return 0;
} 实现了以上的操作后,接下来要实现界面的设置一方便盒子在界面上的显示和操作;
5.void initMap(void) { /*初始化地图*/ /*
我们须要一圈卫兵呵呵,全是1...用来保证方块不会出来*/ int x, y;
for(y = 0; y < MAX_Y; y++) { for(x = 0; x < MAX_X; x++) {
if(x < 2 || x > MAX_X - 3 || y > MAX_Y - 3) map[y][x] = 1; else map[y][x] = 0; }
} /*这里初始化出这个形状*/ } /*当然是无盖的...*/
void render(void) /*这里唯一的绘图函数*/ int x, y;
static int cPage = 0; /*当前页,换页用*/ #define STARTX 50 /*定义几个常量*/
#define STARTY 0 /*数值根据自己的需要可以自己设置*/ #define LEN 18
9
setactivepage(cPage=(cPage == 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 = 2; x < MAX_X - 2; x++) { if(map[y][x]) {
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 = 0; y < 5; y++) { /*画下落物*/ for(x = 0; x < 5; x++) { if(curbox[y][x]) {
10
正在阅读:
c语言俄罗斯方块实验报告10-05
北洛河流域综合规划05-07
实验一 固体物料的粒度分布测定07-01
帮妈妈做家务作文250字07-05
优秀党务工作者先进事迹材料范文02-24
第7章 物流企业作业管理06-03
小学堆雪人作文06-15
关于春节的作文350字06-27
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 俄罗斯
- 方块
- 语言
- 实验
- 报告
- 对湖南省高职教育国际交流与合作现状的思考-2019年精选作文
- 表5.13-2螺杆式启闭机电气设备安装质量检查表
- 谭浩+日本的诚信教育及对我国的启示
- 中国耳环行业市场调查研究报告(目录) - 图文
- 生化实验指导
- 线路光纤纵差保护
- 网络信息资源检索练习
- 国家电网今年首批充电桩招标结果发榜
- VB题库(3)
- 超声诊断学试题库
- 哈勃望远镜拍摄到恒星残骸
- MPLS L2VPN介绍及方案设计
- 王晓春给青年教师的100条建议读后感
- 山东省青州第一中学高二研修报告展览览古州胜景书学子情怀 - 图文
- 齿轮范成原理- 机械设计
- 幼儿园说课稿步骤(共5篇)
- 《大学物理》模拟试卷二
- 综述(1)
- 中国通用机械工业协会风机分会技术发展工作委员会名单
- 市政道路改造工程施工组织设计范本