C++语言《推箱子》源码

#include
#include

void main()
{
const char w = 10;
const char h = 10;
const char za = 0;
const char kd = 1;
const char yx = 2;
const char xz = 3;
const char mb = 4;
const char yxmb = 5;
const char xzmb = 6;

//备份地图
const char backup_map[w * h] =
{
0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,4,4,0,
0,1,1,2,1,1,0,3,3,0,
0,1,1,1,3,1,1,1,1,0,
0,1,1,1,1,4,1,3,4,0,
0,1,1,1,1,1,1,0,0,0,
0,0,0,0,1,3,1,0,1,0,
0,4,3,1,1,4,1,1,1,0,
0,4,3,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,
};

//游戏地图
char map[w * h];

//初始化
for (int i = 0; i < w * h; ++i)
map[i] = backup_map[i];

//游戏循环
while (true)
{
system("cls");
for (int i = 0; i < w * h; ++i)
{
switch (map[i])
{
case za: std::cout<<"■"; break;
case kd: std::cout<<" "; break;
case yx: std::cout<<"人"; break;
case xz: std::cout<<"木"; break;
case mb: std::cout<<"□"; break;
case yxmb: std::cout<<"囚"; break;
case xzmb: std::cout<<"困"; break;
}
if (i % w == w - 1)
std::cout<}

//是否通关判断
bool gameover = true;
for (int i = 0; i < w * h; ++i)
{
if (map[i] == xz)
{
gameover = false;
break;
}
}
if (gameover)
break;

//得到输入
int input = _getch();

//重置游戏地图
if (input == 'r' || input == 'R')
{
for (int i = 0; i < w * h; ++i)
map[i] = backup_map[i];
}

//移动英雄

//1:得到英雄位置
int x, y;
for (int i = 0; i < w * h; ++i)
{
if (map[i] == yx || map[i] == yxmb)
{
x = i % w;
y = i / w;
break;
}
}

//2:得到位置1、位置2
int x1 = -3, y1 = -3, x2 = -3, y2 = -3;
if (input == 'w' || input == 'W')
{
x1 = x2 = x;
y1 = y - 1;
y2 = y - 2;
}
if (input == 's' || input == 'S')
{
x1 = x2 = x;
y1 = y + 1;
y2 = y + 2;
}
if (input == 'a' || input == 'A')
{
x1 = x - 1;
x2 = x - 2;
y1 = y2 = y;
}
if (input == 'd' || input == 'D')
{
x1 = x + 1;
x2 = x + 2;
y1 = y2 = y;
}

//按下了方向键
if (x1 != -3)
{
//保证位置1在地图范围内
if (x1 >= 0 && x1 < w && y1 >= 0 && y1 < h)
{
switch (map[x1 + y1 * w])
{
case za:
{
//位置1为障碍则什么都不做
break;
}
case kd:
{
map[x1 + y1 * w] = yx;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
case mb:
{
map[x1 + y1 * w] = yxmb;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
case xz:
{
if (x2 >= 0 && x2 < w && y2 >= 0 && y2 < h)
{
switch (map[x2 + y2 * w])
{
case za:
{
break;
}
case xz:
{

break;
}
case xzmb:
{
break;
}
case kd:
{
map[x2 + y2 * w] = xz;
map[x1 + y1 * w] = yx;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
case mb:
{
map[x2 + y2 * w] = xzmb;
map[x1 + y1 * w] = yx;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
}
}

break;
}
case xzmb:
{
if (x2 >= 0 && x2 < w && y2 >= 0 && y2 < h)
{
switch (map[x2 + y2 * w])
{
case za:
{
break;
}
case xz:
{
break;
}
case xzmb:
{
break;
}
case kd:
{
map[x2 + y2 * w] = xz;
map[x1 + y1 * w] = yxmb;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
case mb:
{
map[x2 + y2 * w] = xzmb;
map[x1 + y1 * w] = yxmb;
if (yx == map[x + y * w])
map[x + y * w] = kd;
else
map[x + y * w] = mb;
break;
}
}
}

break;
}
}
}
}
}

std::cout<<"恭喜通关,";
system("pause");
}

相关主题
相关文档
最新文档