######
#0##
# ## #
# # #
## #
######
#0##
# ## #
# # #
## #
######
请控制小人移动;w.上 s.下 a.左 d.右 q.退出
#include <stdio.h>
#define COL 6
#define ROW 6
int main(int argc, const char * argv[]){
//定义变量
void printMap(char map[ROW][COL]);
void personMove(char map[ROW][COL], int oldX, int oldY, int newX, int newY);
// 1、定义变量,地图、存储用户输入的方向、小人的位置
char map[ROW][COL] = {
{'#','#','#','#','#','#'},
{'#','0','#','#',' ',' '},
{'#',' ','#','#',' ','#'},
{'#',' ',' ','#',' ','#'},
{'#','#',' ',' ',' ','#'},
{'#','#','#','#','#','#'}
};
//保存用户输入的方向
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();
//char ch;
//scanf("%c",&ch); //吸收多余的 \n
// 5、判断用户输入了什么方向
switch (direction){
case'W':
case'w':
// 6、判断仙人是否能够移动
if (map[currentX-1][currentY] == street) {
// 核心要知道小人的下一个位置是否是路
// 是路
// 让小人开始移动,移动的核心;小人和路交换
//[currentX][currentY];小人的当前位置
//[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的是否==COL -1
if (currentY == COL-1) {
printf("恭喜,通关!\n");
break;
}
// 提示走出迷宫了
// break;游戏结束
}
return 0;
}
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");
}
}
/*实现了小人的移动
map 地图的数组
old 原来的位置
new 将要移动的位置
*/
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;
}