俄罗斯方块C语言程序设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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);
//记住左竖框有图案
}
for(i=1;i<Frame_height;i++)
{
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);
printf("║");
//打印右竖框
a[FrameX+2*Frame_width-2][FrameY+i]=2; //记住右竖框有图案
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y]=b[3];
break;
}
俄罗斯方块程序设计报告 2017-1-13
case 6:
//T 字顺时针转 180 度方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
break;
}
case 4:
//T 字方块
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x][tetris->y+1]=b[3];
break;
}
case 5:
//T 字顺时针转 90 度方块
{Βιβλιοθήκη Baidu
a[tetris->x][tetris->y-1]=b[1];
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;
(3)、游戏数据显示功能。在游戏玩家进行游戏过程中,需要按照一定的游 戏规则给玩家计算游戏分数。例如,消除一行加 100 分,游戏分数达到一定数量
俄罗斯方块程序设计报告 2017-1-13
之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方块的下落速度将 加快,游戏的难度将增加。以上游戏数据均会在游戏界面右侧显示以提示玩家。
3)、制作游戏窗口
void make_frame() {
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定义显示器句柄变量 gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); //打印游戏名称
俄罗斯方块程序设计报告 2017-1-13
{
case 1:
//田字方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 2:
//直线方块:----
{
a[tetris->x-2][tetris->y]=b[1];
printf("═");
//打印下横框
a[FrameX+i][FrameY+Frame_height]=2; //记住下横框有图案
}
for(i=1;i<Frame_height;i++)
{
gotoxy(hOut,FrameX,FrameY+i);
printf("║");
//打印左竖框
a[FrameX][FrameY+i]=2;
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 7:
//T 字顺时针转 270 度方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 11:
//Z 字顺时针转 270 度方块
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
游戏是否结束 是
关闭游戏界面返回程序 游戏执行主流程图
2、界面设计
分为左右两个部分:
*左边为游戏面板 *右边有三部分:游戏数据提示框、下一个方块提示框和功能提示框
俄罗斯方块程序设计报告 2017-1-13
3、重要功能函数设计
1)、声明俄罗斯方块的结构体 struct Tetris { int x; //中心方块的 x 轴坐标 int y; //中心方块的 y 轴坐标 int flag; //标记方块类型的序号 int next; //下一个俄罗斯方块类型的序号 int speed; //俄罗斯方块移动的速度 int count; //产生俄罗斯方块的个数 int score; //游戏的分数 int level; //游戏的等级 };
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case 10:
//Z 字顺时针转 180 度方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
break;
}
case 12:
//7 字方块
{
俄罗斯方块程序设计报告 2017-1-13
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y-1]=b[3];
break;
}
case 13:
(4)、游戏信息提示功能。玩家进入游戏后,将有对本游戏如何操作的友情 提示。
(5)、游戏结束退出功能。判断游戏结束条件,通过 Esc 键进行退出。
打开程序,运行,进入界面 开始游戏
























退
















俄罗斯方块程序设计报告 2017-1-13
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);
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();
printf("Esc :退出游戏");
gotoxy(hOut,FrameX,FrameY);
//打印框角并记住该处已有图案
printf("╔");
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
printf("╗");
gotoxy(hOut,FrameX,FrameY+Frame_height);
}
俄罗斯方块程序设计报告 2017-1-13
}
4)、制作俄罗斯方块
void make_tetris(struct Tetris *tetris)
{
a[tetris->x][tetris->y]=b[0]; //中心方块位置的图形状态:1-有,0-无
switch(tetris->flag)
//共 6 大类,19 种类型
俄罗斯方块程序设计报告 2017-1-13
C 语言课程设计报告
俄罗斯方块程序设计报告
一、 问题描述
俄罗斯方块(Tetris, 俄文:Тетрис)是一款电视游戏机和掌上游 戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的 基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行 或多行并且消除得分。
break;
}
case 8:
//Z 字方块
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case 9:
//Z 字顺时针转 90 度方块
{
a[tetris->x][tetris->y-1]=b[1];
在本次设计中,要求支持键盘操作和若干种不同类型方块的旋转变换,并且 界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越 高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,为玩家提 供了不同的选择。
二、功能分析
I、俄罗斯方块游戏需要解决的问题包括: ⑴、随机产生方块并自动下移 ⑵、用 Esc 键退出游戏 ⑶、用 键变体 ⑷、用 键和 键左右移动方块 ⑸、用空格键使游戏暂停
三、程序设计
1、程序总体结构设计
(1)、游戏方块预览功能。在游戏过程中,游戏界面右侧会有预览区。由于 在此游戏中存在多种不同的游戏方块,所以在游戏方块预览区域中显示随机生成 的游戏方块有利于游戏玩家控制游戏的策略。
(2)、游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、 右移、自由下落、旋转功能,以及行满消除行的功能。
printf("俄罗斯方块");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7); //打印选择菜单
printf("**********下一个方块:");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
printf("**********");
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x+4][tetris->y]=b[3];
break;
}
case 3:
//直线方块: |
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y-2]=b[2];
a[tetris->x][tetris->y+1]=b[3];
//7 字顺时针转 90 度方块
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x-2][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 14:
//7 字顺时针转 180 度方块
{
a[tetris->x][tetris->y-1]=b[1];
俄罗斯方块程序设计报告 2017-1-13
⑹、能正确判断满行并消行、计分、定级别 ⑺、设定游戏为不同级别,级别越高难度越大
II、俄罗斯方块游戏需要设计的功能函数包括: ⑴、声明俄罗斯方块的结构体 ⑵、函数原型声明 ⑶、制作游戏窗口 ⑷、制作俄罗斯方块 ⑸、判断是否可动 ⑹、随机产生俄罗斯方块类型的序号 ⑺、打印俄罗斯方块 ⑻、清除俄罗斯方块的痕迹 ⑼、判断是否满行并删除满行的俄罗斯方块
相关文档
最新文档