#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
//printf("☆★○●◎◇◆□■△▲※\n");
/*
◎: 把箱子推到目的地里 7 ---> 也可以把箱子从目的地中推出来
●: 目的地 3
□: 箱子 4
★: 人 5
■: 墙 1
两个空格: 表示空地 0 ---> 一个字符占用两个位置
*/
int map[8][8] =
{
1,1,1,1,1,1,1,1,
1,3,0,1,0,0,3,1,
1,4,1,0,0,1,4,1,
1,0,0,3,5,1,0,1,
1,1,1,4,0,0,0,1,
1,0,0,0,0,1,1,1,
1,3,4,0,0,4,3,1,
1,1,1,1,1,1,1,1
};
int oldMap[8][8] =
{
1,1,1,1,1,1,1,1,
1,3,0,1,0,0,3,1,
1,4,1,0,0,1,4,1,
1,0,0,3,5,1,0,1,
1,1,1,4,0,0,0,1,
1,0,0,0,0,1,1,1,
1,3,4,0,0,4,3,1,
1,1,1,1,1,1,1,1
};
int i = 0, j = 0;
while (1)
{
//画地图,根据数组中的值,画相应的图形
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
switch (map[i][j])
{
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 3:
printf("●");
break;
case 4:
printf("□");
break;
case 5:
case 8: //人可以站在球上,人在球上显示人 用8表示
printf("★");
break;
case 7:
printf("◎");
break;
}
}
printf("\n");
}
//游戏结束--->所有的箱子都没有了
int flag = 1;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[i][j] == 4)
{
flag = 0;
break;
}
}
if (map[i][j] == 4) //break只能退出一层循环 退出两层循环还需要加一个break
{
flag = 0;
break;
}
}
if (flag == 1) //flag没有改变->没有箱子退出主循环
{
break;
}
//找人在哪里: 数组里面是5和8
//二维数组的查找
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[i][j] == 5 || map[i][j] == 8)
break; //break只能退出一层循环 退出两层循环还需要加一个break
}
if (map[i][j] == 5 || map[i][j] == 8)
break;
}
//i和j表示人的坐标
//按键操作
int key = _getch();
//还原重新开始
if (key == '\r') //地图还原就是两个数组之间的赋值
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
map[i][j] = oldMap[i][j];
}
}
system("cls");
continue;
}
switch (key)
{
case 'w':
case 'W':
case 72:
if (map[i - 1][j] == 0 || map[i - 1][j] == 3)
{
map[i][j] -= 5;
map[i - 1][j] += 5;
}
if (map[i - 1][j] == 4 || map[i - 1][j] == 7)
{
if (map[i - 2][j] == 0 || map[i - 2][j] == 3)
{
map[i][j] -= 5;
map[i - 1][j] += 1;
map[i - 2][j] += 4;
}
}
break;
case 's':
case 'S':
case 80:
if (map[i + 1][j] == 0 || map[i + 1][j] == 3)
{
map[i][j] -= 5;
map[i + 1][j] += 5;
}
if (map[i + 1][j] == 4 || map[i + 1][j] == 7)
{
if (map[i + 2][j] == 0 || map[i + 2][j] == 3)
{
map[i][j] -= 5;
map[i + 1][j] += 1;
map[i + 2][j] += 4;
}
}
break;
case 'a':
case 'A':
case 75:
if (map[i][j - 1] == 0 || map[i ][j - 1] == 3)
{
map[i][j] -= 5;
map[i][j - 1] += 5;
}
if (map[i][j - 1] == 4 || map[i][j - 1] == 7)
{
if (map[i][j - 2] == 0 || map[i][j - 2] == 3)
{
map[i][j] -= 5;
map[i][j - 1] += 1;
map[i][j - 2] += 4;
}
}
break;
case 'd':
case 'D':
case 77:
if (map[i][j + 1] == 0 || map[i][j + 1] == 3)
{
map[i][j] -= 5;
map[i][j + 1] += 5;
}
if (map[i][j + 1] == 4 || map[i][j + 1] == 7)
{
if (map[i][j + 2] == 0 || map[i][j + 2] == 3)
{
map[i][j] -= 5;
map[i][j + 1] += 1;
map[i][j + 2] += 4;
}
}
break;
}
//清屏
system("cls");
}
printf("----GameOver----\n");
return 0;
}
/*输出*/
■ ■ ■ ■ ■ ■ ■ ■
■ ● ■ ● ■
■ □ ■ ■ □ ■
■ ● ★■ ■
■ ■ ■ □ ■
■ ■ ■ ■
■ ● □ □ ● ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ◎ ■ ◎■
■ ■ ■ ★■
■ ◎ ■ ■
■ ■ ■ ■
■ ■ ■ ■
■ ◎ ◎■
■ ■ ■ ■ ■ ■ ■ ■
----GameOver----
c语言 --- 控制台推箱子
于 2022-03-18 17:08:59 首次发布