C++推箱子代码
上代码
#include<iostream>
using namespace std;
//地图数据
int map[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,0,0,0,1},
{1,0,0,4,0,1,0,3,0,1},
{1,0,2,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,3,0,1},
{1,0,4,0,0,3,1,0,0,1},
{1,0,0,0,0,4,1,0,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
//刷新界面
void show();
//人物移动
void mov(string Direction);
//坐标类
struct sxy
{
int x;
int y;
}xy;
//获取坐标
sxy getxy();
//是否结束游戏
bool isgameover();
int main()
{
while (true)
{
//刷新界面
show();
//判断是否结束游戏
if (isgameover())
{
cout<<" ★ ★ ★"<<endl;
cout<< " 恭喜过关\n";
break;
}
//提示信息
cout << endl << "wasd控制移动 \t ♀:表示人 ●:表示箱子 ○:表示目标点 \n";
char ch;
ch = getchar();
switch (ch)
{
case 'w':
case 'W':
mov("w");
break;
case 's':
case 'S':
mov("s");
break;
case 'a':
case 'A':
mov("a");
break;
case 'd':
case 'D':
mov("d");
break;
default:
break;
}
}
system("pause");
return 0;
}
void show()
{
system("color 0A");
system("cls");
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 0)
{
cout << " ";
}
else if (map[i][j] == 1)
{
cout << "■";
}
else if (map[i][j] == 2)
{
cout << "♀";
}
else if (map[i][j] == 3)
{
cout << "●";
}
else if (map[i][j] == 4)
{
cout << "○";
}
else
{
cout << "★";
}
}
cout << endl;
}
}
void mov(string Direction)
{
sxy ixy = {}; //下个坐标
sxy jxy = {}; //下下个坐标
int kong = 0, qiang = 1, ren = 2, xiang = 3, mubiao = 4, hecheng = 5; //定义类型
xy = getxy(); //获取人物坐标
//判断移动方位
if (Direction == "w") //向上移动
{
ixy.x = xy.x - 1;
ixy.y = xy.y;
jxy.x = xy.x - 2;
jxy.y = xy.y;
}
else if (Direction == "s") //向下移动
{
ixy.x = xy.x + 1;
ixy.y = xy.y;
jxy.x = xy.x + 2;
jxy.y = xy.y;
}
else if (Direction == "a") //向左移动
{
ixy.y = xy.y - 1;
ixy.x = xy.x;
jxy.y = xy.y - 2;
jxy.x = xy.x;
}
else if (Direction == "d") //向右移动
{
ixy.y = xy.y + 1;
ixy.x = xy.x;
jxy.y = xy.y + 2;
jxy.x = xy.x;
}
//判断下个位置
if (map[ixy.x][ixy.y] == kong) //如果下个位置是空
{
map[ixy.x][ixy.y] = ren;
map[xy.x][xy.y] = kong;
}
else if (map[ixy.x][ixy.y] == xiang) //如果下个位置是箱子
{
if (map[jxy.x][jxy.y] == kong) //如果下下个位置是空
{
map[jxy.x][jxy.y] = xiang;
map[ixy.x][ixy.y] = ren;
map[xy.x][xy.y] = kong;
}
else if (map[jxy.x][jxy.y] == mubiao) //如果下下个位置是目标
{
map[jxy.x][jxy.y] = hecheng;
map[ixy.x][ixy.y] = ren;
map[xy.x][xy.y] = kong;
}
}
}
sxy getxy()
{
sxy jxy;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 2)
{
jxy.x = i, jxy.y = j;
return jxy;
}
}
}
jxy.x = -1, jxy.y = -1;
return jxy;
}
bool isgameover()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 4)
{
return false;
}
}
}
return true;
}