今天向大家介绍一下如何使用C++来写一个推箱子游戏的代码

首先要做出推箱子,我们先要明确它的思路是什么:

如图,在一个推箱子游戏中,我们首先要有一个二维的地图,并在地图中加入障碍物,箱子,小人,还有箱子需要到达的指定地点。当然,简单的把这几个人因素呈现出来是很简单的,如下面的代码:

#include<iostream>
using namespace std;
int main()
{cout<<"\n\n";cout<<"     ###     "<<endl;cout<<"     #*#     "<<endl;cout<<"     # #     "<<endl;cout<<"  ####O######"<<endl;cout<<"  #*  OH O *#"<<endl;cout<<"  #####O#####"<<endl;cout<<"      # #    "<<endl;cout<<"      #*#    "<<endl;cout<<"      ###    "<<endl;
}

运行结果如图:

该代码呈现了一个简单的推箱子地图和内容,其中我们用”#“来做墙壁障碍,“H”代表小人,“O”是箱子,“*”就是箱子要到达的指定地点。
但是我们只是将这些因素呈现了出来,或者说它更像是一个图片,和你在本子上画了一个迷宫没有区别,它不能叫做游戏。要想使它成为游戏,我们还要在里面加上移动系统,使小人“H”移动起来,并且还要推着箱子“O”移动,障碍物墙壁也要起到格挡的作用,当箱子到达*处时,还要显示通关。

移动系统

首先我们要解决让小人H动起来的问题,而且对于一个游戏来说,”H“的运动需要玩家通过键盘来操控,也就是说玩家输入指定字符,H要做出位置的变化。这一点我们可以想象H在一个平面直角坐标系中,当我们输入上下左右之类的案件,会使H的坐标发生不同的变化。这个想法利用C++中的二维数组便可以解决。

迷宫

如,我们先用二维数组初始化一个简单的迷宫:

 char a[50][50]={"OOOOOOOOOOOOOOO","OH  O    O    O","OOO O OO O OO O","O   O  O O    O","OO OOO O OO OOO","OO     O O    O","OOOOOOOO OO O O","OO       O  O O","OO OOOOOOOO O O","OO O        O O","OO OOOOOOO OO O","OO       O O  O","OOOOOOOO   O OO","OOOOOOOOOOOO OO",};

这里的char[50][50]是我往大了点写的,写小点数完全可以,只要能把你的迷宫放进去就行。我们先用O来做墙壁,H做小人。这样就有了H的初始坐标(1,1)和迷宫的出口坐标(13,12)。接下来就是想办法让H动起来了,我们使用“w,d,a,s”分别来控制上下左右,这样就涉及到了一个输入的程序。

需要使用头文件
#include<conio.h>
和函数:

getch();

该函数的作用是进行输入值,但是它于我们的“cin>>”和“scanf()”不同的是,使用getch()函数输入不需要按回车。很容易理解,因为我们在游戏中不能让H走动一下按一下回车。所以接下来我们写定义两个坐标,和输入走动按键的程序:

int i,x,y,p,q;char z;x=1,y=1,p=13,q=12;//用x,y表示H坐标,p,q表示迷宫出口坐标z=getch();//移动键的输入

现在有了坐标,我们就可以做移动系统了,通过if语句来实现,比如要控制H向上移动,我们需要按w键,代码如下:

         if(z=='w'){if(a[x-1][y]!='O'){a[x][y]=' ';x--;a[x][y]='H';}}

显然,我们不能让H撞到障碍物,所以当H移动后的下一个坐标处不是墙壁“O”才行。并且,移动一次之后,H原来的坐标处要变成空的,即用空格来表示。然后将移动后的位置变成H,这样我们就完成了H向上移动的代码,同理,我们可以写出其他三个方向移动的代码:

if(z=='s'){if(a[x+1][y]!='O'){a[x][y]=' ';x++;a[x][y]='H';}}if(z=='d'){if(a[x][y+1]!='O'){a[x][y]=' ';y++;a[x][y]='H';}}if(z=='a'){if(a[x][y-1]!='O'){a[x][y]=' ';y--;a[x][y]='H';}}

但是有了这些我们怎么让计算机将移动后的样子显示出来呢?
这里要用到程序:

system("cls");

