#include <stdio.h>
#include <string.h>
#define kRows 10
#define kCols 11
/*
打印地图
*/
void printMap(char map[kRows][kCols]){
for (int i=0; i<kRows; i++){
printf("%s\n",map[i]);
}
}
/*
移动的函数
*/
void move1 (char map[kRows][kCols], int oldX, int oldY, int newX, int newY){
char temp;
temp = map[oldX][oldY];
map[oldX][oldY] = map [newX][newY];
map[newX][newY] = temp;
}
int main(int argc, const char * argv[]) {
//******定义变量*******
//1.定义地图
char map[kRows][kCols] = {
"##########",
"#0 #### #",
"# X#### #",
"# #",
"###### #",
"# ### #",
"# #",
"# ######",
"# ",
"##########"};
//定义变量保存位置信息
//小人的当前位置信息
int personX = 1;
int personY = 1;
//将要移动的下一个位置信息
int personNextX = personX;
int personNextY = personY;
//定义箱子的当前位置
int boxX = 2;
int boxY = 2;
//定义变量接收用户输入的方向
char direction;
//定义路、箱子的字符
char street = ' ';
char box = 'X';
//2.*******打印地图********
printMap(map);
printf("请控制小人移动;w.上 s.下 a.左 d.右 q.退出\n");
//****编写循环控制程序***
while (1) {
//3.接收用户输入的方向
scanf("%c",&direction);
getchar();//获取一个字符从键盘上
//防止穿墙
personNextX = personX;
personNextY = personY;
//4.判断方向
switch (direction) {
case'w':
case'W':
personNextX--;
break;
case's':
case'S':
personNextX++;
break;
case'a':
case'A':
personNextY--;
break;
case'd':
case'D':
personNextY++;
break;
case'q':
case'Q':
printf("程序正在退出...\n");
printf("程序已经退出!");
return 0;
default:
break;
}
//5.根据用户输入的方向判断如何移动
if (map[personNextX][personNextY] == street) {
//如果是路,让小人先移动
//让小人和路进行交换
move1(map, personX, personY, personNextX, personNextY);
//重新调整小人的位置
personX = personNextX;
personY = personNextY;
} else if (map[personNextX][personNextY] == box) {
//如果不是路 判断是否是箱子 是,计算箱子的下个位置
int boxNextX = boxX +(boxX - personX);
int boxNextY = boxY +(boxY - personY);
// 再次判断箱子的下个位置是否是路
if (map[boxNextX][boxNextY] == street) {
//如果箱子下个是路,移动小人和箱子
//1)移动箱子到下个位置
move1(map, boxX, boxY, boxNextX, boxNextY);
//2)让小人移动到箱子原来的位置
move1(map, personX, personY, boxX, boxY);
//重新调整小人和箱子的位置
personX = personNextX;
personY = personNextY;
boxX = boxNextX;
boxY = boxNextY;
}
//如果是箱子 什么也不干
}
//*******重绘地图*******
//6.重绘地图
printMap(map);
//******判断是否走出来****
//7.判断箱子是否被推出来了
// if (boxY = kCols-2) {
// printf("恭喜通关!\n");
// break;
// }
}
return 0;
}
C 推箱子游戏
最新推荐文章于 2023-03-21 00:27:32 发布