资源描述:
《迷宫游戏C语言代码讲解.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*迷宫游戏byCDQ*//*vc++6.0编译成功本程序参照网上一个特殊算法随机生成迷宫该算法优点:效率高,从入口到出口只有唯一路径,入口出口自己设定该算法缺点:宽度高度都必须为奇数,只能生成n*m矩阵迷宫*/#include#include#include#include#defineHeight31//迷宫的高度,必须为奇数#defineWidth25//迷宫的宽度,必须为奇数#defineWall1#defineRoad0#defineStart2#defineEnd3#defineEsc5#defi
2、neUp1#defineDown2#defineLeft3#defineRight4intmap[Height+2][Width+2];voidgotoxy(intx,inty)//移动坐标{COORDcoord;coord.X=x;coord.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}voidhidden()//隐藏光标{HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFOcci;GetConsoleCursorI
3、nfo(hOut,&cci);cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(hOut,&cci);}voidcreate(intx,inty)//随机生成迷宫{intc[4][2]={0,1,1,0,0,-1,-1,0};//四个方向inti,j,t;//将方向打乱for(i=0;i<4;i++){j=rand()%4;t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;}map[x][y]=Road;for(i=0;i<4;i++)if(
4、map[x+2*c[i][0]][y+2*c[i][1]]==Wall){map[x+c[i][0]][y+c[i][1]]=Road;create(x+2*c[i][0],y+2*c[i][1]);}}intget_key()//接收按键{charc;while(c=getch()){if(c==27)returnEsc;//Escif(c!=-32)continue;c=getch();if(c==72)returnUp;//上if(c==80)returnDown;//下if(c==75)returnLeft;//左if(c==77)returnRight;//右}retur
5、n0;}voidpaint(intx,inty)//画迷宫{gotoxy(2*y-2,x-1);switch(map[x][y]){caseStart:printf("入");break;//画入口caseEnd:printf("出");break;//画出口caseWall:printf("※");break;//画墙caseRoad:printf("");break;//画路}}voidgame(){intx=2,y=1;//玩家当前位置,刚开始在入口处intc;//用来接收按键while(1){gotoxy(2*y-2,x-1);printf("☆");//画出玩家当前位置i
6、f(map[x][y]==End)//判断是否到达出口{gotoxy(30,24);printf("到达终点,按任意键结束");getch();break;}c=get_key();if(c==Esc){gotoxy(0,24);5回复1楼2011-12-0715:46举报
7、我也说一句未来未来追忆曾经_团子家族10break;}switch(c){caseUp://向上走if(map[x-1][y]!=Wall){paint(x,y);x--;}break;caseDown://向下走if(map[x+1][y]!=Wall){paint(x,y);x++;}break;caseL
8、eft://向左走if(map[x][y-1]!=Wall){paint(x,y);y--;}break;caseRight://向右走if(map[x][y+1]!=Wall){paint(x,y);y++;}break;}}}intmain(){inti,j;srand((unsigned)time(NULL));//初始化随即种子hidden();//隐藏光标for(i=0;i<=Height+1;i++)for(j=0;j<=Width+1;j++)if(i=