c語言課程設(shè)計(jì)--迷宮問題_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  C語言課程設(shè)計(jì)報(bào)告</b></p><p>  題目: 迷宮問題 </p><p>  姓名: </p><p>  班級(jí): </p><p>  學(xué)號(hào): </p><p>

2、;  組員: </p><p>  指導(dǎo)教師: </p><p>  學(xué)院: </p><p>  專業(yè): </p><p>  課程設(shè)計(jì)(報(bào)告)任務(wù)及評(píng)語</p><p>  院(系):

3、 教研室:</p><p><b>  目 錄</b></p><p>  第1章 課程設(shè)計(jì)的目的與要求1</p><p>  1.1 課程設(shè)計(jì)目的1</p><p>  1.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境1</p><p>  1.3 課程設(shè)

4、計(jì)的預(yù)備知識(shí)1</p><p>  1.4 課程設(shè)計(jì)要求1</p><p>  第2章 課程設(shè)計(jì)內(nèi)容2</p><p>  2.1程序功能介紹2</p><p>  2.2程序整體設(shè)計(jì)說明2</p><p>  2.2.1設(shè)計(jì)思路2</p><p>  2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法

5、說明3</p><p>  2.2.3程序結(jié)構(gòu)(流程圖)4</p><p>  2.2.4各模塊的功能及程序說明6</p><p>  2.2.5程序結(jié)果7</p><p>  2.3程序源代碼及注釋7</p><p>  第3章 課程設(shè)計(jì)總結(jié)17</p><p><b>

6、  參考資料18</b></p><p>  第1章 課程設(shè)計(jì)的目的與要求</p><p>  1.1 課程設(shè)計(jì)目的</p><p>  本課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計(jì)的目的和任務(wù): </p><p>  1. 鞏固和加深學(xué)

7、生對(duì)C語言課程的基本知識(shí)的理解和掌握 </p><p>  2. 掌握C語言編程和程序調(diào)試的基本技能 </p><p>  3. 利用C語言進(jìn)行基本的軟件設(shè)計(jì)</p><p>  4. 掌握書寫程序設(shè)計(jì)說明文檔的能力</p><p>  5. 提高運(yùn)用C語言解決實(shí)際問題的能力</p><p>  1.2 課程設(shè)計(jì)的實(shí)驗(yàn)

8、環(huán)境</p><p>  硬件要求能運(yùn)行Windows 2000/XP操作系統(tǒng)的微機(jī)系統(tǒng)。C語言程序設(shè)計(jì)及相應(yīng)的開發(fā)環(huán)境。</p><p>  1.3 課程設(shè)計(jì)的預(yù)備知識(shí)</p><p>  熟悉C語言及C語言開發(fā)工具。</p><p>  1.4 課程設(shè)計(jì)要求</p><p>  1. 分析課程設(shè)計(jì)題目的要求2.

9、寫出詳細(xì)設(shè)計(jì)說明3. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行4. 設(shè)計(jì)完成的軟件要便于操作和使用5. 設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告</p><p>  第2章 課程設(shè)計(jì)內(nèi)容</p><p><b>  2.1程序功能介紹</b></p><p>  迷宮是深受大家喜愛的游戲之一,本課題要求隨機(jī)生成一個(gè)美觀逼真的迷宮圖,它是隨機(jī)生成的且迷宮

10、大小可以改變,迷宮的大小為N*N,N預(yù)定義為常數(shù),修改N的值可以改變迷宮的大?。ㄖ灰怀^屏幕顯示范圍),而程序不必做修改。程序采用了兩種運(yùn)行方式:一種通過自動(dòng)探索,這是用遞歸方法實(shí)現(xiàn);一種是由人工操作探索通過,這利用了手動(dòng)操作8個(gè)代表不同的方向的鍵位來實(shí)現(xiàn)。用白色表示可走的路,藍(lán)色表示墻壁不可以通過。</p><p>  2.2程序整體設(shè)計(jì)說明 </p><p><b>  

