版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)--迷宮
- c語言迷宮求解課程設(shè)計(jì)
- c語言優(yōu)質(zhì)課程設(shè)計(jì)迷宮
- c語言程序設(shè)計(jì)課程設(shè)計(jì)(論文)-迷宮
- 迷宮問題非遞歸求解--數(shù)據(jù)結(jié)構(gòu)c語言課程設(shè)計(jì)
- c數(shù)據(jù)結(jié)構(gòu)迷宮問題課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)c語言課程設(shè)計(jì)報(bào)告之迷宮
- 迷宮(c語言版)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 迷宮問題——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問題
- c語言課程設(shè)計(jì)--矩陣問題
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 基于c語言的迷宮問題設(shè)計(jì)
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 【課程設(shè)計(jì)】c語言課程設(shè)計(jì)
- 沙漠穿越問題_c語言課程設(shè)計(jì)
- 高級(jí)語言課程設(shè)計(jì)——迷宮實(shí)驗(yàn)報(bào)告
- c語言課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論