- #include<stdio.h>
- #include<string.h>
- /**
- * 打印地图
- *
- * @param row 2维数组的行数
- * @param col 2为数组的列数
- * @param map 2维数组名
- */
- void printMap(int row,int col,char map[][col]);
- /**
- * 交换两个字符
- *
- * @param a 字符1
- * @param b 字符2
- */
- void change(char *a,char *b);
- int main()
- {
- char map[10][11]={
- "##########",
- "#O #### #",
- "# X#### #",
- "# #",
- "###### #",
- "# #### #",
- "# #",
- "# ######",
- "# ",
- "##########"};
-
- char direction;
- int personX = 1;
- int personY = 1;//小人的位置
- int boxX = 2;
- int boxY = 2;//箱子的位置
- int personNextX = personX;
- int personNextY = personY;//小人下一步的位置
- int boxNextX = boxX;
- int boxNextY = boxY;//箱子下一步的位置
-
- printMap(10,11,map);//打印地图
-
- while (1)
- {
- printf("请控制小人移动:A.左 D.右 W.上 S.下 Q.退出\t");
- scanf("%c",&direction);
-
- personNextX = personX;
- personNextY = personY;//不要这两句,小人可以穿墙,不信你试试,嘿嘿
-
- switch (direction) {
- case 'a':
- personNextY--;
- break;
-
- case 'd':
- personNextY++;
- break;
-
- case 'w':
- personNextX--;
- break;
-
- case 's':
- personNextX++;
- break;
-
- case 'q':
- printf("程序已退出\n");
- return 0;
- }
-
- if (map[personNextX][personNextY] == ' ')//如果小人的下一个位置是路
- {
- change(&map[personNextX][personNextY],&map[personX][personY]);
- //交换小人当前位置和下一个位置的两个字符
- personX = personNextX;
- personY = personNextY;
- //刷新小人的位置
- }
- else if(map[personNextX][personNextY] == 'X')//如果小人的下一个位置是箱子
- {
- boxNextX = boxX+(boxX-personX);
- boxNextY = boxY+(boxY-personY);//计算箱子的下一步位置
- if (map[boxNextX][boxNextY] == ' ')//如果箱子的下一个位置是路
- {
- change(&map[boxNextX][boxNextY],&map[boxX][boxY]);
- //交换箱子当前位置下下一步位置的字符
- change(&map[personX][personY],&map[boxX][boxY]);
- //交换小人当前位置和箱子当前位置的字符
- personX = personNextX;
- personY = personNextY;//刷新小人的位置
- boxX = boxNextX;
- boxY = boxNextY;//刷新箱子的位置
- }
- }
-
- if (boxY ==9)//判断箱子到了出口
- {
- printf("哎哟不错哦,你把箱子推出来了哟~\n");
- return 0;
- }
-
- printMap(10,11,map);//打印地图
-
- }
-
- return 0;
- }
- void printMap(int row,int col,char map[][col])
- {
- for (int i=0; i<row; i++)
- {
- printf("%s",map[i]);
- printf("\n");
- }
- }
- void change(char *a,char *b)
- {
- char temp = *a;
- *a = *b;
- *b = temp;
- }
复制代码 |
|