当前位置:文档之家› C语言课程设计报告 俄罗斯方块改进版

C语言课程设计报告 俄罗斯方块改进版

课程设计
俄罗斯方块改进
2016年4月20

设计题目 学号
专业班级 学生姓名 指导教师
目录
1. 课程设计目的错误!未定义书签。

2. 功能分析错误!未定义书签。

3. 程序设计实现过程错误!未定义书签。

程序总体设计结构错误!未定义书签。

界面设计错误!未定义书签。

重要数据的数据结构设计错误!未定义书签。

函数设计错误!未定义书签。

4. 运行效果错误!未定义书签。

5. 源代码详解错误!未定义书签。

6. 参考文献错误!未定义书签。

俄罗斯方块改进
1. 课程设计问题
据百度百科,俄罗斯方块(Tetris)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。

游戏的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

要求支持键盘操作和7种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,消去一行所得到的分数越高,为玩家提供了不同的选择。

2. 功能分析
俄罗斯方块游戏需要解决的问题包括:
⑴按任意键开始游戏,随机产生方块并自动下移
⑵用Esc键退出游戏。

⑶用键变换方块
⑷用键和键左右移动方块
⑸用键使方块加速下移
⑹用空格键使方块暂停
⑺能正确判断满行并消行、计分、定级别
⑻设定游戏方块为不同形状重点:
*游戏面包的数据结构:二维数组
*7种形状方块的数据结构:结构体保存每种形状方块的坐标
3. 程序设计实现过程
程序总体设计结构
首先初始化进入图形模式,进入欢迎界面,玩家按任意进入主菜单界面,按键进入游戏界面,键然后设置新的时钟中断。

开始游戏后,进入该程序最核心的部分——处理和实现进行过程中的各种事件和函数。

在处理中判断游戏是否结束,如果没有结束,则重新开始游戏,否则结束游戏。

详解如下:
(1)游戏方块预览功能。

在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。

由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。

(2)游戏方块控制功能。

通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能,以及行满消除行的功能。


游戏执行主流程图
(3)游戏显示更新功能。

在判断键值时,有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、变形旋转VK_UP、退出VK_ESC键值的判断。

当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块。

当消除满行时,要重绘游戏底板的当前状态。

(4)游戏速度分数更新功能。

在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。

比如,消除一行加10分。

当游戏分数达到一定数量之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方块的下落速度将加快,游戏的难度将增加。

(5)游戏帮助功能。

玩家进入游戏后,将有对本游戏如何操作的友情提示。

主函数:
void main()
{
InitializeGraph();
SetTimer(newtimer); /*设置新的时钟中断*/
while(1)
{
StartGame();
ProcessInGame();
if(GameOver())
break;
bOver = FALSE;
}
KillTimer();
closegraph();
}
界面设计
分为左右两个部分:
*左边为游戏面板
*右边有三部分:下一个形状提示框、速度框和计分框
重要数据的数据结构设计
1)定义方块形状:
定义如下的结构体来表示每一个形状:
struct block{
int arrXY[8];
int nColor;
int nNext;
}; /*保存某一形状信息的结构体*/
Struct SHAPE shapes[MAX_BOX]=
{
口口口口口口口
口口口口口口
口口口
{0x88, 0xc0, CYAN, 1},
{0xe8, 0x0, CYAN, 2},
{0xc4, 0x40, CYAN, 3},
{0x2e, 0x0, CYAN, 0},
口口口口口口
口口口口
口口口口口口
{0x44, 0xc0, MAGENTA, 5},
{0x8e, 0x0, MAGENTA, 6},
{0xc8, 0x80, MAGENTA, 7},
{0xe2, 0x0, MAGENTA, 4},

口口口口
口口口
{0x8c, 0x40, YELLOW, 9},
{0x6c, 0x0, YELLOW, 8},
口口口
口口口口

{0x4c, 0x80, BROWN, 11},
{0xc6, 0x0, BROWN, 10},
口口口
口口口口口口口口口口
口口口
{0x4e, 0x0, WHITE, 13},
{0x8c, 0x80, WHITE, 14},
{0xe4, 0x0, WHITE, 15},
{0x4c, 0x40, WHITE, 12},


口口口口口

{0x88, 0x88, RED, 17},
{0xf0, 0x0, RED, 16},
口口
口口
{0xcc, 0x0, BLUE, 18),
}
2)定义游戏的主界面:宽10、高20的游戏板
(1)数据结构:全局数组Gameboard[12][22],1表示已有的方块,0表示这个位置空着。

在10*20基础上各自加2行、2列为了便于判断形状在移动时是否到边、到底。

整个屏幕的坐标系原先为640*480。

在此游戏中,将16个像素定义为一个方格的边长,所以坐标系转变成为了40*30(640/16=40,480/10=30)。

(2)玩家进行游戏时,需要对游戏界面进行初始化工作。

此代码被main()函数调用。

主要进行的工作如下:
①循环调用line()函数绘制当前游戏板。

②调用nScore()函数显示初始的成绩,初始成绩为0。

③调用npeed()函数显示初始的速度(等级),初始速度1。

****************************************************
* 注:x,y为左上角坐标
* * m,n对应于Vertical_boxs,Horizontal_boxs
* * 分别表示纵横方向上方块的个数(以方块为单位)
** BOARD_LEFT_X ,BOARD_LEFT_Y
*****************************************************
函数设计
1、本程序有主函数和个函数组成:本程序总共由24个函数组成。

2、函数相互作用关系见下图
4. 运行效果
5. 源代码详解
#include <>
#include <>
#include <>
#include <>
参考文献
《C程序设计》第四版谭浩强著清华大学出版社出版
《C语言程序设计》刘国成科学出版社
《从问题到程序》裘宗燕北京大学出版社
《计算机二级教程》刘瑞挺南开大学出版社
《C语言程序设计基础教程》陈朔鹰,兵器工业出版社[5] C语言程序设计姜仲秋南京大学出版社。

相关主题