C语言制作的迷宫游戏

之前有许多人来问我C语言能不能写个迷宫类的游戏,我也是思来想去,觉得必须安排上
还可以加上一些图形库的运用,由于博主还没学会,期待大佬来完善。
#include
#include
#include
#define row 1024
#define col 1024//定义
typedef struct Maze{int map[row][col];int information[row][col];
}Maze;
typedef struct Point{int x,y;
}Point;
//输入
void into_Maze(Maze *q,Maze *Q,Point *origin,Point *exit)
{int i,j,n,h,w=1;char str[1000000];do{gets(str);j=strlen(str);if(j == 0)break;for(i=1;i<j+1;i++){q->map[w][i]=str[i-1]-'0';}w++;}while(1);//用1将迷宫包围for(h=0;h<i;h++){q->map[0][h]=1;q->map[w][h]=1;}for(n=0;n<w;n++){q->map[n][0]=1;q->map[n][i]=1;}//地图信息,即到达某点次数for(h=1;h<w;h++){for(n=1;n<i;n++){Q->information[h][n]=0;}}////用0这个数字将迷宫包围,方便接下来的操作for(h=0;h<i;h++){Q->information[0][h]=0;Q->information[w][h]=0;}for(n=0;n<w;n++){Q->information[n][0]=0;Q->information[n][i]=0;}for(h=0;h<w+1;h++){for(n=0;n<=i;n++);}for(h=0;h<w+1;h++){for(n=0;n<i+1;n++);}origin->x=0,origin->y=0;exit->x=h-3,exit->y=i-2;}int number(Maze *Q,Maze *q,Point *present)
{int min=999;int num[999],j=0,i;if(q->map[present->x][present->y+1]==1){num[0]=999;}elsenum[0]=Q->information[present->x][present->y+1];if(q->map[present->x+1][present->y]==1){num[1]=999;}elsenum[1]=Q->information[present->x+1][present->y];if(q->map[present->x][present->y-1]==1){num[2]=999;}elsenum[2]=Q->information[present->x][present->y-1];if(q->map[present->x-1][present->y]==1){num[3]=999;}elsenum[3]=Q->information[present->x-1][present->y];min=num[0];		for(i=0;i<4;i++){if(min>num[i]){min=num[i];j=i;}}return j;}	
//在迷宫中移动
int move(Maze *q,Maze*Q,Point *origin,Point *exit,Point *present)
{	int num=0,m=0,n=0,k=0,i=0;char Direction[999]={0};present->x=origin->x+1;present->y=origin->y+1;Q->information[present->x][present->y]=Q->information[origin->x][origin->y]+1;while(!(present->x == exit->x+1 && present->y == exit->y+1)){   num=number(Q,q,present);//定义numif(Q->information[origin->x+1][origin->y+1]>27){k=2;break;}//ruturn ;else if(i>1000){k=2;break;}//向右移动	else if(q->map[present->x][present->y+1]==0 && num==0){present->y=present->y+1;Q->information[present->x][present->y] = Q->information[present->x][present->y]+1;if( Direction[m-1] =='L'){	m=m-1;continue;}Direction[m] = 'R';m++;continue;}//向下移动else if(q->map[present->x+1][present->y]==0 && num==1){present->x=present->x+1;Q->information[present->x][present->y] = Q->information[present->x][present->y]+1;if(Direction[m-1]=='U'){	m=m-1;continue;}Direction[m]='D';m++;continue;}//向左移动else if(q->map[present->x][present->y-1]==0 && num==2){	present->y=present->y-1;/*Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;if(Direction[m-1]=='R')*/Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;if(Direction[m-1]=='R'){	m=m-1;continue;}Direction[m]='L';m++;continue;}//向上移动else if(q->map[present->x-1][present->y]==0  && num==3){present->x=present->x-1;Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;if(Direction[m-1]=='D'){	m=m-1;continue;}Direction[m]='U';m++;continue;}	i++;
//循环判断}if(k==2)printf("NO PASS!\n");else puts(Direction);return k;
}int main()
{int k=0;Maze *q = (Maze*)malloc(sizeof(Maze));Maze *Q = (Maze*)malloc(sizeof(Maze));Point *origin = (Point*)malloc(sizeof(Point));Point *exit = (Point*)malloc(sizeof(Point));Point *present = (Point*)malloc(sizeof(Point));into_Maze(q,Q,origin,exit);//k=move(q,Q)k=move(q,Q,origin,exit,present);return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部