11、2.2.1設(shè)計(jì)思路</b></p><p>  一般的迷宮為二維平面圖形,將迷宮的左上角作入口,右下角作出口,求出從入口點(diǎn)到出口點(diǎn)的一條通路,作為線性結(jié)構(gòu)的典型應(yīng)用,大多用非遞歸方法實(shí)現(xiàn),輸出用0代表通路,1代表墻壁。程序采用了一個(gè)美觀逼真的迷宮圖,而且是隨機(jī)生成,迷宮的大小為N×N,N預(yù)定義為常數(shù),修改N的值可以改變迷宮的大?。ㄖ灰怀^屏幕顯示范圍),而程序不必做修改。用白色表示可走的路

12、,藍(lán)色表示墻壁不可以通過。程序還設(shè)計(jì)了兩種運(yùn)行方式:</p><p>  一種是由系統(tǒng)自動(dòng)運(yùn)行探索,用遞歸方法實(shí)現(xiàn);</p><p>  一種是由人工操作探索通路。系統(tǒng)運(yùn)行首先出現(xiàn)提示字符串“Please select hand(1) else auto”,詢問是選擇人工探索還是系統(tǒng)自動(dòng)探索,當(dāng)用戶輸入字符1按回車鍵后出現(xiàn)一個(gè)迷宮圖,紅色矩形塊(表示探索物)出現(xiàn)在左上角,這是可以代表4個(gè)方

13、向的字符選擇通路,遇到墻壁不能通行,按回車鍵結(jié)束探索,如果這時(shí)探索物移動(dòng)到右下角出口,則顯示找到通路信息,否則顯示沒找到通路信息。在提示信息后,如果輸入的字符不是1,則系統(tǒng)自動(dòng)查找通路,如果沒有找到通路,則顯示沒有找到通路信息。如果找到通路,則用紅色標(biāo)記走過的路徑。程序首先要考慮迷宮的表示,這是一個(gè)二維關(guān)系圖,典型的存貯儲(chǔ)方式是選擇二維數(shù)組,數(shù)組元素的值只有兩種狀態(tài),所以取值為0或1,0表示通路,1表示墻壁,這里取名為map。圖形的顯示

14、就可以根據(jù)數(shù)組元素的值來確定,如果是人工探索,則根據(jù)按鍵來確定探索物的位置坐標(biāo),利用循環(huán)語句即可實(shí)現(xiàn),如果是系統(tǒng)自動(dòng)探索,并且在4個(gè)方向進(jìn)行遞歸算法,即可實(shí)現(xiàn)尋找路徑。</p><p>  2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明 .</p><p>  用m行n列的m*n個(gè)正方格表示一個(gè)迷宮,其中劃有斜線的方格表示不可通行,未劃有斜線的方格表示可以通行。請(qǐng)編寫尋找從入口到出口的一條最短路徑的程序

15、。 (1)迷宮的規(guī)格(即行數(shù)與列數(shù)),狀態(tài)設(shè)置(即各方格能否通行的狀態(tài)),以及入口和 出口的位置,均應(yīng)由輸入隨機(jī)確定。 (2)求得的最短路徑,應(yīng)該以從入口到出口的路徑上的各個(gè)方格的坐標(biāo)的線性序列輸出。當(dāng)無通路時(shí),應(yīng)該報(bào)告無路徑的信息。 (3)盡量采用結(jié)構(gòu)化程序設(shè)計(jì)方法,要求對(duì)各個(gè)模塊的功能及參數(shù)作必要的說明提示(1)迷宮可以采用matrix類型的二維數(shù)組A表示。A.rownum與A.colnum分別表示迷宮的實(shí)際

16、的行數(shù)與列數(shù)。而A.maze[i][j]表示迷宮中第i行第j列的一個(gè)方格,用A.maze[i][j]=0表示該方格可以通行,用A.maze[i][j]=1表示該方格不可以通行。 (2)由于要尋找從入口到出口的一條最短路徑,最好將迷宮看作是一個(gè)圖結(jié)構(gòu)。則問題轉(zhuǎn)化為尋找從對(duì)應(yīng)于入口頂點(diǎn)到對(duì)應(yīng)于出口頂點(diǎn)的一條最短路徑的問題。該問題可以采用從入口頂點(diǎn)出發(fā),進(jìn)行廣度優(yōu)先搜索遍歷,直到遇到出口頂點(diǎn)或者遍歷完畢也沒有遇到出口</p>

