#include <stdio.h> #define kRow 10 #define kLoc 11 //打印地图函数 void printMap(char arr[kRow][kLoc]){
for (int i=0; i<kRow; i++) { printf("%s\n",arr); }
} // 移动小人 箱子的函数 void mov(char arr[kRow][kLoc],int oldX,int oldY,int newX,int newY){
char temp; temp=arr[oldX][oldY]; arr[oldX][oldY]=arr[newX][newY]; arr[newX][newY]=temp;
}
int main(int argc, const char * argv[]) { char map[kRow][kLoc]={ "##########", "#O #### #", "# X #", "# #", "###### #", "# ### #", "# #", "# #######", "# ", "##########" }; char box='X'; printMap(map); //定义箱子 人的位子 int BoxX,BoxY,BoxNextX,BoxNextY; int PersonX,PersonY,PersonNextX,PersonNextY; //初始化箱子位子 BoxX=2; BoxY=2; //初始化人的位子,初始化人的下一个位子 PersonX=PersonY=PersonNextX=PersonNextY=1; //定义存放方向的字符 char derection; char street=' '; printf("请输入:w.上 s.下 a.左 d.右 q.退出\n"); while (1) { scanf("%c",&derection); getchar(); //防止穿墙 PersonNextX=PersonX; PersonNextY=PersonY; switch (derection) { 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("游戏结束!"); return 0;
default: break; } if (map[PersonNextX][PersonNextY]==street) {
mov(map, PersonX, PersonY, PersonNextX, PersonNextY); PersonX=PersonNextX; PersonY=PersonNextY;
}else if (map[PersonNextX][PersonNextY]==box){ //定义箱子下一个位子的算法 BoxNextX=BoxX+(BoxX-PersonX); BoxNextY=BoxY+(BoxY-PersonY);
if (map[BoxNextX][BoxNextY]==street) { mov(map, BoxX, BoxY, BoxNextX, BoxNextY); mov(map, PersonX, PersonY, BoxX, BoxY); //重新调整箱子 小人的位子 PersonX=PersonNextX; PersonY=PersonNextY;
BoxX=BoxNextX; BoxX=BoxNextY; }
} printMap(map); } return 0; }
|