#include <stdio.h> #define COL 6 #define ROW 6 int main(int argc, const char * argv[]) { //****** 定义变量 ********** //1、定义变量,地图、存储用户输入的方向、小人的位置 char map[ROW][COL]={ {'#','#','#','#','#','#'}, {'#','O','#','#',' ',' '}, {'#',' ','#','#',' ','#'}, {'#',' ',' ','#',' ','#'}, {'#','#',' ',' ',' ','#'}, {'#','#','#','#','#','#'} }; //保存用户输入的方向 char direction; //定义变量保存小人的当前的位置 int currentX=1; int currentY=1; //定义变量保存路 char street = ' '; //2、先打印一遍地图 for (int i=0; i<ROW; i++) { for (int j=0; j<COL; j++) { printf("%c",map[i][j]); } printf("\n"); } //3、提示用户游戏玩法 printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n"); char ch; //****** 要进行循环控制 ********* while (1) { //4、接收用户输入的方向 scanf("%c",&direction); scanf("%c",&ch); //吸收多余的 \n //5、判断用户输入了什么方向 switch (direction) { case 'w': case 'W': //****** 判断小人能否移动 ******** //6、判断小人是否能够移动 if (map[currentX-1][currentY]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 char temp; // map[currentX][currentY]; 小人当前位置 // map[currentX-1][currentY];小人的下一个位置 temp = map[currentX][currentY]; map[currentX][currentY] = map[currentX-1][currentY]; map[currentX-1][currentY] = temp; //重新记录小人的当前位置 currentX--; } // 不是路 ,什么也不干 break; case 's': case 'S': if (map[currentX+1][currentY]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 char temp; temp = map[currentX][currentY]; map[currentX][currentY] = map[currentX+1][currentY]; map[currentX+1][currentY] = temp; //重新记录小人的当前位置 currentX++; } break; case 'a': case 'A': if (map[currentX][currentY-1]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 char temp; temp = map[currentX][currentY]; map[currentX][currentY] = map[currentX][currentY-1]; map[currentX][currentY-1] = temp; //重新记录小人的当前位置 currentY--; } break; case 'd': case 'D': if (map[currentX][currentY+1]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 char temp; temp = map[currentX][currentY]; map[currentX][currentY] = map[currentX][currentY+1]; map[currentX][currentY+1] = temp; //重新记录小人的当前位置 currentY++; } break; case 'q': case 'Q': return 0; break; default: break; } //7、重绘地图 for (int i=0; i<ROW; i++) { for (int j=0; j<COL; j++) { printf("%c",map[i][j]); } printf("\n"); } //****** 判断是否走出来 ******** //判断 y 的值是否 == 5 if (currentY==5) { printf("哇哦,你出来了!\n"); break; } // 提示走出迷宫了 // break;游戏要结束 } return 0; }
######
#O##
# ## #
# # #
## #
######
请控制小人移动: w.上 s.下 a.左 d.右 q.退出
w
######
#O##
# ## #
# # #
## #
######
【理解】《走出迷宫》游戏优化
#include <stdio.h> #define COL 12 #define ROW 6 /** * 打印地图 * * @param map 地图的数组 */ void printMap(char map[ROW][COL]){ for (int i=0; i<ROW; i++) { for (int j=0; j<COL; j++) { printf("%c",map[i][j]); } printf("\n"); } } /** * 实现了小人的移动 * * @param map 地图的数组 * @param oldX 小人的原来位置X坐标 * @param oldY 小人的原来位置Y坐标 * @param newX 小人的将要移动到位置X坐标 * @param newY 小人的将要移动到位置Y坐标 */ void personMove(char map[ROW][COL],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[ROW][COL]={ {'#','#','#','#','#','#','#','#','#','#','#','#'}, {'#','O','#','#',' ',' ',' ','#','#','#','#','#'}, {'#',' ','#','#',' ','#',' ','#',' ',' ',' ','#'}, {'#',' ',' ','#',' ','#',' ','#',' ','#',' ','#'}, {'#','#',' ',' ',' ','#',' ',' ',' ','#',' ',' '}, {'#','#','#','#','#','#','#','#','#','#','#','#'} }; //保存用户输入的方向 char direction; //定义变量保存小人的当前的位置 int currentX=1; int currentY=1; //定义变量保存路 char street = ' '; //2、先打印一遍地图 printMap(map); //3、提示用户游戏玩法 printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n"); //****** 要进行循环控制 ********* while (1) { //4、接收用户输入的方向 scanf("%c",&direction); getchar(); //吸收多余的 \n //5、判断用户输入了什么方向 switch (direction) { case 'w': case 'W': //****** 判断小人能否移动 ******** //6、判断小人是否能够移动 if (map[currentX-1][currentY]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 // map[currentX][currentY]; 小人当前位置 // map[currentX-1][currentY];小人的下一个位置 personMove(map,currentX,currentY,currentX-1,currentY); //重新记录小人的当前位置 currentX--; } // 不是路 ,什么也不干 break; case 's': case 'S': if (map[currentX+1][currentY]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 personMove(map,currentX,currentY,currentX+1,currentY); //重新记录小人的当前位置 currentX++; } break; case 'a': case 'A': if (map[currentX][currentY-1]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 personMove(map,currentX,currentY,currentX,currentY-1); //重新记录小人的当前位置 currentY--; } break; case 'd': case 'D': if (map[currentX][currentY+1]==street) { // 核心要知道小人的下一个位置是否是路 // 是路 // 让小人开始移动,移动的核心:小人和路交换 personMove(map,currentX,currentY,currentX,currentY+1); //重新记录小人的当前位置 currentY++; } break; case 'q': case 'Q': return 0; break; default: break; } //7、重绘地图 printMap(map); //****** 判断是否走出来 ******** //判断 y 的值是否 == 5 if (currentY==COL-1) { printf("哇哦,你出来了!\n"); break; } // 提示走出迷宫了 // break;游戏要结束 } return 0; }