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

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

#include <stdio.h>
#include <stdlib.h>


/*你需要在迷宫找到钥匙才能打开门,□代表你所在的地方,■代表墙不能通过,○代表钥
匙,需要你去营救,※代表你走过的路线,切记不能走回头路哦,×代表陷阱的位置,遇到
会死亡,如果遇见敌人会被抓,|-代表出口(门)。必须找到钥匙一起出去才能成功。
w,s,a,d分别代表上,下,左,右。
*/
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;
}

Guess you like

Origin blog.csdn.net/qq_57227983/article/details/120932451