俄罗斯方块C语言程序设计报告Word文件下载.docx
《俄罗斯方块C语言程序设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块C语言程序设计报告Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
、俄罗斯方块游戏需要设计的功能函数包括:
、声明俄罗斯方块的结构体
、函数原型声明
、制作游戏窗口
、制作俄罗斯方块
、判断是否可动
、随机产生俄罗斯方块类型的序号
、打印俄罗斯方块
、清除俄罗斯方块的痕迹
、判断是否满行并删除满行的俄罗斯方块
三、程序设计
1、程序总体结构设计
(1)、游戏方块预览功能。
在游戏过程中,游戏界面右侧会有预览区。
由于在此游戏中存在多种不同的游戏方块,所以在游戏方块预览区域中显示随机生成的游戏方块有利于游戏玩家控制游戏的策略。
(2)、游戏方块控制功能。
通过各种条件的判断,实现对游戏方块的左移、右移、自由下落、旋转功能,以及行满消除行的功能。
(3)、游戏数据显示功能。
在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。
例如,消除一行加100分,游戏分数达到一定数量之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方块的下落速度将加快,游戏的难度将增加。
以上游戏数据均会在游戏界面右侧显示以提示玩家。
(4)、游戏信息提示功能。
玩家进入游戏后,将有对本游戏如何操作的友情提示。
(5)、游戏结束退出功能。
判断游戏结束条件,通过Esc键进行退出。
否
是
游戏执行主流程图
2、界面设计
分为左右两个部分:
*左边为游戏面板
*右边有三部分:
游戏数据提示框、下一个方块提示框和功能提示框
3、重要功能函数设计
1)、声明俄罗斯方块的结构体
structTetris
{
intx;
//中心方块的x轴坐标
inty;
//中心方块的y轴坐标
intflag;
//标记方块类型的序号
intnext;
//下一个俄罗斯方块类型的序号
intspeed;
//俄罗斯方块移动的速度
intcount;
//产生俄罗斯方块的个数
intscore;
//游戏的分数
intlevel;
//游戏的等级
};
2)、函数原型声明
//光标移到指定位置
voidgotoxy(HANDLEhOut,intx,inty);
//制作游戏窗口
voidmake_frame();
//随机产生方块类型的序号
voidget_flag(structTetris*);
//制作俄罗斯方块
voidmake_tetris(structTetris*);
//打印俄罗斯方块
voidprint_tetris(HANDLEhOut,structTetris*);
//清除俄罗斯方块的痕迹
voidclear_tetris(HANDLEhOut,structTetris*);
//判断是否能移动,返回值为1,能移动,否则,不动
intif_moveable(structTetris*);
//判断是否满行,并删除满行的俄罗斯方块
voiddel_full(HANDLEhOut,structTetris*);
//开始游戏
voidstart_game();
3)、制作游戏窗口
voidmake_frame()
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);
//定义显示器句柄变量
gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);
//打印游戏名称
printf("
俄罗斯方块"
);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);
//打印选择菜单
**********下一个方块:
"
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
**********"
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
↑键:
变体"
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
空格:
暂停游戏"
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
Esc:
退出游戏"
gotoxy(hOut,FrameX,FrameY);
//打印框角并记住该处已有图案
╔"
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
╗"
gotoxy(hOut,FrameX,FrameY+Frame_height);
╚"
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);
╝"
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);
═"
//打印上横框
}
gotoxy(hOut,FrameX+i,FrameY+Frame_height);
//打印下横框
a[FrameX+i][FrameY+Frame_height]=2;
//记住下横框有图案
for(i=1;
Frame_height;
i++)
gotoxy(hOut,FrameX,FrameY+i);
║"
//打印左竖框
a[FrameX][FrameY+i]=2;
//记住左竖框有图案
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);
//打印右竖框
a[FrameX+2*Frame_width-2][FrameY+i]=2;
//记住右竖框有图案
}
4)、制作俄罗斯方块
voidmake_tetris(structTetris*tetris)
a[tetris->
x][tetris->
y]=b[0];
//中心方块位置的图形状态:
1-有,0-无
switch(tetris->
flag)//共6大类,19种类型
case1:
//田字方块
{
y-1]=b[1];
x+2][tetris->
y-1]=b[2];
y]=b[3];
break;
case2:
//直线方块:
----
x-2][tetris->
y]=b[1];
y]=b[2];
x+4][tetris->
case3:
|
y-2]=b[2];
y+1]=b[3];
case4:
//T字方块
case5:
//T字顺时针转90度方块
y+1]=b[2];
case6:
//T字顺时针转180度方块
case7:
//T字顺时针转270度方块
case8:
//Z字方块
y+1]=b[1];
case9:
//Z字顺时针转90度方块
case10:
//Z字顺时针转180度方块
case11:
//Z字顺时针转270度方块