用c++语言写一个简单的推箱子游戏
#include <iostream>
#include <vector>
using namespace std;
const int N = 10, M = 10; //地图的大小
int w[N][M]; //表示地图的数组
int px, py; //玩家当前的位置
void print_map() //打印地图
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (i == px && j == py) //如果当前位置是玩家的位置
cout << "P ";
else if (w[i][j] == 1) //如果是箱子的位置
cout << "X ";
else if (w[i][j] == 2) //如果是目的地的位置
cout << "O ";
else if (w[i][j] == 3) //如果是箱子和目的地重合的位置
cout << "G ";
else
cout << ". "; //如果是空地
}
cout << endl;
}
}
int main()
{
vector<pair<int, int>> box_pos; //存储箱子的位置
//初始化地图
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++) {
if (i == 0 || i == N - 1 || j == 0 || j == M - 1) //边界设为墙
w[i][j] = -1;
else
w[i][j] = 0;
}
//设置目的地和箱子的位置
w[3][3] = 2;
w[2][3] = 1;
w[2][4] = 1;
box_pos.push_back(make_pair(2, 3));
box_pos.push_back(make_pair(2, 4));
//设置玩家的初始位置
px = 3;
py = 2;
//开始游戏
while (true) {
print_map(); //打印地图
//判断是否已经胜利
bool is_win = true;
for (int i = 0; i < box_pos.size(); i++) {
if (w[box_pos[i].first][box_pos[i].second] != 2) {
is_win = false;
break;
}
}
if (is_win) {
cout << "You win!" << endl;
break;
}
//获取玩家输入
char c;
cin >> c;
//根据玩家输入移动玩家或者箱子
int dx = 0, dy = 0;
switch (c) {
case 'w':
dx = -1;
break;
case 'a':
dy = -1;
break;
case 's':
dx = 1;
break;
case 'd':
dy = 1;
break;
}
int newx, newy;
newx = px + dx;
newy = py + dy;
if (w[newx][newy] == -1) //撞墙了
continue;
else if (w[newx][newy] == 1) { //箱子的位置
int new_box_x = newx + dx;
int new_box_y = newy + dy;
if (w[new_box_x][new_box_y] == -1 || w[new_box_x][new_box_y] == 1)
continue; //箱子推不动或者撞墙了
else
w[new_box_x][new_box_y] = 1;
w[newx][newy] = 0;
for (int i = 0; i < box_pos.size(); i++) { //更新箱子位置
if (box_pos[i].first == newx && box_pos[i].second == newy) {
box_pos[i].first = new_box_x;
box_pos[i].second = new_box_y;
break;
}
}
} else { //移动玩家
以上代码仅供参考!