栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

用最基础的c语言写迷宫—c语言中的小白文

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用最基础的c语言写迷宫—c语言中的小白文

用最基础的c语言写迷宫—c语言中的小白文
#include 
#include 



int main(void){
	int k=0; // 是否找到了钥匙
	int i=0,j=0; // i,j代表数组的横坐标和纵坐标,用来打印数组(也就是迷宫)
	char zou; // 需要你输入的,下一步要怎么走
	int x=1,y=1; //代表你所在的位置,这个在你输入zou后是会发生变化的
	printf("请开始你的游戏n");
	system("pause");
	// 用数组来表示迷宫
	int arr[11][13] = {
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,0,0,0,0,1,0,0,0,0,3,1,1},
		{1,1,0,1,0,0,0,0,0,0,0,1,1},
		{1,1,0,1,0,1,1,0,1,1,1,1,1},
		{1,1,0,0,0,0,1,0,0,0,0,1,1},
		{1,1,0,1,1,9,1,0,1,1,0,1,1},
		{1,1,0,0,0,0,1,9,1,1,0,1,1},
		{1,1,0,1,0,1,1,0,0,0,0,1,1},
		{1,1,0,1,0,1,1,0,1,1,1,1,1},
		{1,1,0,1,0,0,1,0,0,0,0,8,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
	};
	while(1){
		system("cls"); // 清屏,把以前打印出来的图形给清除掉,之留下行走以后形成的图案
		// 打印迷宫
		// 双重循环,把数组打印出来,每打印一行记得换行
		for(i=0;i<11;i++){
			for(j=0;j<13;j++){
				// x,y是你在的位置,当打印在你所在的位置的时候用□来表示
				if(i==x&&j==y){
					printf("□");
					continue;
				}
				// 0代表可以走的路,一个空格的大小和用到的图案大小不一致,而两个空格正好
				if(arr[i][j] == 0){
					printf("  ");
				}
				// 1表示墙了,遇到1时用字符■代替墙
				if(arr[i][j]==1){
				printf("■");
 				}
				// arr[i][j]==3的时候就是钥匙的所在地方,用○表示
				if(arr[i][j]==3){
					printf("○");
				}
				// 走过的路用4表示,而当遇到arr[i][j]==4的时候证明这个位置走过,就用※表示
				if(arr[i][j]==4){
					printf("※");
				}
				// 9表示陷阱,用x表示
				if(arr[i][j]==9){
					printf("×");
				}
				// 同理,这个就是门了
				if(arr[i][j]==8){
					printf("|-");
				}
			}
			printf("n");// 记得换行
		}

		 // 判断是否死亡
		if((x==9)&&(y==11)&&(k==1)){
			printf("恭喜你,成功救出百姓!n");
			break;  //走到了门的位置,并且有钥匙
		}
		if((x==9)&&(y==11)&&(k==0)){
			printf("未找到钥匙姓,游戏失败!");
			break; // 走到了门的位置,但没有找到钥匙
		}
		if((arr[x-1][y]==1||arr[x-1][y]==4)&&(arr[x+1][y]==1||arr[x+1][y]==4)&&(arr[x][y-1]==1||arr[x][y-1]==4)&&(arr[x][y+1]==1||arr[x][y+1]==4)){
			printf("你已经无路可走,死亡!n");
			break;  //x,y的上下左右都是1或4,也就是都是墙或走过的路
		}
		if(arr[x][y]==9){
			printf("遇到了陷阱,游戏失败!");
			break; // 走到了陷阱的位置
		}


		// 输入怎么走
		// 上下走可以把横坐标变化,左右走可以把纵坐标变化
		scanf("%c",&zou);
		// w表示向上走
		if(zou == 'w'){
			// 判断上面是都是墙
			if(arr[x-1][y]==1){
				printf("这里不能走  --回车键继续n");
				system("pause");// 暂停一下,防止程序执行太快,直接continue结束while循环清屏看不到提示
				continue;
			}
			// 判断上面位置是否走过
			if(arr[x-1][y]==4){
				printf("这里已经走过,请走别的路  --回车键继续n");
				system("pause");
				continue;
			}
			arr[x][y] = 4;
			x--;
		}
		// s表示想下走
		if(zou == 's'){
			if(arr[x+1][y]==1){
				printf("这里不能走  --回车键继续n");
				system("pause");
				continue;
			}
			if(arr[x+1][y]==4){
				printf("这里已经走过,请走别的路  --回车键继续n");
				system("pause");
				continue;
			}
			arr[x][y] = 4;
			x++;
		}
		// a表示向左走
		if(zou == 'a'){
			if(arr[x][y-1]==1){
				printf("这里不能走  --回车键继续n");
				system("pause");
				continue;
			}
			if(arr[x][y-1]==4){
				printf("这里已经走过,请走别的路  --回车键继续n");
				system("pause");
				continue;
			}
			arr[x][y] = 4;
			y--;
		}
		// d表示右走
		if(zou == 'd'){
			if(arr[x][y+1]==1){
				printf("这里不能走  --回车键继续n");
				system("pause");
				continue;
			}
			if(arr[x][y+1]==4){
				printf("这里已经走过,请走别的路  --回车键继续n");
				system("pause");
				continue;
			}
			arr[x][y] = 4;
			y++;
		}
		// arr[x][y]==3的位置表示钥匙的地方,走到这里k变成1,表示已经拿到钥匙
		if(arr[x][y]==3){
			k=1;
		}
	}

	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346790.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号