C 迷宫游戏代码实现

######
#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;
}


  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值