c++推箱子实验报告_php简单的项目实例

c++推箱子实验报告_php简单的项目实例今天向大家介绍一下如何使用C++来写一个推箱子游戏的代码首先要做出推箱子,我们先要明确它的思路是什么:如图,在一个推箱子游戏中,我们首先要有一个二维的地图,并在地图中加入障碍物,箱子,小人,


🐱‍🚀个人博客【C++开发实例】如何使用C++做个简单的推箱子
🐱‍👤收录专栏:C++开发实例
🐱‍👓专栏目标:分享一些所学知识和编程实例
🐱‍💻作者:敲代码的猫(Codemon)


今天向大家介绍一下如何使用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;
	return 0;
}

运行结果如图:
在这里插入图片描述

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

1.1移动系统

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

1.2迷宫

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

 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已经可以移动,并且在到达出口时赢得游戏了!
在这里插入图片描述

1.3推箱子的移动系统

有了做迷宫的方法,我们便只需要对移动系统进行稍微改进就可以做出推箱子游戏了。
要知道,推箱子和迷宫唯一不同的,也是唯一的难点就是“箱子”。我们不光要控制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';
                }
            }
        }

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

1.4其他细节

我们知道,推箱子的胜利条件是将所有箱子都移动到指定位置,所以相比于迷宫的到达出口,我们只是多了几个判断的坐标而已。而推箱子没有过关失败的触发,可当我们将箱子推到了死角处时,就无法继续游戏通过了,所以我们还要加设重新开始的程序,比如按“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时,就可以返回最开始处重置你的关卡,起到了重新开始的作用。

二、check函数

check函数用于检测当小人走到*处或@处或O处时,会将其覆盖,但是离开时如果不做处理,在移动后就会变成空白,因此需要对这些点位进行处理。当然我们也可以在优化后将此操作放入移动系统中,这是小编刚入门时写的代码,因此还是有一些待优化的地方

void check1(char a[][20])
{ 
   
        if(a[6][3]=='O')
            a[6][3]='@';
        if(a[3][6]=='O')
            a[3][6]='@';
        if(a[9][7]=='O')
            a[9][7]='@';
        if(a[6][11]=='O')
            a[6][11]='@';
        if(a[6][3]==' ')
            a[6][3]='*';
        if(a[3][6]==' ')
            a[3][6]='*';
        if(a[9][7]==' ')
            a[9][7]='*';
        if(a[6][11]==' ')
            a[6][11]='*';
}
void check2(char a[][20])
{ 
   
        if(a[5][9]=='O')
            a[5][9]='@';
        if(a[6][9]=='O')
            a[6][9]='@';
        if(a[7][9]=='O')
            a[7][9]='@';
        if(a[5][9]==' ')
            a[5][9]='*';
        if(a[6][9]==' ')
            a[6][9]='*';
        if(a[7][9]==' ')
            a[7][9]='*';
}
void check3(char a[][20])
{ 
   
        if(a[6][4]=='O')
            a[6][4]='@';
        if(a[6][5]=='O')
            a[6][5]='@';
        if(a[7][4]=='O')
            a[7][4]='@';
        if(a[7][5]=='O')
            a[7][5]='@';
        if(a[6][4]==' ')
            a[6][4]='*';
        if(a[6][5]==' ')
            a[6][5]='*';
        if(a[7][4]==' ')
            a[7][4]='*';
        if(a[7][5]==' ')
            a[7][5]='*';
}
void check4(char a[][20])
{ 
   
        if(a[7][3]=='O')
            a[7][3]='@';
        if(a[8][3]=='O')
            a[8][3]='@';
        if(a[8][4]=='O')
            a[8][4]='@';
        if(a[8][5]=='O')
            a[8][5]='@';
        if(a[8][6]=='O')
            a[8][6]='@';
        if(a[7][3]==' ')
            a[7][3]='*';
        if(a[8][3]==' ')
            a[8][3]='*';
        if(a[8][4]==' ')
            a[8][4]='*';
        if(a[8][5]==' ')
            a[8][5]='*';
        if(a[8][6]==' ')
            a[8][6]='*';
}

三、干货

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

{ 
   
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++推箱子实验报告_php简单的项目实例分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/87352.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注