这是一个清屏程序,它的执行速度很快,所以我们可以在执行完清屏操作后立即将移动后的程序输出,这样看起来就是H进行了一次移动。为了使H可以无限次的移动,我们将移动系统的代码加在循环里,具体如下:

char a[50][50]={"OOOOOOOOOOOOOOO","OH  O    O    O","OOO O OO O OO O","O   O  O O    O","OO OOO O OO OOO","OO     O O    O","OOOOOOOO OO O O","OO       O  O O","OO OOOOOOOO O O","OO O        O O","OO OOOOOOO OO O","OO       O O  O","OOOOOOOO   O OO","OOOOOOOOOOOO OO",};int i,x,y,p,q;char z;x=1,y=1,p=13,q=12;for(i=0;i<=13;i++)puts(a[i]);while(1){z=getch();if(z=='s'){if(a[x+1][y]!='O'){a[x][y]=' ';x++;a[x][y]='H';}}if(z=='d'){if(a[x][y+1]!='O'){a[x][y]=' ';y++;a[x][y]='H';}}if(z=='a'){if(a[x][y-1]!='O'){a[x][y]=' ';y--;a[x][y]='H';}}if(z=='w'){if(a[x-1][y]!='O'){a[x][y]=' ';x--;a[x][y]='H';}}system("cls");for(i=0;i<=13;i++)puts(a[i]);}

这样你就可以控制H在你做的迷宫中任意的走动了。但是要想使它成为一个游戏,我们还需要加入获胜条件,对于迷宫来说,胜利条件就是到达出口处,这样我们就能加入程序“在到达出口时,跳出循环,并宣布获胜”
即:

if(x==p&&y==q)break;

和:

system("cls");printf("You win!");

为了让程序结束后再停顿几秒,可以加入由#include<windows.h>头文件中的Sleep()函数
再为你的迷宫加上喜欢的颜色,最终代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
int main()
{system("color 0a");char a[50][50]={"OOOOOOOOOOOOOOO","OH  O    O    O","OOO O OO O OO O","O   O  O O    O","OO OOO O OO OOO","OO     O O    O","OOOOOOOO OO O O","OO       O  O O","OO OOOOOOOO O O","OO O        O O","OO OOOOOOO OO O","OO       O O  O","OOOOOOOO   O OO","OOOOOOOOOOOO OO",};int i,x,y,p,q;char z;x=1,y=1,p=13,q=12;for(i=0;i<=13;i++)puts(a[i]);while(1){z=getch();if(z=='s'){if(a[x+1][y]!='O'){a[x][y]=' ';x++;a[x][y]='H';}}if(z=='d'){if(a[x][y+1]!='O'){a[x][y]=' ';y++;a[x][y]='H';}}if(z=='a'){if(a[x][y-1]!='O'){a[x][y]=' ';y--;a[x][y]='H';}}if(z=='w'){if(a[x-1][y]!='O'){a[x][y]=' ';x--;a[x][y]='H';}}if(x==p&&y==q)break;system("cls");for(i=0;i<=13;i++)puts(a[i]);}system("cls");printf("You win!");Sleep(5000);system("pause");return 0;
}



如图,H已经可以移动,并且在到达出口时赢得游戏了!

推箱子的移动系统

