Dec C++中常用的快捷键:
给代码行加注释:<Ctrl+/ >
删除代码行:<Ctrl+D > 只能删除光标所在的代码行
1.俄罗斯方块游戏开发设计细节:
随机产生下滑方块,自动提速,积分,满行消除,方块形状变化,下一方块提示
2、系统功能设计
2.1系统功能结构
2.2业务流程图
3.使用Dev C++创建项目
文件->新建->项目->选择"Basic"选项卡中的第二项-Console Application(控制台应用程序)->C语言
4.预处理模块
预处理指定:#if #ifdef #ifndef #else #endif(条件编译) #define(宏定义) #include(文件引用) #line(行控制) #error(错误指定) #pragma(和实现相关的杂注)
5.游戏欢迎界面
按键盘数字‘1’开始游戏,按”2“查看游戏功能键,按"3"查看本游戏规则,按"4"退出游戏
5.1设计字体颜色
/*** 设计字体颜色 ***/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);//更改字体颜色
return 0;
}
在c语言中,SetConsoleTextAttribute()是设置控制台窗口字体颜色和背景色的函数
函数原型是:
BOOL SetConsoleTextAttribute(HANDLE consolehwnd,WORD wAttributes);
consolehwnd = GetStdHandles(STD_OUTPUT_HANDLE);
GetStdHandle是获得输入,输出或错误的屏幕缓冲区的句柄
参数列表
参数值 | 含 义 |
STD_INPUT_HANDLE | 标准输入的句柄 |
STD_OUTPUT_HANDLE | 标准输出的句柄 |
STD_ERROR_HANDLE | 标准错误的句柄 |
wAttributes是设置颜色的参数
5.2设置文字显示位置
/*** 获取屏幕光标位置 ***/
void gotoxy(int x,int y)
{
COORD pos;
pos.X =x; //横坐标
pos.Y =y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
SetConsoleCursorPosition()函数用来获取控制台的光标位置
COORD pos是一个结构体变量
5.3标题部分设计
/*** 主界面上方的位置 ***/
void title()
{
color(15);//亮白色
gotoxy(28,3);
printf("俄 罗 斯 方 块\n"); //输出标题
color(11); //亮蓝色
gotoxy(18,5); // ■
printf("■"); // ■■
gotoxy(18,6); // ■
printf("■■");
gotoxy(18,7);
printf("■");
color(14); //黄色
gotoxy(26,6); //■■
printf("■■"); // ■■
gotoxy(28,7);
printf("■■");
color(10); //绿色
gotoxy(36,6); //■■
printf("■■"); //■■
gotoxy(36,7);
printf("■■");
color(13); //粉色
gotoxy(45,5); //■
printf("■"); //■
gotoxy(45,6); //■
printf("■"); //■
gotoxy(45,7);
printf("■");
gotoxy(45,8);
printf("■");
color(12); //亮红色
gotoxy(56,6); //■
printf("■"); //■■■
gotoxy(52,7);
printf("■■■");
}
5.4 设计菜单选项的边框
/*** 菜单边框 ***/
void welcome()
{
int n;
int i,j=1;
color(14);
for(i=9;i<=20;i++) //循环y纵坐标,打印输出上,下边框
{
for(j=15;j<=60;j++) //循环x横坐标,打印输出左,右边框
{
gotoxy(j,i);
if(i==9||i==20) printf("="); //输出上,下边框===
else if(j==15||j==59) printf("||"); //输出左,右边框||
}
}
/*** 菜单选项的文字 ***/
color(12);
gotoxy(25,12);
printf("1.开始游戏");
gotoxy(40,12);
printf("2.按键说明");
gotoxy(25,17);
printf("3.游戏规则");
gotoxy(40,17);
printf("4.开始游戏");
gotoxy(21,22);
color(3);
printf("请选择[1,2,3,4]: \b\b");
color(14);
scanf("%d",&n); //输入选项
switch(n)
{
case 1:
system("cls");
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
6.游戏主窗体设计
在界面绘制部分,一部分是左边的方块下落界面,另一部分是右边的得分记录,出现块展示和主要按键说明界面
/*** 制作游戏窗口 ***/
void DrawGameframe()
{
gotoxy(FrameX+Frame_width-5,FrameY-2); //打印游戏名称
color(11);
printf("俄罗斯方块");
gotoxy(FrameX+2*Frame_width+3,FrameY+7);
color(2);
printf("**********"); //打印下一个出现方块的上边框
gotoxy(FrameX+2*Frame_width+13,FrameY+7);
color(3);
printf("下一出现方块:");
gotoxy(FrameX+2*Frame_width+3,FrameY+13);
color(2);
printf("**********"); //打印下一个出现方块的下边框
gotoxy(FrameX+2*Frame_width+3,FrameY+17);
color(14);
printf("↑键:旋转");
gotoxy(FrameX+2*Frame_width+3,FrameY+19);
printf("空格:暂停游戏");
gotoxy(FrameX+2*Frame_width+3,FrameY+15);
printf("Esc:退出游戏");
gotoxy(FrameX,FrameY);
color(12);
printf("╔");
gotoxy(FrameX+2*Frame_width-2,FrameY);
printf("╗");
gotoxy(FrameX,FrameY+Frame_height);
printf("╚");
printf("╔");
gotoxy(FrameX+2*Frame_width-2,FrameY+Frame_height);
printf("╝");
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(FrameX+i,FrameY);
printf("=="); //打印上横框
}
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(FrameX+i,FrameY+Frame_height);
printf("=="); //打印下横框
a[FrameX+i][FrameY+Frame_height]=2; //标记下横框为游戏边框,防止方块出界
}
for(i=1;i<Frame_height;i++)
{
gotoxy(FrameX,FrameY+i);
printf("║"); //打印左竖框
a[FrameX][FrameY+i]=2;//标记左竖框为游戏边框,防止边框出界
}
for(i=1;i<Frame_height;i++)
{
gotoxy(FrameX+2*Frame_width-2,FrameY+i);
printf("║"); //打印右竖框
a[FrameX+2*Frame_width-2][FrameY+i]=2;//标记右竖框为游戏边框,防止方块出界
}
}
按1 进入游戏界面
俄罗斯方块是要下落到下方边框才可,此时要做一个判断
定义一个数组a[80][80]用来标记游戏屏幕的图案,只有3个值 分别为2,1,0.
2表示数组a所示的位置为游戏边框
1表示数组a所示位置有方块
0表示无图案
只要分别找到游戏的左,右,下边框的数组表示,让其数组值为2,就可以成功设置边界
边界代码:
a[FrameX+i][FrameY+Frame_height]=2; //标记下横框为游戏边框,防止方块出界
a[FrameX][FrameY+i]=2;//标记左竖框为游戏边框,防止边框出界
a[FrameX+2*Frame_width-2][FrameY+i]=2;//标记右竖框为游戏边框,防止方块出界
7.游戏逻辑设计
1.制造方块不断下落的现象
2.在方块下落的时候,判断方块能不能放置在下方位置;或者能否继续左右移动
3.判断是否满行,满行即删除满行的方块
4.随机产生俄罗斯方块
7.1 判断俄罗斯方块是否可以移动
首先要判断中心方块移动的位置是否为空位置,即a[tetris-