用最基础的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;
}
|