版权声明:转载请链接出处 https://blog.csdn.net/BluseLIBB/article/details/87900150
这是我大概一年半之前写的。大一的暑假,C语学了都差不多忘了,想重新捡起来,就边学边做了个控制台的推箱子,我记得写了三四天。。。在这里大概说一下程序吧,当是加点内容,毕竟才开张。
先讲一下思路,在界面上绘制出箱子,角色,墙等,然后通过键盘输入控制角色移动,用while循环保证程序不结束,每移动一次角色便重新绘制一次。角色每次移动箱子就对胜利条件进行判定,当达成胜利条件时,结束循环。
变量,全是全局变量
//推箱子游戏
int inputnumber;//用来接收用户输入
int a=0, b=0;
int map[9][9];//绘制的当前地图
int map1[9][9] = //关卡1
int map2[9][9] = //关卡2
int map3[9][9] = //关卡3
int maprescurce[9][9];
int mapstore=0; //当前关卡
int pre[2]={0,0};
这是一些实现的函数。
void printfmap();//打印地图
int victory();//判断是否胜利
void Findpoint(int *n,int *m);//找到自己起始位置
void W(int *n ,int *m);//上
void A(int *n, int *m);//左
void S(int *n, int *m);//下
void D(int *n, int *m);//右
void input();//玩家输入
void inboundry();//打印进入界面
void mainboundry();//打印主界面
void pauseboundry();//打印暂停界面
void victoryboundry();//打印胜利界面
void outboundry();//退打印出界面
void choisemap();//选择地图/关卡
主函数。
int main()//主函数
{
inboundry();
mainboundry();
system("pause");
return 0;
}
主界面的绘制和功能实现。
void mainboundry()//主界面
{
system("cls");
printf("---------------------------\n");
printf("--------1.开始游戏---------\n");
printf("--------2.读取游戏---------\n");
printf("--------3.重新开始---------\n");
printf("--------4.退出-------------\n");
printf("---------------------------\n");
printf("---输入相应数字开始游戏----\n");
printf("---------------------------\n");
while (1)
{
scanf("%d", &inputnumber);
switch (inputnumber)
{
case 1:
choisemap();
printfmap();
input();
break;
case 2:
break;
case 3:
mapstore=0;
choisemap();
printfmap();
input();
break;
case 4:
exit(0);
break;
default:
printf("错误输入\n");
system ("pause");
break;
}
}
}
用getchar()获取玩家输入,判定输入值,以调用上、下、左、右四个功能函数。在功能函数中,分别对map[][]这个二维数组的值进行计算。
每次绘制箱子,角色,墙的函数
void printfmap()//打印地图
{
system("cls");
for(int i=0;i<9;i++)
{
for(int j=0; j<9;j++)
{
if(map[i][j]==0)
{
printf(" ");
}
if(map[i][j]==1)
{
printf("■");
}
if(map[i][j]==9)
{
printf("\n");
}
if(map[i][j]==2)
{
printf("☆");
}
if(map[i][j]==3)
{
printf("□");
}
if(map[i][j]==4)
{
printf("⊙");
}
if(map[i][j]==5)
{
printf("★");
}
}
}
printf("\n用 w a s d 控制移动\n");
printf("-1.重新开始--2.返回-\n");
}
其他函数就不一一往里面贴了,源码见后面链接。运行程序,进入初始界面,然后pause等待用户按键。
然后是主界面,打印选项,while(1)循环等待接收正确选项。
选择1开始,2的功能没有写。
按键盘上WASD控制圆圈,当所有五角星全部变成实心,进入下一关或结束。
大致就是这样,具体如何实现的,可以看一下代码,很简单。
当初,没有加备注这个习惯,具体就不深究了,存在bug,这里就不改了。编译还能通过,源码也可以下载,有兴趣可以自己试一下。
这里说一下,后面会还会写一些小游戏的程序,这个程序使用Dev-c++编译器,后面有的使用VS2015,这些都大差不差,只要能编译运行就OK。也有使用Qt的,由于版本有些差异,我会将Qt程序统一用5.11.2的。还有些会使用到EasyX库,只需要简单安装就可以了。
本篇源码下载:点击这里
EasyX库下载地址:https://www.easyx.cn/
下一篇:图形界面推箱子