亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

基于C語言實現的迷宮游戲代碼

2020-01-26 15:26:07
字體:
來源:轉載
供稿:網友

本文實例講述了基于C語言實現迷宮游戲的方法,代碼備有較為詳盡的注釋,便于讀者理解。通過該游戲代碼可以很好的復習C語言的遞歸算法與流程控制等知識,相信對于學習游戲開發的朋友有一定的借鑒價值。

完整的實例代碼如下:

#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <dos.h>#define N 20/*迷宮的大小,可改變*/int oldmap[N][N];/*遞歸用的數組,用全局變量節約時間*/int yes=0;/*yes是判斷是否找到路的標志,1找到,0沒找到*/int way[100][2],wayn=0;/*way數組是顯示路線用的,wayn是統計走了幾個格子*/void Init(void);/*圖形初始化*/void Close(void);/*圖形關閉*/void DrawPeople(int *x,int *y,int n);/*畫人工探索物圖*/void PeopleFind(int (*x)[N]);/*人工探索*/void WayCopy(int (*x)[N],int (*y)[N]);/*為了8個方向的遞歸,把舊迷宮圖拷貝給新數組*/int FindWay(int (*x)[N],int i,int j);/*自動探索函數*/void MapRand(int (*x)[N]);/*隨機生成迷宮函數*/void PrMap(int (*x)[N]);/*輸出迷宮圖函數*/void Result(void);/*輸出結果處理*/void Find(void);/*成功處理*/void NotFind(void);/*失敗處理*/void main(void)/*主函數*/{  int map[N][N]; /*迷宮數組*/  char ch;  clrscr();  printf("/n Please select hand(1) else auto/n");/*選擇探索方式*/  scanf("%c",&ch);  Init(); /*初始化*/  MapRand(map);/*生成迷宮*/  PrMap(map);/*顯示迷宮圖*/  if(ch=='1')   PeopleFind(map);/*人工探索*/  else   FindWay(map,1,1);/*系統自動從下標1,1的地方開始探索*/  Result();/*輸出結果*/  Close();}void Init(void)/*圖形初始化*/{  int gd=DETECT,gm;  initgraph(&gd,&gm,"c://tc");}void DrawPeople(int *x,int *y,int n)/*畫人工控制圖*/{/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/  setfillstyle(SOLID_FILL,WHITE); /*設置白色實體填充樣式*/  bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢復原通路*/  switch(n)/*判斷x,y的變化,8個方向的變化*/  {   case 1: (*x)--;break; /*上*/   case 2: (*x)--;(*y)++;break ;/*右上*/   case 3: (*y)++;break; /*右*/   case 4: (*x)++;(*y)++;break; /*右下*/   case 5: (*x)++;break; /*下*/   case 6: (*x)++;(*y)--;break; /*左下*/   case 7: (*y)--;break; /*左*/   case 8: (*x)--;(*y)--;break; /*左上*/  }  setfillstyle(SOLID_FILL,RED);/*新位置顯示探索物*/  bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);}void PeopleFind(int (*map)[N])/*人工手動查找*/{  int x,y;  char c=0;/*接收按鍵的變量*/  x=y=1;/*人工查找的初始位置*/  setcolor(11);  line(500,200,550,200);  outtextxy(570,197,"d");  line(500,200,450,200);  outtextxy(430,197,"a");  line(500,200,500,150);  outtextxy(497,130,"w");  line(500,200,500,250);  outtextxy(497,270,"x");  line(500,200,450,150);  outtextxy(445,130,"q");  line(500,200,550,150);  outtextxy(550,130,"e");  line(500,200,450,250);  outtextxy(445,270,"z");  line(500,200,550,250);  outtextxy(550,270,"c");/*以上是畫8個方向的控制介紹*/  setcolor(YELLOW);  outtextxy(420,290,"Press 'Enter' to end");/*壓回車鍵結束*/  setfillstyle(SOLID_FILL,RED);  bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置顯示*/  while(c!=13)/*如果按下的不是回車鍵*/  {   c=getch();/*接收字符后開始各個方向的探索*/   if(c=='w'&&map[x-1][y]!=1) DrawPeople(&x,&y,1);/*上*/   else if(c=='e'&&map[x-1][y+1]!=1)   DrawPeople(&x,&y,2);/*右上*/ else   if(c=='d'&&map[x][y+1]!=1)    DrawPeople(&x,&y,3);/*右*/   else    if(c=='c'&&map[x+1][y+1]!=1)  DrawPeople(&x,&y,4);/*右下*/    else  if(c=='x'&&map[x+1][y]!=1)    DrawPeople(&x,&y,5);/*下*/  else    if(c=='z'&&map[x+1][y-1]!=1)  DrawPeople(&x,&y,6); /*左下*/    else  if(c=='a'&&map[x][y-1]!=1)   DrawPeople(&x,&y,7); /*左*/  else if(c=='q'&&map[x-1][y-1]!=1)   DrawPeople(&x,&y,8); /*左上*/  }  setfillstyle(SOLID_FILL,WHITE); /*消去紅色探索物,恢復原迷宮圖*/  bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);  if(x==N-2&&y==N-2)/*人工控制找成功的話*/   yes=1; /*如果成功標志為1*/}void WayCopy(int (*oldmap)[N],int (*map)[N])/*拷貝迷宮數組 */{  int i,j;  for(i=0;i<N;i++)   for(j=0;j<N;j++) oldmap[i][j]=map[i][j];}int FindWay(int (*map)[N],int i,int j)/*遞歸找路*/{  if(i==N-2&&j==N-2)/*走到出口*/  {   yes=1;/*標志為1,表示成功*/   return;  }  map[i][j]=1;/*走過的地方變為1*/  WayCopy(oldmap,map); /*拷貝迷宮圖*/  if(oldmap[i+1][j+1]==0&&!yes)/*判斷右下方是否可走*/  {   FindWay(oldmap,i+1,j+1);   if(yes)/*如果到達出口了,再把值賦給顯示路線的way數組,也正是這個原因,所以具體路線是從最后開始保存*/   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i+1][j]==0&&!yes)/*判斷下方是否可以走,如果標志yes已經是1也不用找下去了*/  {   FindWay(oldmap,i+1,j);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i][j+1]==0&&!yes)/*判斷右方是否可以走*/  {   FindWay(oldmap,i,j+1);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i-1][j]==0&&!yes)/*判斷上方是否可以走*/  {   FindWay(oldmap,i-1,j);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i-1][j+1]==0&&!yes)/*判斷右上方是否可以走*/  {   FindWay(oldmap,i-1,j+1);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i+1][j-1]==0&&!yes)/*判斷左下方是否可以走*/  {   FindWay(oldmap,i+1,j-1);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i][j-1]==0&&!yes)/*判斷左方是否可以走*/  {   FindWay(oldmap,i,j-1);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  WayCopy(oldmap,map);  if(oldmap[i-1][j-1]==0&&!yes)/*判斷左上方是否可以走*/  {   FindWay(oldmap,i-1,j-1);   if(yes)   { way[wayn][0]=i; way[wayn++][1]=j; return;   }  }  return;}void MapRand(int (*map)[N])/*開始的隨機迷宮圖*/{  int i,j;  cleardevice();/*清屏*/  randomize(); /*隨機數發生器*/  for(i=0;i<N;i++)  {   for(j=0;j<N;j++)   { if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈為墻壁*/   map[i][j]=1; else   if(i==1&&j==1||i==N-2&&j==N-2)/*出發點與終點表示為可走的*/    map[i][j]=0;   else    map[i][j]=random(2);/*其它的隨機生成0或1*/   }  }}void PrMap(int (*map)[N])/*輸出迷宮圖*/{  int i,j;  for(i=0;i<N;i++)   for(j=0;j<N;j++) if(map[i][j]==0) {   setfillstyle(SOLID_FILL,WHITE);/*白色為可走的路*/   bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6); } else {   setfillstyle(SOLID_FILL,BLUE);/*藍色為墻壁*/   bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6); }}void Find(void)/*找到通路*/{  int i;  setfillstyle(SOLID_FILL,RED);/*紅色輸出走的具體路線*/  wayn--;  for(i=wayn;i>=0;i--)  {   bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+   way[i][1]*15+6,50+way[i][0]*15+6);   sleep(1);/*控制顯示時間*/  }  bar(100+(N-2)*15-6,50+(N-2)*15-6,100+ (N-2)*15+6,50+(N-2)*15+6); /*在目標點標紅色*/  setcolor(GREEN);  settextstyle(0,0,2);/*設置字體大小*/  outtextxy(130,400,"Find a way!");}void NotFind(void)/*沒找到通路*/{  setcolor(GREEN);  settextstyle(0,0,2);/*設置字體大小*/  outtextxy(130,400,"Not find a way!");}void Result(void)/*結果處理*/{  if(yes)/*如果找到*/   Find();  else/*沒找到路*/   NotFind();  getch();}void Close(void)/*圖形關閉*/{  closegraph();}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频亚洲| 国产精品久久91| 久久精品国产亚洲| 亚洲一区亚洲二区亚洲三区| 国产日本欧美一区二区三区在线| 国产91色在线|| y97精品国产97久久久久久| 久久精品美女视频网站| 欧美极品少妇xxxxⅹ喷水| 538国产精品视频一区二区| 欧美一区亚洲一区| 欧美大全免费观看电视剧大泉洋| 亚洲福利小视频| 精品中文字幕乱| 精品视频一区在线视频| 一区二区中文字幕| 久久久久久国产精品美女| 亚洲最新中文字幕| 视频一区视频二区国产精品| 国产99久久精品一区二区| 伊人伊成久久人综合网小说| 国产精品视频一区二区三区四| 狠狠久久五月精品中文字幕| 精品亚洲一区二区三区| 国产日韩在线亚洲字幕中文| 国产免费一区视频观看免费| 91沈先生作品| 亚洲精品一区中文字幕乱码| 欧美激情在线有限公司| 欧洲精品在线视频| 亚洲人午夜色婷婷| 精品亚洲夜色av98在线观看| 超薄丝袜一区二区| 国产精品爱啪在线线免费观看| 综合欧美国产视频二区| 亚洲精选中文字幕| 午夜精品福利视频| 91人人爽人人爽人人精88v| 97国产精品视频人人做人人爱| 欧美精品成人91久久久久久久| zzijzzij亚洲日本成熟少妇| 精品久久久久久中文字幕一区奶水| 91香蕉电影院| 日韩精品日韩在线观看| 一区二区三区视频免费在线观看| 中文字幕亚洲一区| 国产成人精品a视频一区www| 热久久视久久精品18亚洲精品| 久久中文字幕国产| 成人网页在线免费观看| 亚洲欧美变态国产另类| 色综合伊人色综合网| 91精品国产91久久久久久不卡| 日韩欧美综合在线视频| 国产精品视频白浆免费视频| 日本高清视频精品| 成人欧美在线视频| 亚洲专区中文字幕| 欧美裸体xxxx极品少妇软件| 欧美国产日韩一区二区三区| 成人天堂噜噜噜| 久久久久久亚洲精品不卡| 2019中文在线观看| 成人xxxx视频| 亚洲自拍小视频| 欧美成人全部免费| 欧美性视频网站| 97超视频免费观看| 久久中文字幕国产| 亚洲色图欧美制服丝袜另类第一页| 日韩欧美在线视频观看| 成人羞羞国产免费| 成人免费午夜电影| 久久伊人色综合| 久久久国产91| 热久久免费国产视频| 一区二区三区日韩在线| 久久伊人色综合| 日韩在线观看网址| 欧美成人激情在线| 欧美韩国理论所午夜片917电影| 97在线精品视频| 操日韩av在线电影| 国产精品电影久久久久电影网| 亚洲第一福利网| 亚洲japanese制服美女| 亚洲一区999| 亚洲最大成人免费视频| 国产精品福利网| 亚洲男人天堂古典| 欧美国产日韩一区二区在线观看| 久久亚洲国产精品成人av秋霞| 91高清视频在线免费观看| 日韩av不卡在线| 97精品在线视频| 成人美女免费网站视频| 亚洲视频在线观看视频| 国产91成人在在线播放| 国产精品嫩草视频| 日韩中文字幕免费看| 亚洲欧美另类国产| 亚洲成人久久网| 中文字幕日韩欧美在线视频| 日韩日本欧美亚洲| 日日狠狠久久偷偷四色综合免费| 在线国产精品播放| 在线播放国产一区中文字幕剧情欧美| 亚洲精品自拍第一页| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美一区二区激情| 538国产精品一区二区免费视频| 最近2019年好看中文字幕视频| 蜜臀久久99精品久久久无需会员| 国产一区私人高清影院| 一本大道香蕉久在线播放29| 亚洲美女黄色片| 欧美激情视频播放| 日韩中文av在线| 中文字幕久精品免费视频| 国产一区视频在线播放| 精品日本高清在线播放| 92看片淫黄大片看国产片| 亚洲精品视频免费在线观看| 欧美激情久久久| 91av网站在线播放| 亚洲少妇激情视频| 中文字幕久热精品在线视频| 亚洲国产成人精品久久久国产成人一区| 欧美日韩国产在线看| 国产999精品久久久影片官网| 日韩美女在线观看| 日韩中文字幕第一页| 日本成人黄色片| 久久夜精品va视频免费观看| 亚洲免费伊人电影在线观看av| 欧美激情videos| 国语自产精品视频在线看抢先版图片| 国产精品女主播| 狠狠爱在线视频一区| 久久久久999| 91国产美女视频| 91久久夜色精品国产网站| 4444欧美成人kkkk| 亚洲一区二区国产| 久久精品电影网| 久久亚洲精品小早川怜子66| 久久av在线播放| 北条麻妃在线一区二区| 亚洲国模精品私拍| 久久99青青精品免费观看| 久久色在线播放| 97精品欧美一区二区三区| 97精品久久久中文字幕免费| 综合国产在线观看| 国产精品久久久久av免费| 国产精品免费看久久久香蕉| 青青草一区二区| 亚洲国产日韩精品在线| 亚洲另类激情图| 亚洲精品一区av在线播放| 成人444kkkk在线观看| 色综合视频一区中文字幕| 亚洲xxxxx性| 中文字幕日韩欧美精品在线观看|