17、<p>  2.2.3程序結(jié)構(gòu)(流程圖)</p><p>  程序結(jié)構(gòu)設(shè)計(jì)流程圖如圖2.1所示</p><p><b>  圖2.1流程圖</b></p><p>  2.2.4各模塊的功能及程序說明 </p><p>  程序用二維數(shù)組表示迷宮   </p><p>

18、;  第一個(gè)模塊—主函數(shù)main()的功能是:首先確定是人工還是系統(tǒng)自動(dòng)探索,通過輸 入字符選定。選定后調(diào)用圖形初始化函數(shù),接著調(diào)用迷宮生成函數(shù)及迷宮顯示函數(shù)。然后根據(jù)輸入的字符調(diào)用人工探索函數(shù)或自動(dòng)探索函數(shù),探索完畢進(jìn)行結(jié)果處理,最后關(guān)閉圖形系統(tǒng),程序結(jié)束。</p><p>  第二個(gè)模塊—初始化函數(shù)Init()的功能是:由于迷宮是在圖形方式下顯示的,所以要進(jìn)行圖形初始化。</p>

19、<p>  第三個(gè)模塊—迷宮生成函數(shù)MapRand()的功能是: 用數(shù)組map表示一個(gè)迷宮,要隨機(jī)生成迷宮,數(shù)組元素的值利用隨機(jī)函數(shù)生成0或1的數(shù)。</p><p>  第四個(gè)模塊—迷宮顯示函數(shù)PrMap()的功能:  根據(jù)數(shù)組map的值輸出迷宮圖,利用函數(shù)setfillstyle()設(shè)置圖形實(shí)體填充樣式bar()函數(shù)輸出矩形塊。數(shù)組元素的下標(biāo)為矩形塊的中心坐標(biāo),利用兩重循環(huán)語句可以完成迷宮

20、圖的顯示。</p><p>  第五個(gè)模塊—系統(tǒng)自動(dòng)5FindWay()的功能:從下標(biāo)(1,1)開始探索,依次按照右下、下、右、右上、左、左下、左上的順序前進(jìn),若該方向上的值為0,則前進(jìn)一步。</p><p>  第六個(gè)模塊—人工探索PeopleFind()的功能:首先輸出迷宮圖以及人工控制操作圖示,紅色探索出現(xiàn)在左上角,采用人工控制8個(gè)方向的移動(dòng),由于是8個(gè)方向,用光標(biāo)鍵只能控制4個(gè)方向

21、,為了統(tǒng)一采用了臨近的8個(gè)字符,Q,W,E,A,D,Z,X,C代表8個(gè)方向,按了字符后,對(duì)應(yīng)方向不是墻壁,可以將紅色探索物移到相應(yīng)的位置,按回車表示結(jié)果人工操作。如果此時(shí)map數(shù)組元素的坐標(biāo)是出口,則yes的值為1,探索成功,否則值為0。由于探索物不停的移動(dòng),要在新位置顯示,并將走過的路恢復(fù)為白色通路,可以調(diào)用DrawPeople(&x,&y,n)完成.參數(shù)x和y代表所在的行坐標(biāo)和列坐標(biāo),n代表所選的方向,根據(jù)n的值,將

22、x和y進(jìn)行相應(yīng)的變化.</p><p>  第七個(gè)模塊—結(jié)果處理函數(shù)Result(): 最終結(jié)果是找到和沒找到兩種情況,在程序中設(shè)計(jì)全局變量yes,根據(jù)yes的值進(jìn)行處理。如果yes為0,調(diào)用函數(shù)NotFind(),顯示找到通路信息,否則調(diào)用函數(shù)Find()。如果是系統(tǒng)自動(dòng)探索,F(xiàn)ind()會(huì)顯示出所走過的路徑,如果是人工探索,沒有記錄走過的路徑,只顯示找到通路的信息。</p><p> 

