今天花了一点时间做了一个简单易懂的推箱子代码
这是代码加注释:
#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
//定义地图
char a[20][20]={"##########",
"## ###",
"##O### #",
"# S O O #",
"# **# O ##",
"##**# ##",
"##########"};
//变量
int x,y;
int z;
int boxgeshu=0;
int cnt=0;
//欢迎语
int welcome()
{
cout<<"\t\t\t欢迎来到推箱子游戏!!";
cout<<"\n\t\t\t wsad来控制人物的上下左右\n\t\t\t让我们开始吧\n\n";
Sleep(2000);
}
//寻找箱子的个数和人物的坐标
int find()
{
for(int i=0;i<=9;i++)
{
for(int j=0;j<=6;j++)
{
if(a[i][j]=='*')
{
boxgeshu++;
}
if(a[i][j]=='S')
{
x=i;y=j;
}
}
}
}
//人物向上移动判断
int shang()
{
if(a[x-1][y]!='#'&&a[x-1][y]!='O'&&a[x-1][y]!='*')
{
a[x][y]=' ';
x--;
a[x][y]='S';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='*'&&a[x-2][y]!='O')
{
a[x-2][y]='O';
a[x][y]=' ';
x--;
a[x][y]='S';
}
else if(a[x-2][y]=='*'&&a[x-1][y]=='O')
{
a[x-2][y]=' ';
a[x][y]=' ';
x--;
a[x][y]='S';
cnt++;
}
}
//人物向下移动判断
int xia()
{
if(a[x+1][y]!='#'&&a[x+1][y]!='O'&&a[x+1][y]!='*')
{
a[x][y]=' ';
x++;
a[x][y]='S';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='*'&&a[x+2][y]!='O')
{
a[x+2][y]='O';
a[x][y]=' ';
x++;
a[x][y]='S';
}
else if(a[x+2][y]=='*'&&a[x+1][y]=='O')
{
a[x+2][y]=' ';
a[x][y]=' ';
x++;
a[x][y]='S';
cnt++;
}
}
//人物向左移动判断
int zuo()
{
if(a[x][y-1]!='#'&&a[x][y-1]!='O'&&a[x][y-1]!='*')
{
a[x][y]=' ';
y--;
a[x][y]='S';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='*'&&a[x][y-2]!='O')
{
a[x][y-2]='O';
a[x][y]=' ';
y--;
a[x][y]='S';
}
else if(a[x][y-2]=='*'&&a[x][y-1]=='O')
{
a[x][y-1]=' ';
a[x][y]=' ';
y--;
a[x][y]='S';
cnt++;
}
}
//人物向右移动判断
int you()
{
if(a[x][y+1]!='#'&&a[x][y+1]!='O'&&a[x][y+1]!='*')
{
a[x][y]=' ';
y++;
a[x][y]='S';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='*'&&a[x][y+2]!='O')
{
a[x][y+2]='O';
a[x][y]=' ';
y++;
a[x][y]='S';
}
else if(a[x][y+2]=='*'&&a[x][y+1]=='O')
{
a[x][y+2]=' ';
a[x][y]=' ';
y++;
a[x][y]='S';
cnt++;
}
}
//主函数
int main()
{
welcome();
find();
// 清除欢迎语
system("cls");
// 输出地图
for(int i=0;i<=9;i++) puts(a[i]);
while(1)
{
// 输入
z=getch();
if(z=='w')
{
shang();
}
if(z=='s')
{
xia();
}
if(z=='a')
{
zuo();
}
if(z=='d')
{
you();
}
system("cls");
for(int i=0;i<=9;i++) puts(a[i]);
// 判断是否把全部的箱子推进重点了
if(cnt==boxgeshu)
{
Sleep(1000);
system("cls");
cout<<"YOU WIN!!!!!!!!!";
return 0;
}
}
return 0;
}
虽然这不是最简写法,但是这种写法我个人认为还是挺容易理解的