C語言課程設(shè)計(jì)-迷宮_第1頁
C語言課程設(shè)計(jì)-迷宮_第2頁
C語言課程設(shè)計(jì)-迷宮_第3頁
C語言課程設(shè)計(jì)-迷宮_第4頁
C語言課程設(shè)計(jì)-迷宮_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)課程設(shè)計(jì)(論文)題目:迷宮問題院(系):題目:專業(yè)班級(jí):學(xué)號(hào):學(xué)生姓名:指導(dǎo)教師:教師職稱:講師起止時(shí)間:2009?12?14至2009?12?26

課程設(shè)計(jì)(報(bào)告)任務(wù)及評(píng)語學(xué)號(hào)學(xué)生姓名專業(yè)班級(jí)程序設(shè)計(jì)(報(bào)告)題目迷宮問題程序設(shè)計(jì){報(bào)告>任務(wù)程序設(shè)計(jì)的任務(wù)與要求:(1)掌SC語言編程的基礎(chǔ)知識(shí)。(2)較熟練地編寫C語言應(yīng)用程序。(3)了解C語言的常用標(biāo)準(zhǔn)函數(shù)、編程技巧、異常處理。(5)聯(lián)系已學(xué)過的內(nèi)容,鞏固所學(xué)的理論,增強(qiáng)獨(dú)立工作能力。(6)通過設(shè)計(jì)主要使學(xué)生有一個(gè)獨(dú)立編寫程序的過程,對理論學(xué)習(xí)及動(dòng)手能力都有一個(gè)很大的提高。(7)通過本次設(shè)計(jì),進(jìn)一步培養(yǎng)學(xué)生熱愛專業(yè)的思想,同時(shí)對本專業(yè)綜合素質(zhì)的提高起一個(gè)積極的推動(dòng)作用。課程設(shè)計(jì)過程中,要嚴(yán)格遵守實(shí)踐環(huán)節(jié)的時(shí)間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,記錄實(shí)習(xí)日記,規(guī)范完整地撰寫出課程設(shè)計(jì)報(bào)告。指導(dǎo)教件語及成績成績:指導(dǎo)教師簽字:2009年12月31日院(系):教研室:目錄第1章課程設(shè)計(jì)的目的與要求錯(cuò)誤!未定義書簽。1.1課程設(shè)計(jì)目的錯(cuò)誤!未定義書簽。1.2課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境錯(cuò)誤!未定義書簽。1.3課程設(shè)計(jì)的預(yù)備知識(shí)錯(cuò)誤!未定義書簽。1.4課程設(shè)計(jì)要求錯(cuò)誤!未定義書簽。第2章課程設(shè)計(jì)內(nèi)容錯(cuò)誤!未定義書簽。2.1程序功能介紹錯(cuò)誤!未定義書簽。2.2程序整體設(shè)計(jì)說明錯(cuò)誤!未定義書簽。2.2.1設(shè)計(jì)思路錯(cuò)誤!未定義書簽。2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明錯(cuò)誤!未定義書簽。2.2.3程序結(jié)構(gòu)(流程圖)錯(cuò)誤!未定義書簽。2.2.4各模塊的功能及程序說明錯(cuò)誤!未定義書簽。2.2.5程序結(jié)果錯(cuò)誤!未定義書簽。2.3程序源代碼及注釋錯(cuò)誤!未定義書簽。第3章課程設(shè)計(jì)總結(jié)錯(cuò)誤!未定義書簽。參考資料錯(cuò)誤!未定義書簽。第1章課程設(shè)計(jì)的目的與要求1.1課程設(shè)計(jì)目的本課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計(jì)的目的和任務(wù):鞏固和加深學(xué)生對C語言課程的基本知識(shí)的理解和掌握掌握C語言編程和程序調(diào)試的基本技能利用C語言進(jìn)行基本的軟件設(shè)計(jì)掌握書寫程序設(shè)計(jì)說明文檔的能力提高運(yùn)用C語言解決實(shí)際問題的能力1.2課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows2000/XP操作系統(tǒng)的微機(jī)系統(tǒng)。C語言程序設(shè)計(jì)及相應(yīng)的開發(fā)環(huán)境。1.3課程設(shè)計(jì)的預(yù)備知識(shí)熟悉C語言及C語言開發(fā)工具。1.4課程設(shè)計(jì)要求分析課程設(shè)計(jì)題目的要求寫出詳細(xì)設(shè)計(jì)說明編寫程序代碼,調(diào)試程序使其能正確運(yùn)行設(shè)計(jì)完成的軟件要便于操作和使用設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告第2章課程設(shè)計(jì)內(nèi)容2.1程序功能介紹迷宮是深受大家喜愛的游戲之一,本課題要求隨機(jī)生成一個(gè)美觀逼真的迷宮圖,它是隨機(jī)生成的且迷宮大小可以改變,迷宮的大小為N*N,N預(yù)定義為常數(shù),修改N的值可以改變迷宮的大?。ㄖ灰怀^屏幕顯示范圍),而程序不必做修改。程序采用了兩種運(yùn)行方式:一種通過自動(dòng)探索,這是用遞歸方法實(shí)現(xiàn);一種是由人工操作探索通過,這利用了手動(dòng)操作8個(gè)代表不同的方向的鍵位來實(shí)現(xiàn)。用白色表示可走的路,藍(lán)色表示墻壁不可以通過。2.2程序整體設(shè)計(jì)說明2.2.1設(shè)計(jì)思路一般的迷宮為二維平面圖形,將迷宮的左上角作入口,右下角作出口,求出從入口點(diǎn)到出口點(diǎn)的一條通路,作為線性結(jié)構(gòu)的典型應(yīng)用,大多用非遞歸方法實(shí)現(xiàn),輸出用0代表通路,1代表墻壁。程序采用了一個(gè)美觀逼真的迷宮圖,而且是隨機(jī)生成,迷宮的大小為NxN,N預(yù)定義為常數(shù),修改N的值可以改變迷宮的大?。ㄖ灰怀^屏幕顯示范圍),而程序不必做修改。用白色表示可走的路,藍(lán)色表示墻壁不可以通過。程序還設(shè)計(jì)了兩種運(yùn)行方式:一種是由系統(tǒng)自動(dòng)運(yùn)行探索,用遞歸方法實(shí)現(xiàn);一種是由人工操作探索通路。系統(tǒng)運(yùn)行首先出現(xiàn)提示字符串“Pleaseselecthand(1)elseauto”,詢問是選擇人工探索還是系統(tǒng)自動(dòng)探索,當(dāng)用戶輸入字符1按回車鍵后出現(xiàn)一個(gè)迷宮圖,紅色矩形塊(表示探索物)出現(xiàn)在左上角,這是可以代表4個(gè)方向的字符選擇通路,遇到墻壁不能通行,按回車鍵結(jié)束探索,如果這時(shí)探索物移動(dòng)到右下角出口,則顯示找到通路信息,否則顯示沒找到通路信息。在提示信息后,如果輸入的字符不是1,則系統(tǒng)自動(dòng)查找通路,如果沒有找到通路,則顯示沒有找到通路信息。如果找到通路,則用紅色標(biāo)記走過的路徑。程序首先要考慮迷宮的表示,這是一個(gè)二維關(guān)系圖,典型的存貯儲(chǔ)方式是選擇二維數(shù)組,數(shù)組元素的值只有兩種狀態(tài),所以取值為0或1,0表示通路,1表示墻壁,這里取名為map。圖形的顯示就可以根據(jù)數(shù)組元素的值來確定,如果是人工探索,則根據(jù)按鍵來確定探索物的位置坐標(biāo),利用循環(huán)語句即可實(shí)現(xiàn),如果是系統(tǒng)自動(dòng)探索,并且在4個(gè)方向進(jìn)行遞歸算法,即可實(shí)現(xiàn)尋找路徑。2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明.用m行n列的m*n個(gè)正方格表示一個(gè)迷宮,其中劃有斜線的方格表示不可通行,未劃有斜線的方格表示可以通行。請編寫尋找從入口到出口的一條最短路徑的程序。(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ì)方法,要求對各個(gè)模塊的功能及參數(shù)作必要的說明提示(1)迷宮可以采用matrix類型的二維數(shù)組A表示。A.rownum與A.colnum分別表示迷宮的實(shí)際的行數(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)化為尋找從對應(yīng)于入口頂點(diǎn)到對應(yīng)于出口頂點(diǎn)的一條最短路徑的問題。該問題可以采用從入口頂點(diǎn)出發(fā),進(jìn)行廣度優(yōu)先搜索遍歷,直到遇到出口頂點(diǎn)或者遍歷完畢也沒有遇到出口頂點(diǎn)為止。這二種情況分別對應(yīng)于最短路徑探索成功與查無通路的事實(shí)。(3)基于上述分析,涉及到數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,即將二維數(shù)組表示的迷宮A轉(zhuǎn)換為以adjlist類型的鄰接表表示的圖結(jié)構(gòu)G。在圖結(jié)構(gòu)中,將迷宮中的每個(gè)方格看作是一個(gè)頂點(diǎn)。不可通行的方格都是孤立頂點(diǎn);相鄰的可通行的方格所對應(yīng)的頂點(diǎn)之間看作是有邊相連。因此迷宮可以看作是由m*n個(gè)頂點(diǎn)及無向邊構(gòu)成的一個(gè)非連通的無向圖。盡管圖是不連通的,但不影響本問題的求解,而且本問題有解的條件是:入口頂點(diǎn)與出口頂點(diǎn)在同一個(gè)連通分量中。圖結(jié)構(gòu)G中,G.adj[k]表示編號(hào)為k的頂點(diǎn)的鄰接情況的單鏈表的頭指針;G.vexnum表示圖G中的實(shí)際頂點(diǎn)數(shù),而且具有如下關(guān)系:G.vexnum二A.rownum*A.colnum(4)為了避免迷宮數(shù)據(jù)的重復(fù)輸入,我們期望A能夠自動(dòng)地轉(zhuǎn)換為G。因此應(yīng)該設(shè)計(jì)一個(gè)轉(zhuǎn)換算法create_adjlist(A,G)。而圖結(jié)構(gòu)中頂點(diǎn)是要編號(hào)的,我們約定以行為序,順序給迷宮A中的方格所對應(yīng)的頂點(diǎn)編號(hào)。這樣迷宮中方格的坐標(biāo)(即行row和列col)與圖G中所對應(yīng)的頂點(diǎn)的編號(hào)(即verno)之間具有如下關(guān)系:verno=(row-1)*n+colrow=(verno-1)/n+1col=(verno-1)%n+1(5)在廣度優(yōu)先搜索遍歷求解最短路徑過程中,應(yīng)該設(shè)置一個(gè)隊(duì)列queue作為輔助數(shù)據(jù)結(jié)構(gòu);路徑采用一個(gè)整數(shù)數(shù)組pred來表示。這二個(gè)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)類型均為list類型,其說明定義如下:typedefintlist[MAXVER];隊(duì)列queue應(yīng)該設(shè)置front和rear分別指示列首與列尾,queue[k]表示第k個(gè)入列的頂點(diǎn)編號(hào)。采用pred記錄路徑,pred[i]表示頂點(diǎn)i在廣度優(yōu)先搜索遍歷過程中的前趨頂點(diǎn)的編號(hào),它表明是經(jīng)過邊(pred[i],i)達(dá)到頂點(diǎn)i的。這樣,當(dāng)路徑探索成功時(shí),我們可以從出口頂點(diǎn)倒推出從入口到出口的一條路徑來。當(dāng)然要涉及到從頂點(diǎn)編號(hào)向方格坐標(biāo)的反轉(zhuǎn)換,這個(gè)公式在上面已經(jīng)給出了。2.2.3程序結(jié)構(gòu)(流程圖)程序結(jié)構(gòu)設(shè)計(jì)流程圖如圖2.1所示開始判斷字符串是否1if輸出結(jié)果Result()結(jié)束輸出字符串并初始化init手動(dòng)探索PeopleFind()自動(dòng)探索FindWay()隨機(jī)生成迷宮(Maprand)關(guān)閉圖像Close()預(yù)定義定義二維數(shù)組Map[n][n]主函數(shù)main()清屏clrscr()圖2.1流程圖2.2.4各模塊的功能及程序說明程序用二維數(shù)組表示迷宮第一個(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é)束。第二個(gè)模塊一初始化函數(shù)Init()的功能是:由于迷宮是在圖形方式下顯示的,所以要進(jìn)行圖形初始化。第三個(gè)模塊一迷宮生成函數(shù)MapRand()的功能是:用數(shù)組map表示一個(gè)迷宮,要隨機(jī)生成迷宮,數(shù)組元素的值利用隨機(jī)函數(shù)生成0或1的數(shù)。第四個(gè)模塊一迷宮顯示函數(shù)PrMap()的功能:根據(jù)數(shù)組map的值輸出迷宮圖,利用函數(shù)setfillstyle()設(shè)置圖形實(shí)體填充樣式bar()函數(shù)輸出矩形塊。數(shù)組元素的下標(biāo)為矩形塊的中心坐標(biāo),利用兩重循環(huán)語句可以完成迷宮圖的顯示。第五個(gè)模塊一系統(tǒng)自動(dòng)5FindWay()的功能:從下標(biāo)(1,1)開始探索,依次按照右下、下、右、右上、左、左下、左上的順序前進(jìn),若該方向上的值為0,則前進(jìn)一步。第六個(gè)模塊一人工探索PeopleFindO的功能:首先輸出迷宮圖以及人工控制操作圖示,紅色探索出現(xiàn)在左上角,采用人工控制8個(gè)方向的移動(dòng),由于是8個(gè)方向,用光標(biāo)鍵只能控制4個(gè)方向,為了統(tǒng)一采用了臨近的8個(gè)字符,Q,W,E,A,D,Z,X,C代表8個(gè)方向,按了字符后,對應(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的值,將x和y進(jìn)行相應(yīng)的變化.第七個(gè)模塊一結(jié)果處理函數(shù)Result():最終結(jié)果是找到和沒找到兩種情況,在程序中設(shè)計(jì)全局變量yes,根據(jù)yes的值進(jìn)行處理。如果yes為0,調(diào)用函數(shù)NotFind(),顯示找到通路信息,否則調(diào)用函數(shù)Find()o如果是系統(tǒng)自動(dòng)探索,F(xiàn)ind()會(huì)顯示出所走過的路徑,如果是人工探索,沒有記錄走過的路徑,只顯示找到通路的信息。第八個(gè)模塊一圖形關(guān)閉函數(shù)Close()的功能:調(diào)用Closegraph()關(guān)閉圖形系統(tǒng),程序結(jié)束。

2.2.5程序結(jié)果程序編譯連接成功后,首先出現(xiàn)提示字符串“pleaseselecthard(1)elseauto”詢問是選擇人工探索還是選擇系統(tǒng)自動(dòng)探索,其中1是人工探索。圖2.2結(jié)果當(dāng)輸入字符1時(shí),此時(shí)是人工探索。按回車鍵后出現(xiàn)一個(gè)迷宮圖,紅色矩形塊出項(xiàng)在左上角,這時(shí)可以按代表8個(gè)方向的字符選擇通路,若可以找到通路,則走的路都由紅色標(biāo)記,當(dāng)遇到墻壁是則不能通行,此時(shí)按回車鍵結(jié)束探索,屏幕出現(xiàn)“notfindaway”提示信息。如果輸入的字符不是1,則系統(tǒng)自動(dòng)查找通路。如果沒有找通路,則顯示沒有找到通路的信息“notfindaway”,如果找到通路,則用紅色標(biāo)記走過的路徑,回車后結(jié)束探索。圖2.3戲圖片找到出路,屏幕顯示Findaway!2.3程序源代碼及注釋#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<dos.h>#defineN20/*迷宮的大小,可改變*/intoldmap[N][N];/*遞歸用的數(shù)組,用全局變量節(jié)約時(shí)間*/intyes=0;/*yes是判斷是否找到路的標(biāo)志,1找到,0沒找到*/intway[100][2],wayn=0;/*way數(shù)組是顯示路線用的,wayn是統(tǒng)計(jì)走了幾個(gè)格子*/voidInit(void);/*圖形初始化*/voidClose(void);/*圖形關(guān)閉*/voidDrawPeople(int*x,int*y,intn);/*畫人工探索物圖*/voidPeopleFind(int(*x)[N]);/*人工探索*/voidWayCopy(int(*x)[N],int(*y)[N]);/*為了8個(gè)方向的遞歸,把舊迷宮圖拷貝給新數(shù)組*/intFindWay(int(*x)[N],inti,intj);/*自動(dòng)探索函數(shù)*/voidMapRand(int(*x)[N]);/*隨機(jī)生成迷宮函數(shù)*/voidPrMap(int(*x)[N]);/*輸出迷宮圖函數(shù)*/voidResult(void);/*輸出結(jié)果處理*/voidFind(void);/*成功處理*/voidNotFind(void);/*失敗處理*/voidmain(void)/*主函數(shù)*/(intmap[N][N];/*迷宮數(shù)組*/charch;clrscr();printf("\nPleaseselecthand(1)elseauto\n");/*選擇探索方式*/scanf(〃%c〃,&ch);Init();/*初始化*/MapRand(map);/*生成迷宮*/PrMap(map);/*顯示迷宮圖*/if(ch=='1')PeopleFind(map);/*人工探索*/elseFindWay(map,1,1);/*系統(tǒng)自動(dòng)從下標(biāo)1,1的地方開始探索*/Result();/*輸出結(jié)果*/Close();}voidInit(void)/*圖形初始化*/(intgd=DETECT,gm;initgraph(&gd,&gm,〃c:\\tc〃);}voidDrawPeople(int*x,int*y,intn)/*畫人工控制圖*/(/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/setfillstyle(SOLID_FILL,WHITE);/*設(shè)置白色實(shí)體填充樣式*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢復(fù)原通路*/switch(n)/*判斷x,y的變化,8個(gè)方向的變化*/(case1:(*x)--;break;/*上*/case2:(*x)--;(*y)++;break;/*右上*/case3:(*y)++;break;/*右*/case4:(*x)++;(*y)++;break;/*右下*/case5:(*x)++;break;/*下*/case6:(*x)++;(*y)--;break;/*左下*/case7:(*y)--;break;/*左*/case8:(*x)--;(*y)--;break;/*左上*/}setfillstyle(SOLID_FILL,RED);/*新位置顯示探索物*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);}voidPeopleFind(int(*map)[N])/*人工手動(dòng)查找*/(intx,y;charc=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個(gè)方向的控制介紹*/setcolor(YELLOW);outtextxy(420,290,"Press'Enter'toend");/*壓回車鍵結(jié)束*/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();/*接收字符后開始各個(gè)方向的探索*/if(c=='w'&&map[x-1][y]!=1)DrawPeople(&x,&y,1);/*上*/elseif(c=='e'&&map[x-1][y+1]!=1)DrawPeople(&x,&y,2);/*右上*/elseif(c=='d'&&map[x][y+1]!=1)DrawPeople(&x,&y,3);/*右*/elseif(c=='c'&&map[x+1][y+1]!=1)DrawPeople(&x,&y,4);/*右下*/elseif(c=='x'&&map[x+1][y]!=1)DrawPeople(&x,&y,5);/*下*/elseif(c=='z'&&map[x+1][y-1]!=1)DrawPeople(&x,&y,6);/*左下*/elseif(c=='a'&&map[x][y-1]!=1)DrawPeople(&x,&y,7);/*左*/elseif(c=='q'&&map[xT][y-1]!=1)DrawPeople(&x,&y,8);/*左上*/}setfillstyle(SOLID_FILL,WHITE);/*消去紅色探索物,恢復(fù)原迷宮圖*/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;/*如果成功標(biāo)志為1*/}voidWayCopy(int(*oldmap)[N],int(*map)[N])/*拷貝迷宮數(shù)組*/(inti,j;for(i=0;i<N;i++)for(j=0;j<N;j++)oldmap[i][j]=map[i][j];}intFindWay(int(*map)[N],inti,intj)/*遞歸找路*/(if(i==N-2&&j==N-2)/*走到出口*/(一一yes=1;/*標(biāo)志為1,表示成功*/return;}map[i][j]=1;/*走過的地方變?yōu)?*/WayCopy(oldmap,map);/*拷貝迷宮圖*/if(oldmap[i+1][j+1]==0&&!yes)/*判斷右下方是否可走*/(FindWay(oldmap,i+1,j+1);if(yes)/*如果到達(dá)出口了,再把值賦給顯示路線的way數(shù)組,也正是這個(gè)原因,所以具體路線是從最后開始保存*/(way[wayn][0]=i;way[wayn++][1]=j;return;}}WayCopy(oldmap,map);if(oldmap[i+1][j]==0&&!yes)/*判斷下方是否可以走,如果標(biāo)志yes已經(jīng)是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;}voidMapRand(int(*map)[N])/*開始的隨機(jī)迷宮圖*/(inti,j;cleardevice();/*清屏*/randomize();/*隨機(jī)數(shù)發(fā)生器*/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;elseif(i==1&&j==1||i==N-2&&j==N-2)/*出發(fā)點(diǎn)與終點(diǎn)表示為可走的*/map[i][j]=0;elsemap[i][j]=random(2);/*其它的隨機(jī)生成0或1*/}}}voidPrMap(int(*map)[N])/*輸出迷宮圖*/(inti,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);/*藍(lán)色為墻壁*/bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);}}voidFind(void)/*找到通路*/(inti;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);/*控制顯示時(shí)間*/}bar(100+(N-2)*15-6,50+(N-2)*15-6,100+(N-2)*15+6,50+(N-2)*15+6);/*在目標(biāo)點(diǎn)標(biāo)紅色*/setcolor(GREEN);settextstyle(0,0,2);/*設(shè)置字體大小*/outtextxy(130,400,"Findaway!”);voidNotFind(void)/*沒找到通路*/(setcolor(GREEN);settextstyle(0,0,2);/*設(shè)置字體大小*/outtextxy(130,400,"Notfindaway!”);}voidResult(void)/*結(jié)果處理*/(if(yes)/*如果找到*/Find();else/*沒找到路*/NotFind();getch();}voidClose(void)/*圖形關(guān)閉*/(closegraph();第3章課程設(shè)計(jì)總結(jié)通過這段時(shí)間的課程設(shè)計(jì),我認(rèn)識(shí)到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é),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.回顧起此次C語言課程設(shè)計(jì),至今我仍感慨頗多,的確,從課題到定稿,從理論到實(shí)踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了上課所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論