------- iOS培训、android培训、java培训、期待与您交流! ----------
#include <stdio.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[]) {
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';
printMap(map);
printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n");
while (1) {
scanf("%c",&direction);
getchar();//吸收字符
//防穿墙
personNextX = personX;
personNextY = personY;
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("程序已经退出!\n");
break;
default:
break;
}
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) {
move1(map, boxX, boxY, boxNextX, boxNextY);
move1(map, personX, personY, boxX, boxY);
personX = personNextX;
personY = personNextY;
boxX = boxNextX;
boxY = boxNextY;
}
}
printMap(map);
if (boxY == kCols - 2) {
printf("哇哦,你推出来了!\n");
break;
}
}
return 0;
}