23、 第八個(gè)模塊—圖形關(guān)閉函數(shù)Close()的功能: 調(diào)用Closegraph()關(guān)閉圖形系統(tǒng),程序結(jié)束。</p><p><b>  2.2.5程序結(jié)果</b></p><p>  程序編譯連接成功后,首先出現(xiàn)提示字符串“please select hard(1) else auto”詢問是選擇人工探索還是選擇系統(tǒng)自動(dòng)探索,其中1是人工探索。</p>&l

24、t;p><b>  圖2.2結(jié)果</b></p><p>  當(dāng)輸入字符1時(shí),此時(shí)是人工探索。按回車鍵后出現(xiàn)一個(gè)迷宮圖,紅色矩形塊出項(xiàng)在左上角,這時(shí)可以按代表8個(gè)方向的字符選擇通路,若可以找到通路,則走的路都由紅色標(biāo)記,當(dāng)遇到墻壁是則不能通行,此時(shí)按回車鍵結(jié)束探索,屏幕出現(xiàn)“not find a way”提示信息。如果輸入的字符不是1,則系統(tǒng)自動(dòng)查找通路。如果沒有找通路,則顯示沒有找到

25、通路的信息“not find a way”,如果找到通路,則用紅色標(biāo)記走過的路徑,回車后結(jié)束探索。</p><p><b>  圖2.3戲圖片</b></p><p>  找到出路,屏幕顯示Find a way!</p><p>  2.3程序源代碼及注釋</p><p>  #include <graphics.

26、h></p><p>  #include <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <conio.h></p><p>  #include <dos.h></p><p>  #defi

27、ne N 20/*迷宮的大小,可改變*/</p><p>  int oldmap[N][N];/*遞歸用的數(shù)組,用全局變量節(jié)約時(shí)間*/</p><p>  int yes=0;/*yes是判斷是否找到路的標(biāo)志,1找到,0沒找到*/</p><p>  int way[100][2],wayn=0;/*way數(shù)組是顯示路線用的,wayn是統(tǒng)計(jì)走了幾個(gè)格子*/&

28、lt;/p><p>  void Init(void);/*圖形初始化*/</p><p>  void Close(void);/*圖形關(guān)閉*/</p><p>  void DrawPeople(int *x,int *y,int n);/*畫人工探索物圖*/</p><p>  void PeopleFind(int (*x)[N]);/*

29、人工探索*/</p><p>  void WayCopy(int (*x)[N],int (*y)[N]);/*為了8個(gè)方向的遞歸,把舊迷宮圖拷貝給新數(shù)組*/</p><p>  int FindWay(int (*x)[N],int i,int j);/*自動(dòng)探索函數(shù)*/</p><p>  void MapRand(int (*x)[N]);/*隨機(jī)生成迷宮

30、函數(shù)*/</p><p>  void PrMap(int (*x)[N]);/*輸出迷宮圖函數(shù)*/</p><p>  void Result(void);/*輸出結(jié)果處理*/</p><p>  void Find(void);/*成功處理*/</p><p>  void NotFind(void);/*失敗處理*/</p>

31、<p>  void main(void)/*主函數(shù)*/</p><p><b>  {</b></p><p>  int map[N][N]; /*迷宮數(shù)組*/</p><p><b>  char ch;</b></p><p><b>  clrscr();</

32、b></p><p>  printf("\n Please select hand(1) else auto\n");/*選擇探索方式*/</p><p>  scanf("%c",&ch);</p><p>  Init(); /*初始化*/</p><p>  MapRand(ma

33、p);/*生成迷宮*/</p><p>  PrMap(map);/*顯示迷宮圖*/</p><p>  if(ch=='1')</p><p>  PeopleFind(map);/*人工探索*/</p><p><b>  else</b></p><p>  FindWay(

34、map,1,1);/*系統(tǒng)自動(dòng)從下標(biāo)1,1的地方開始探索*/</p><p>  Result();/*輸出結(jié)果*/</p><p><b>  Close();</b></p><p><b>  }</b></p><p>  void Init(void)/*圖形初始化*/</p>