有了做迷宫的方法,我们便只需要对移动系统进行稍微改进就可以做出推箱子游戏了。
要知道,推箱子和迷宫唯一不同的,也是唯一的难点就是“箱子”。我们不光要控制H的移动,还有箱子O是被“推动”的。这样一来,if语句要判断的内容就多了。比如:箱子移动的下一个坐标处是不是墙、箱子的下一个坐标处是不是箱子。还有我们在玩经典推箱子时会发现:箱子遇到了*时要有变化,比如变颜色。那我们可以把小球O这个箱子变成@,但这也需要代码来解决。还有当小人走到了*处时,*会变成小人H,可小人H离开后,该点又要变成*,箱子进入*里要变成@,可出来又要变成O,这些这种种因素我们都要考虑进去。
但它们的原理都是和迷宫的不撞墙的一样的,所以我就不一一解释这些了,直接看代码:

        if(z=='w'){if(a[x-1][y]!='#'){if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='@';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-1][y]!='O'&&a[x-1][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';}}}if(z=='a'){if(a[x][y-1]!='#'){if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='@';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-1]!='O'&&a[x][y-1]!='@'){a[x][y]=' ';y--;a[x][y]='H';}}}if(z=='d'){if(a[x][y+1]!='#'){if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='@';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+1]!='O'&&a[x][y+1]!='@'){a[x][y]=' ';y++;a[x][y]='H';}}}if(z=='s'){if(a[x+1][y]!='#'){if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='@';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+1][y]!='O'&&a[x+1][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';}}}

这就是推箱子的移动系统,就是依据迷宫的框架进行完善移动条件。

推箱子其他细节

我们知道,推箱子的胜利条件是将所有箱子都移动到指定位置,所以相比于迷宫的到达出口,我们只是多了几个判断的坐标而已。而推箱子没有过关失败的触发,可当我们将箱子推到了死角处时,就无法继续游戏通过了,所以我们还要加设重新开始的程序,比如按“r”,关卡就会重置。根据这些细节,下面小编列出一个最简单的推箱子关卡:

{a:char a[20][20]={"             ","             ","     ###     ","     #*#     ","     # #     ","  ####O######","  #*  OH O *#","  #####O#####","      # #    ","      #*#    ","      ###    "};system("cls");for(int i=0;i<=11;i++){puts(a[i]);}int x,y;x=6,y=7;while(1){char z;z=getch();if(z=='w'){if(a[x-1][y]!='#'){if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='@';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-1][y]!='O'&&a[x-1][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';}}}if(z=='a'){if(a[x][y-1]!='#'){if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='@';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-1]!='O'&&a[x][y-1]!='@'){a[x][y]=' ';y--;a[x][y]='H';}}}if(z=='d'){if(a[x][y+1]!='#'){if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='@';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+1]!='O'&&a[x][y+1]!='@'){a[x][y]=' ';y++;a[x][y]='H';}}}if(z=='s'){if(a[x+1][y]!='#'){if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='@';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+1][y]!='O'&&a[x+1][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';}}}if(z=='r')goto a;check1(a);system("cls");for(int i=0;i<=11;i++){puts(a[i]);}if(a[6][3]=='@'&&a[6][11]=='@'&&a[9][7]=='@'&&a[3][6]=='@'){Sleep(1500);break;}}system("cls");cout<<"\n\n          这只是第一关哦,来看看下一关吧!";Sleep(3000);
}

这是完整的推箱子第一关,关于重置关卡的问题,我采用了C++中一个非常好用的代码:

a:
goto a;

你可以选择一个你喜欢的标记,可以是单词也可以是字母,在你代码中需要的位置加上它并带着冒号,只要有了这个标记,当下面遇到了代码goto就会无条件的立刻返回你的标记处。这样对于推箱子,当我们按下r时,就可以返回最开始处重置你的关卡,起到了重新开始的作用。

干货

好了,废话不多说,小编送上推箱子前四关的代码:
第二关

{b:char a[20][20]={"            ","            ","  #####     ","  #H  #     ","  # OO# ### ","  # O # #*# ","  ### ###*# ","   ##    *# ","   #   #  # ","   #   #### ","   #####    ",};system("color 0a");system("cls");for(int i=0;i<=11;i++){puts(a[i]);}int x,y;x=3,y=3;while(1){char z;z=getch();if(z=='r')goto b;if(z=='w'){if(a[x-1][y]!='#'){if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='@';}else if(a[x-1][y]!='O'&&a[x-1][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';}}}if(z=='a'){if(a[x][y-1]!='#'){if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='@';}else if(a[x][y-1]!='O'&&a[x][y-1]!='@'){a[x][y]=' ';y--;a[x][y]='H';}}}if(z=='d'){if(a[x][y+1]!='#'){if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='@';}else if(a[x][y+1]!='O'&&a[x][y+1]!='@'){a[x][y]=' ';y++;a[x][y]='H';}}}if(z=='s'){if(a[x+1][y]!='#'){if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='@';}else if(a[x+1][y]!='O'&&a[x+1][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';}}}check2(a);system("cls");for(int i=0;i<=11;i++){puts(a[i]);}if(a[5][9]=='@'&&a[6][9]=='@'&&a[7][9]=='@'){Sleep(1500);break;}}system("cls");cout<<"\n\n          你只是侥幸获胜!过了下一关再说!";Sleep(3000);
}

第三关

{c:char a[20][20]={"             ","             ","   #######   ","   #     ### ","  ##O###   # ","  # H O  O # ","  # **# O ## ","  ##**#   #  ","   ########  ","             ","             ",};system("color 03");system("cls");for(int i=0;i<=11;i++){puts(a[i]);}int x,y;x=5,y=4;while(1){char z;z=getch();if(z=='r')goto c;if(z=='w'){if(a[x-1][y]!='#'){if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='@';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-1][y]!='O'&&a[x-1][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';}}}if(z=='a'){if(a[x][y-1]!='#'){if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='@';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-1]!='O'&&a[x][y-1]!='@'){a[x][y]=' ';y--;a[x][y]='H';}}}if(z=='d'){if(a[x][y+1]!='#'){if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='@';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+1]!='O'&&a[x][y+1]!='@'){a[x][y]=' ';y++;a[x][y]='H';}}}if(z=='s'){if(a[x+1][y]!='#'){if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='@';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+1][y]!='O'&&a[x+1][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';}}}check3(a);system("cls");for(int i=0;i<=11;i++){puts(a[i]);}if(a[6][4]=='@'&&a[6][5]=='@'&&a[7][4]=='@'&&a[7][5]=='@'){Sleep(1500);break;}}system("cls");cout<<"\n\n          这你都能过??天哪!!";Sleep(3000);
}

第四关

{d:char a[20][20]={"             ","             ","   ####      ","  ##  #      ","  #HO #      ","  ##O ##     ","  ## O #     ","  #*O  #     ","  #**@*#     ","  ######     ","             ",};system("color 04");system("cls");for(int i=0;i<=11;i++){puts(a[i]);}int x,y;x=4,y=3;while(1){char z;z=getch();if(z=='r')goto d;if(z=='w'){if(a[x-1][y]!='#'){if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='@';}else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' '){a[x][y]=' ';x--;a[x][y]='H';a[x-1][y]='O';}else if(a[x-1][y]!='O'&&a[x-1][y]!='@'){a[x][y]=' ';x--;a[x][y]='H';}}}if(z=='a'){if(a[x][y-1]!='#'){if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@'){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='@';}else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' '){a[x][y]=' ';y--;a[x][y]='H';a[x][y-1]='O';}else if(a[x][y-1]!='O'&&a[x][y-1]!='@'){a[x][y]=' ';y--;a[x][y]='H';}}}if(z=='d'){if(a[x][y+1]!='#'){if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@'){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='@';}else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' '){a[x][y]=' ';y++;a[x][y]='H';a[x][y+1]='O';}else if(a[x][y+1]!='O'&&a[x][y+1]!='@'){a[x][y]=' ';y++;a[x][y]='H';}}}if(z=='s'){if(a[x+1][y]!='#'){if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='@';}else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' '){a[x][y]=' ';x++;a[x][y]='H';a[x+1][y]='O';}else if(a[x+1][y]!='O'&&a[x+1][y]!='@'){a[x][y]=' ';x++;a[x][y]='H';}}}check4(a);system("cls");for(int i=0;i<=11;i++){puts(a[i]);}if(a[7][3]=='@'&&a[8][3]=='@'&&a[8][4]=='@'&&a[8][5]=='@'&&a[8][6]=='@'){Sleep(1500);break;}}system("cls");cout<<"\n\n         行!可以!!很棒!!!";Sleep(3000);
}

以上就是今天的推箱子代码教学过程,想要制作更多的关卡只需要更改你的推箱子地图,小人H起始位置,过关胜利条件,再配上我们的移动系统就可以啦,赶快去试试吧!!!

2021.1.31

如何使用C++做个简单推箱子游戏相关推荐

  1. 推箱子java下载_Java实现简单推箱子游戏

    本文实例为大家分享了Java实现简单推箱子游戏的具体代码,供大家参考,具体内容如下 *编写一个简易的推箱子游戏,使用10*8的二维字符数据表示游戏画面,H表示墙壁; &表示玩家角色: o表示箱 ...

  2. python推箱子游戏代码_用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程...

    不得不说,Python小游戏是最适合入门编程的项目,因为太简单! 无论懂或完全不懂python,这样的小游戏,你都可以直接开发出来,原因很简单: 在详细教程里,会有从零基础开始,一步一步的教你完成这个 ...

  3. Java 编写推箱子报告,推箱子游戏用java怎么去写

    推箱子游戏用java怎么去写 发布时间:2020-06-22 16:31:07 来源:亿速云 阅读:100 作者:清晨 这篇文章将为大家详细讲解有关推箱子游戏用java怎么写,小编觉得挺实用的,因此分 ...

  4. 【猿码】java swing实现喜羊羊与灰太狼推箱子游戏附带视频开发教程可做为Java毕设大作业

    大家好,今天给大家演示一下由Java swing实现的推箱子小游戏的一款项目,其图标用的是喜羊羊与灰太狼,所以又称喜羊羊与灰太狼版的推箱子游戏,该项目运行环境为普通的Java环境,jdk版本不限,下面 ...

  5. c#推箱子小游戏代码_C#做的一个推箱子的小游戏

    C#做的一个推箱子的小游戏 c# 2021-1-6 下载地址 https://www.codedown123.com/59125.html 本推箱子游戏使用数组实现,用不同的数字标识不同的物体,从而简 ...

  6. C语言 推箱子游戏 简单 详细 (控制台)

    使用C语言实现超简单的推箱子游戏! 感谢您打开了这篇文章,下面我将讲述一下推箱子是如何实现的. 如果您喜欢我的文章可以点赞支持一下. 如果您对我的程序有什么意见和建议欢迎在评论区发表评论. 另外附赠适 ...

  7. 小白的编程经验(二维数组推箱子游戏)

    推箱子游戏和迷宫游戏有异曲同工之妙,不过在游戏玩法实现上略有不同,需要考虑的情况更多更复杂. 项目代码放在了码云(gitee)上,有兴趣的可以下载看看. https://gitee.com/YHF_2 ...

  8. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  9. python推箱子代码详细讲解_Python使用tkinter模块实现推箱子游戏

    前段时间用C语言做了个字符版的推箱子,着实是比较简陋.正好最近用到了Python,然后想着用Python做一个图形界面的推箱子.这回可没有C那么简单,首先Python的图形界面我是没怎么用过,在网上找 ...

  10. 啊哈c的推箱子游戏(C语言)

    啊哈c的推箱子游戏(更新附带失败判断!) 以下是原文,2020.6.28更新了推箱子失败判断,以及优化方向代码,还新加了博主的无情嘲讽 . 因为啊哈c后面推箱子游戏未附代码,而且说实话考虑很多种状况和 ...

最新文章

  1. 详解深度学习中的Normalization,不只是BN(1)
  2. 域服务器重装系统,win10系统配置域控制器的详细步骤
  3. php文件下载IE文件名乱码问题
  4. 基于谷歌街景多位数字识别技术:TensorFlow的车牌号识别系统
  5. ubuntu 设置保护色
  6. ARP解决方法/工具+真假ARP防范区别方法+ARP终极解决方案
  7. RHEL 6 LAMP(一)
  8. 建筑企业数字化转型关键问题及解决方案
  9. macOS 10.14配置APUE环境
  10. 连接网络要求输入计算机密码是什么,上网时总是提示需要输入网络密码什么原因...
  11. 生成特定于查询的类API摘要 (Generating Query-Specific Class API Summaries)
  12. Yolov5训练模型没有框
  13. 微型计算机BX和AX区别,微机原理及接口技术-习题答案
  14. 天空之城 10孔口琴
  15. 一张图了解常见色彩空间及其关系
  16. Lagrange插值法
  17. 分享一副现实版抽象画
  18. (Python)从零开始,简单快速学机器仿人视觉Opencv---第十九节:关于轮廓的函数
  19. 深天马A:持股5%以上股东计划减持不超过4096万股公司股份
  20. 2023东南大学计算机考研信息汇总

热门文章

  1. zblock 结构_结构方块 - Minecraft Wiki,最详细的官方我的世界百科
  2. 土是独体字结构吗_独体结构的字大全
  3. 从0到1——CTFer成长之路(一)
  4. 微商公社新兵连第一天
  5. 正弦定理c语言函数,正弦定理和余弦定理的所有公式
  6. sqlplus方向键问题_wuli大世界_新浪博客
  7. PS制作搞笑印章 - 仿真印章 - 水印滤色
  8. 还在到处找Linux内核的学习资料吗?你想要的都在这里
  9. Android 启程
  10. Web--用户注册界面