2021-06-04

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;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值