35、<p><b>  {</b></p><p>  int gd=DETECT,gm;</p><p>  initgraph(&gd,&gm,"c:\\tc");</p><p><b>  }</b></p><p>  void DrawPeo

36、ple(int *x,int *y,int n)/*畫人工控制圖*/</p><p>  {/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/</p><p>  setfillstyle(SOLID_FILL,WHITE); /*設(shè)置白色實(shí)體填充樣式*/</p><p>  bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+

37、6,50+(*x)*15+6);</p><p><b>  /*恢復(fù)原通路*/</b></p><p>  switch(n)/*判斷x,y的變化,8個(gè)方向的變化*/</p><p><b>  {</b></p><p>  case 1: (*x)--;break; /*上*/</p&g

38、t;<p>  case 2: (*x)--;(*y)++;break ;/*右上*/</p><p>  case 3: (*y)++;break; /*右*/</p><p>  case 4: (*x)++;(*y)++;break; /*右下*/</p><p>  case 5: (*x)++;break; /*下*/</p>

39、<p>  case 6: (*x)++;(*y)--;break; /*左下*/</p><p>  case 7: (*y)--;break; /*左*/</p><p>  case 8: (*x)--;(*y)--;break; /*左上*/</p><p><b>  }</b></p><p>

40、;  setfillstyle(SOLID_FILL,RED);/*新位置顯示探索物*/</p><p>  bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);</p><p><b>  }</b></p><p>  void PeopleFind(int (*map)[N

41、])/*人工手動(dòng)查找*/</p><p><b>  {</b></p><p><b>  int x,y;</b></p><p>  char c=0;/*接收按鍵的變量*/</p><p>  x=y=1;/*人工查找的初始位置*/</p><p>  setcolo

42、r(11);</p><p>  line(500,200,550,200);</p><p>  outtextxy(570,197,"d");</p><p>  line(500,200,450,200);</p><p>  outtextxy(430,197,"a");</p>

43、<p>  line(500,200,500,150);</p><p>  outtextxy(497,130,"w");</p><p>  line(500,200,500,250);</p><p>  outtextxy(497,270,"x");</p><p>  line(50

44、0,200,450,150);</p><p>  outtextxy(445,130,"q");</p><p>  line(500,200,550,150);</p><p>  outtextxy(550,130,"e");</p><p>  line(500,200,450,250);<

45、;/p><p>  outtextxy(445,270,"z");</p><p>  line(500,200,550,250);</p><p>  outtextxy(550,270,"c");/*以上是畫8個(gè)方向的控制介紹*/</p><p>  setcolor(YELLOW);</p>

46、;<p>  outtextxy(420,290,"Press 'Enter' to end");/*壓回車鍵結(jié)束*/</p><p>  setfillstyle(SOLID_FILL,RED);</p><p>  bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置顯示*/<

47、/p><p>  while(c!=13)/*如果按下的不是回車鍵*/</p><p><b>  {</b></p><p>  c=getch();/*接收字符后開始各個(gè)方向的探索*/</p><p>  if(c=='w'&&map[x-1][y]!=1)</p><

48、p>  DrawPeople(&x,&y,1);/*上*/</p><p><b>  else</b></p><p>  if(c=='e'&&map[x-1][y+1]!=1)</p><p>  DrawPeople(&x,&y,2);/*右上*/</p>

49、<p><b>  else</b></p><p>  if(c=='d'&&map[x][y+1]!=1)</p><p>  DrawPeople(&x,&y,3);/*右*/</p><p><b>  else</b></p><p

50、>  if(c=='c'&&map[x+1][y+1]!=1)</p><p>  DrawPeople(&x,&y,4);/*右下*/</p><p><b>  else</b></p><p>  if(c=='x'&&map[x+1][y]!=1)&l

51、t;/p><p>  DrawPeople(&x,&y,5);/*下*/</p><p><b>  else</b></p><p>  if(c=='z'&&map[x+1][y-1]!=1)</p><p>  DrawPeople(&x,&y,6); /

52、*左下*/</p><p><b>  else</b></p><p>  if(c=='a'&&map[x][y-1]!=1)</p><p>  DrawPeople(&x,&y,7); /*左*/</p><p>  else if(c=='q'&a

53、mp;&map[x-1][y-1]!=1)</p><p>  DrawPeople(&x,&y,8); /*左上*/</p><p><b>  }</b></p><p>  setfillstyle(SOLID_FILL,WHITE); /*消去紅色探索物,恢復(fù)原迷宮圖*/</p><p>

54、  bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);</p><p>  if(x==N-2&&y==N-2)/*人工控制找成功的話*/</p><p>  yes=1; /*如果成功標(biāo)志為1*/</p><p><b>  }</b></p><p>  v

