字符界面推箱子

版权声明:转载请链接出处 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的功能没有写。
play
按键盘上WASD控制圆圈,当所有五角星全部变成实心,进入下一关或结束。
胜利
大致就是这样,具体如何实现的,可以看一下代码,很简单。
当初,没有加备注这个习惯,具体就不深究了,存在bug,这里就不改了。编译还能通过,源码也可以下载,有兴趣可以自己试一下。

这里说一下,后面会还会写一些小游戏的程序,这个程序使用Dev-c++编译器,后面有的使用VS2015,这些都大差不差,只要能编译运行就OK。也有使用Qt的,由于版本有些差异,我会将Qt程序统一用5.11.2的。还有些会使用到EasyX库,只需要简单安装就可以了。

本篇源码下载:点击这里
EasyX库下载地址:https://www.easyx.cn/
下一篇:图形界面推箱子

猜你喜欢

转载自blog.csdn.net/BluseLIBB/article/details/87900150