俄罗斯方块C语言程序设计报告
- 格式:doc
- 大小:112.50 KB
- 文档页数:18
C语言课程设计报告
俄罗斯方块程序设计报告
一、问题描述
俄罗斯方块(Tetris,俄文:Тетрис)是一款电视游戏机和掌上游戏
本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
在本次设计中,要求支持键盘操作和若干种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,为玩家提供了不同的选择。
二、功能分析
I、俄罗斯方块游戏需要解决的问题包括:
⑴、随机产生方块并自动下移
⑵、用Esc键退出游戏
⑶、用键变体
⑷、用键和键左右移动方块
⑸、用空格键使游戏暂停
⑹、能正确判断满行并消行、计分、定级别
⑺、设定游戏为不同级别,级别越高难度越大
II、俄罗斯方块游戏需要设计的功能函数包括:
⑴、声明俄罗斯方块的结构体
⑵、函数原型声明
⑶、制作游戏窗口
⑷、制作俄罗斯方块
⑸、判断是否可动
⑹、随机产生俄罗斯方块类型的序号
⑺、打印俄罗斯方块
⑻、清除俄罗斯方块的痕迹
⑼、判断是否满行并删除满行的俄罗斯方块三、程序设计
1、程序总体结构设计
(1)、游戏方块预览功能。在游戏过程中,游戏界面右侧会有预览区。由于在此游戏中存在多种不同的游戏方块,所以在游戏方块预览区域中显示随机生成的游戏方块有利于游戏玩家控制游戏的策略。
(2)、游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右移、自由下落、旋转功能,以及行满消除行的功能。
(3)、游戏数据显示功能。在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。例如,消除一行加100分,游戏分数达到一定数量之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方块的下落速度将加快,游戏的难度将增加。以上游戏数据均会在游戏界面右侧显示以提示玩家。
(4)、游戏信息提示功能。玩家进入游戏后,将有对本游戏如何操作的友情提示。
(5)、游戏结束退出功能。判断游戏结束条件,通过Esc键进行退出。
否
是
游戏执行主流程图
2、界面设计
分为左右两个部分:
*左边为游戏面板
*右边有三部分:游戏数据提示框、下一个方块提示框和功能提示框
3、重要功能函数设计
1)、声明俄罗斯方块的结构体
struct Tetris
{
int x; //中心方块的x轴坐标
int y; //中心方块的y轴坐标
int flag; //标记方块类型的序号
int next; //下一个俄罗斯方块类型的序号
int speed; //俄罗斯方块移动的速度
int count; //产生俄罗斯方块的个数
int score; //游戏的分数
int level; //游戏的等级
};
2)、函数原型声明
//光标移到指定位置
void gotoxy(HANDLE hOut, int x, int y);
//制作游戏窗口
void make_frame();
//随机产生方块类型的序号
void get_flag(struct Tetris *);
//制作俄罗斯方块
void make_tetris(struct Tetris *);
//打印俄罗斯方块
void print_tetris(HANDLE hOut,struct Tetris *);
//清除俄罗斯方块的痕迹
void clear_tetris(HANDLE hOut,struct Tetris *);
//判断是否能移动,返回值为1,能移动,否则,不动
int if_moveable(struct Tetris *);
//判断是否满行,并删除满行的俄罗斯方块
void del_full(HANDLE hOut,struct Tetris *);
//开始游戏
void start_game();
3)、制作游戏窗口
void make_frame()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定义显示器句柄变量gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); //打印游戏名称
printf("俄罗斯方块");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7); //打印选择菜单
printf("**********下一个方块:");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
printf("**********");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
printf("↑键:变体");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
printf("空格:暂停游戏");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
printf("Esc :退出游戏");
gotoxy(hOut,FrameX,FrameY); //打印框角并记住该处已有图案printf("╔");
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
printf("╗");
gotoxy(hOut,FrameX,FrameY+Frame_height);
printf("╚");
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height); printf("╝");
a[FrameX][FrameY+Frame_height]=2;
a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY);
printf("═"); //打印上横框
}
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY+Frame_height);
printf("═"); //打印下横框
a[FrameX+i][FrameY+Frame_height]=2; //记住下横框有图案
}
for(i=1;i { gotoxy(hOut,FrameX,FrameY+i); printf("║"); //打印左竖框 a[FrameX][FrameY+i]=2; //记住左竖框有图案 } for(i=1;i { gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i); printf("║"); //打印右竖框 a[FrameX+2*Frame_width-2][FrameY+i]=2; //记住右竖框有图案} }