55、oid WayCopy(int (*oldmap)[N],int (*map)[N])/*拷貝迷宮數(shù)組 */</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=0;i<N;i++)</p><p>  for(j=0;

56、j<N;j++)</p><p>  oldmap[i][j]=map[i][j];</p><p><b>  }</b></p><p>  int FindWay(int (*map)[N],int i,int j)/*遞歸找路*/</p><p><b>  {</b></p&g

57、t;<p>  if(i==N-2&&j==N-2)/*走到出口*/</p><p><b>  {</b></p><p>  yes=1;/*標(biāo)志為1,表示成功*/</p><p><b>  return;</b></p><p><b>  }<

58、/b></p><p>  map[i][j]=1;/*走過的地方變?yōu)?*/</p><p>  WayCopy(oldmap,map); /*拷貝迷宮圖*/</p><p>  if(oldmap[i+1][j+1]==0&&!yes)/*判斷右下方是否可走*/</p><p><b>  {</b&g

59、t;</p><p>  FindWay(oldmap,i+1,j+1);</p><p>  if(yes)/*如果到達(dá)出口了,再把值賦給顯示路線的way數(shù)組,也正是這個(gè)原因,所以具體路線是從最后開始保存*/</p><p><b>  {</b></p><p>  way[wayn][0]=i;</p>

60、<p>  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  WayCopy(oldmap,map);</p>

61、<p>  if(oldmap[i+1][j]==0&&!yes)/*判斷下方是否可以走,如果標(biāo)志yes已經(jīng)是1也不用找下去了*/</p><p><b>  {</b></p><p>  FindWay(oldmap,i+1,j);</p><p><b>  if(yes)</b></

62、p><p><b>  {</b></p><p>  way[wayn][0]=i;</p><p>  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p>

63、<p><b>  }</b></p><p>  WayCopy(oldmap,map);</p><p>  if(oldmap[i][j+1]==0&&!yes)/*判斷右方是否可以走*/</p><p><b>  {</b></p><p>  FindWay(o

64、ldmap,i,j+1);</p><p><b>  if(yes)</b></p><p><b>  {</b></p><p>  way[wayn][0]=i;</p><p>  way[wayn++][1]=j;</p><p><b>  retur

65、n;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  WayCopy(oldmap,map);</p><p>  if(oldmap[i-1][j]==0&&!yes)/*判斷上方是否可以走*/</p&g

66、t;<p><b>  {</b></p><p>  FindWay(oldmap,i-1,j);</p><p><b>  if(yes)</b></p><p><b>  {</b></p><p>  way[wayn][0]=i;</p>

67、<p>  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  WayCopy(oldmap,map);</p>

68、<p>  if(oldmap[i-1][j+1]==0&&!yes)/*判斷右上方是否可以走*/</p><p><b>  {</b></p><p>  FindWay(oldmap,i-1,j+1);</p><p><b>  if(yes)</b></p><p&g

69、t;<b>  {</b></p><p>  way[wayn][0]=i;</p><p>  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b

70、>  }</b></p><p>  WayCopy(oldmap,map);</p><p>  if(oldmap[i+1][j-1]==0&&!yes)/*判斷左下方是否可以走*/</p><p><b>  {</b></p><p>  FindWay(oldmap,i+1,j

71、-1);</p><p><b>  if(yes)</b></p><p><b>  {</b></p><p>  way[wayn][0]=i;</p><p>  way[wayn++][1]=j;</p><p><b>  return;</b&

72、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p>  WayCopy(oldmap,map);</p><p>  if(oldmap[i][j-1]==0&&!yes)/*判斷左方是否可以走*/</p><p

73、><b>  {</b></p><p>  FindWay(oldmap,i,j-1);</p><p><b>  if(yes)</b></p><p><b>  {</b></p><p>  way[wayn][0]=i;</p><p&g

74、t;  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  WayCopy(oldmap,map);</p><p>

75、  if(oldmap[i-1][j-1]==0&&!yes)/*判斷左上方是否可以走*/</p><p><b>  {</b></p><p>  FindWay(oldmap,i-1,j-1);</p><p><b>  if(yes)</b></p><p><b&g

76、t;  {</b></p><p>  way[wayn][0]=i;</p><p>  way[wayn++][1]=j;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }&l

77、t;/b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  void MapRand(int (*map)[N])/*開始的隨機(jī)迷宮圖*/</p><p><b>  {</b></p><

78、;p><b>  int i,j;</b></p><p>  cleardevice();/*清屏*/</p><p>  randomize(); /*隨機(jī)數(shù)發(fā)生器*/</p><p>  for(i=0;i<N;i++)</p><p><b>  {</b></p>

79、<p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈為墻壁*/</p><p>  map[i][j]=1;</p><p><b>  else</b>

80、</p><p>  if(i==1&&j==1||i==N-2&&j==N-2)/*出發(fā)點(diǎn)與終點(diǎn)表示為可走的*/</p><p>  map[i][j]=0;</p><p><b>  else</b></p><p>  map[i][j]=random(2);/*其它的隨機(jī)生成0或

81、1*/</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void PrMap(int (*map)[N])/*輸出迷宮圖*/</p><p><b> 

82、 {</b></p><p><b>  int i,j;</b></p><p>  for(i=0;i<N;i++)</p><p>  for(j=0;j<N;j++)</p><p>  if(map[i][j]==0)</p><p><b>  {&l

83、t;/b></p><p>  setfillstyle(SOLID_FILL,WHITE);/*白色為可走的路*/</p><p>  bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);</p><p><b>  }</b></p><p><b>  el

84、se</b></p><p><b>  {</b></p><p>  setfillstyle(SOLID_FILL,BLUE);/*藍(lán)色為墻壁*/</p><p>  bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);</p><p><b>  }

85、</b></p><p><b>  }</b></p><p>  void Find(void)/*找到通路*/</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  setfill

86、style(SOLID_FILL,RED);/*紅色輸出走的具體路線*/</p><p><b>  wayn--;</b></p><p>  for(i=wayn;i>=0;i--)</p><p><b>  {</b></p><p>  bar(100+way[i][1]*15-6,

87、50+way[i][0]*15-6,100+</p><p>  way[i][1]*15+6,50+way[i][0]*15+6);</p><p>  sleep(1);/*控制顯示時(shí)間*/</p><p><b>  }</b></p><p>  bar(100+(N-2)*15-6,50+(N-2)*15-6,

88、100+</p><p>  (N-2)*15+6,50+(N-2)*15+6); /*在目標(biāo)點(diǎn)標(biāo)紅色*/</p><p>  setcolor(GREEN);</p><p>  settextstyle(0,0,2);/*設(shè)置字體大小*/</p><p>  outtextxy(130,400,"Find a way!"

89、;);</p><p><b>  }</b></p><p>  void NotFind(void)/*沒找到通路*/</p><p><b>  {</b></p><p>  setcolor(GREEN);</p><p>  settextstyle(0,0,2)

90、;/*設(shè)置字體大小*/</p><p>  outtextxy(130,400,"Not find a way!");</p><p><b>  }</b></p><p>  void Result(void)/*結(jié)果處理*/</p><p><b>  {</b></

91、p><p>  if(yes)/*如果找到*/</p><p><b>  Find();</b></p><p>  else/*沒找到路*/</p><p>  NotFind();</p><p><b>  getch();</b></p><p>

92、;<b>  }</b></p><p>  void Close(void)/*圖形關(guān)閉*/</p><p><b>  {</b></p><p>  closegraph();</p><p>  第3章 課程設(shè)計(jì)總結(jié)</p><p>  通過這段時(shí)間的課程設(shè)計(jì),我認(rèn)識(shí)

93、到C語言是一門比較難的課程。需要多花時(shí)間上機(jī)練習(xí)。這次的程序訓(xùn)練培養(yǎng)了我實(shí)際分析問課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.回顧起此次C語言課程設(shè)計(jì),至今我仍感慨頗多,的確,從課題到定稿,從理論到實(shí)踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了上課所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)

94、。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,彌補(bǔ)了上課所學(xué)的知識(shí)。 我認(rèn)為它是一個(gè)團(tuán)隊(duì)的工作,團(tuán)隊(duì)需要個(gè)人,個(gè)人也離不開團(tuán)隊(duì),必須發(fā)揚(yáng)團(tuán)結(jié)協(xié)作的精神。某個(gè)人的離群都可能導(dǎo)致整項(xiàng)工作的失

95、敗.只有一個(gè)人知道原理是遠(yuǎn)遠(yuǎn)不夠的,必須讓每個(gè)人都知道,否則一個(gè)人的錯(cuò)誤,就有可能導(dǎo)致整個(gè)</p><p>  這次課程設(shè)計(jì)不僅可以使我們鞏固了以前所學(xué)過的知識(shí),而且讓我們學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。在設(shè)計(jì)的過程中遇到過各種各樣的問題,但是我們沒有放棄,我們借助了老師、同學(xué)、網(wǎng)絡(luò)的力量終于完成程序,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體……

96、我們收獲很多,感謝老師,感謝領(lǐng)導(dǎo)給我們這次實(shí)戰(zhàn)演練的機(jī)會(huì),這次程序設(shè)計(jì)讓我們受益匪淺。</p><p><b>  參考資料</b></p><p>  [1] 劉瑞新,汪遠(yuǎn)佂.Visual Basic程序設(shè)計(jì)教程.機(jī)械工業(yè)出版社,2002,223</p><p>  [2] 譚浩強(qiáng).Visual Basic程序設(shè)計(jì)案例教程.清華大學(xué)出版社,2

97、008,235</p><p>  [3] 管麗娜 ,白海波.實(shí)用Visual Basic6 教程 .北京:清華大學(xué)出版社,2001,342</p><p>  [4] 段興. Visual Basic數(shù)據(jù)庫實(shí)用程序設(shè)計(jì)100例. 人民郵電出版社,2002,404</p><p>  [5] 王運(yùn)堅(jiān). VISUAL BASIC 6.0 應(yīng)用指南. 北京: 人民郵電出

98、版社, 1998,235</p><p>  [6] 何炎祥,《程序設(shè)計(jì)基礎(chǔ)》..出版地:北京 清華大學(xué)出版社,2008,239 </p><p>  [7] 王正仲,《21天學(xué)會(huì)c語言》..出版地:北京 電子工業(yè)出版社,2009,256</p><p>  [8] 許寶文等,李志,《計(jì)算機(jī)科學(xué)叢書》出版地:北京機(jī)械工業(yè)出版社,2004,289</p>

99、<p>  [9] 徐波等,《C和C++實(shí)務(wù)精選》出版地:北京人民郵電出版社,2002,401</p><p>  [10]蘇小紅等.《C語言大學(xué)實(shí)用教程》.電子工業(yè)出版社.2004.298</p><p>  [11] 蘇小紅等.《C語言大學(xué)實(shí)用教程習(xí)題與實(shí)驗(yàn)指導(dǎo)》.電子工業(yè)出版社.2004.235</p><p>  [12]譚浩強(qiáng).《C語言程序設(shè)計(jì)

100、教程》.高等教育出版社.1998.197</p><p>  [13] 崔武子.《C程序設(shè)計(jì)輔導(dǎo)與實(shí)訓(xùn)》. 清華大學(xué)出版社.2004.305</p><p>  [14]魯沐浴《C語言最新編程技巧200例》 電子工業(yè)出版社,1997,296</p><p>  [15]梁翎,李愛齊《C語言程序設(shè)計(jì)實(shí)用技巧與程序?qū)嵗?上??破粘霭嫔?,1996,193</p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論