版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 大 學(xué) 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)掌握c語言編程的基礎(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ú)立編寫程序的過程,對(duì)理論學(xué)習(xí)及動(dòng)手能力都有一個(gè)很大的提高。(
2、7)通過本次設(shè)計(jì),進(jìn)一步培養(yǎng)學(xué)生熱愛專業(yè)的思想,同時(shí)對(duì)本專業(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)教師評(píng)語及成績(jī)成績(jī): 指導(dǎo)教師簽字: 2009 年 12 月 31 日目 錄第1章 課程設(shè)計(jì)的目的與要求11.1 課程設(shè)計(jì)目的11.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境11.3 課程設(shè)計(jì)的預(yù)備知識(shí)11.4 課程設(shè)計(jì)要求1第2章 課程設(shè)計(jì)內(nèi)容22.1程序功能介紹22.2程序整體設(shè)計(jì)說明22.2.1設(shè)計(jì)思路22.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明32.2.3程序結(jié)構(gòu)(流程圖)42.2.4各模
3、塊的功能及程序說明62.2.5程序結(jié)果72.3程序源代碼及注釋9第3章 課程設(shè)計(jì)總結(jié)19參考資料21第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ù): 1. 鞏固和加深學(xué)生對(duì)c語言課程的基本知識(shí)的理解和掌握 2. 掌握c語言編程和程序調(diào)試的基本技能 3. 利用c語言進(jìn)行基本的軟件設(shè)計(jì)4. 掌握書寫程序設(shè)計(jì)說明文檔的能力5. 提高運(yùn)用c語言解決實(shí)際問題的能力1.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行windows 2000/xp操作系統(tǒng)的微機(jī)系統(tǒng)。c語言程序設(shè)
4、計(jì)及相應(yīng)的開發(fā)環(huán)境。1.3 課程設(shè)計(jì)的預(yù)備知識(shí)熟悉c語言及c語言開發(fā)工具。1.4 課程設(shè)計(jì)要求1. 分析課程設(shè)計(jì)題目的要求2. 寫出詳細(xì)設(shè)計(jì)說明3. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行4. 設(shè)計(jì)完成的軟件要便于操作和使用5. 設(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);一種是由人工操作探索通過,這利用
5、了手動(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ī)生成,迷宮的大小為nn,n預(yù)定義為常數(shù),修改n的值可以改變迷宮的大?。ㄖ灰怀^屏幕顯示范圍),而程序不必做修改。用白色表示可走的路,藍(lán)色表示墻壁不可以通過。程序還設(shè)計(jì)了兩種運(yùn)行方式:一種是由系統(tǒng)自動(dòng)運(yùn)行探索,用遞歸方法實(shí)現(xiàn);一種是由人工操作探索通路。系統(tǒng)運(yùn)行
6、首先出現(xiàn)提示字符串“please select hand(1) else auto”,詢問是選擇人工探索還是系統(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),所以取值為
7、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è)迷宮,其中劃有斜線的方格表示不可通行,未劃有斜線的方格表示可以通行。請(qǐng)編寫尋找從入口到出口的一條最短路徑的程序。 (1)迷宮的規(guī)格(即行數(shù)與列數(shù)),狀態(tài)設(shè)置(即各方格能否通行的狀態(tài)),以及入口和 出口的位置,均應(yīng)由輸入隨機(jī)確定。 (2)求得的最短路徑,應(yīng)該以從入口到出口的路徑上的各個(gè)方格的坐標(biāo)的線性序
8、列輸出。當(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í)際的行數(shù)與列數(shù)。而a.mazeij表示迷宮中第i行第j列的一個(gè)方格,用a.mazeij=0表示該方格可以通行,用a.mazeij=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)或者遍歷完畢
9、也沒有遇到出口頂點(diǎn)為止。這二種情況分別對(duì)應(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);相鄰的可通行的方格所對(duì)應(yīng)的頂點(diǎn)之間看作是有邊相連。因此迷宮可以看作是由m*n個(gè)頂點(diǎn)及無向邊構(gòu)成的一個(gè)非連通的無向圖。盡管圖是不連通的,但不影響本問題的求解,而且本問題有解的條件是:入口頂點(diǎn)與出口頂點(diǎn)在同一個(gè)連通分量中。 圖結(jié)構(gòu)g中,g.adjk表示編號(hào)為k的頂點(diǎn)的鄰接情況的單鏈表的頭指針;g.vexnum表示圖g中的實(shí)際頂點(diǎn)數(shù),
10、而且具有如下關(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中的方格所對(duì)應(yīng)的頂點(diǎn)編號(hào)。這樣迷宮中方格的坐標(biāo)(即行row和列col)與圖g中所對(duì)應(yīng)的頂點(diǎn)的編號(hào)(即verno)之間具有如下關(guān)系: verno=(row-1)* n + col row=(verno-1)/ n + 1 col=(verno-1)% n + 1 (5)在廣度優(yōu)先搜索遍歷求解最短路徑過程中,應(yīng)該設(shè)置一個(gè)隊(duì)列queue作為輔助數(shù)據(jù)
11、結(jié)構(gòu);路徑采用一個(gè)整數(shù)數(shù)組pred來表示。這二個(gè)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)類型均為list類型,其說明定義如下: typedef int listmaxver; 隊(duì)列queue應(yīng)該設(shè)置front和rear分別指示列首與列尾,queuek表示第k個(gè)入列的頂點(diǎn)編號(hào)。采用pred記錄路徑,predi表示頂點(diǎn)i在廣度優(yōu)先搜索遍歷過程中的前趨頂點(diǎn)的編號(hào),它表明是經(jīng)過邊(predi,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所示預(yù)定義主函數(shù)m
12、ain()定義二維數(shù)組mapnn清屏clrscr()輸出字符串并初始化initiiiiiiiiininit隨機(jī)生成迷宮(maprand)開始 判斷字符串是否1if手動(dòng)探索peoplefind()自動(dòng)探索findway()輸出結(jié)果result()關(guān)閉圖像close()結(jié)束 圖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é)束。第二
13、個(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,
14、則前進(jìn)一步。第六個(gè)模塊人工探索peoplefind()的功能:首先輸出迷宮圖以及人工控制操作圖示,紅色探索出現(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è)方向,按了字符后,對(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代表所選的方向,根
15、據(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()。如果是系統(tǒng)自動(dòng)探索,find()會(huì)顯示出所走過的路徑,如果是人工探索,沒有記錄走過的路徑,只顯示找到通路的信息。第八個(gè)模塊圖形關(guān)閉函數(shù)close()的功能: 調(diào)用closegraph()關(guān)閉圖形系統(tǒng),程序結(jié)束。2.2.5程序結(jié)果程序編譯連接成功后,首先出現(xiàn)提示字符串“please select hard(1) else auto”詢問是選擇人工探索還
16、是選擇系統(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)“not find a way”提示信息。如果輸入的字符不是1,則系統(tǒng)自動(dòng)查找通路。如果沒有找通路,則顯示沒有找到通路的信息“not find a way”,如果找到通路,則用紅色標(biāo)記走過的路徑,回車后結(jié)束探索。圖2.3戲圖片找到出路,屏幕顯示find a way!2.3程序源代碼及注釋#include #include #includ
17、e #include #include #define n 20/*迷宮的大小,可改變*/int oldmapnn;/*遞歸用的數(shù)組,用全局變量節(jié)約時(shí)間*/int yes=0;/*yes是判斷是否找到路的標(biāo)志,1找到,0沒找到*/int way1002,wayn=0;/*way數(shù)組是顯示路線用的,wayn是統(tǒng)計(jì)走了幾個(gè)格子*/void init(void);/*圖形初始化*/void close(void);/*圖形關(guān)閉*/void drawpeople(int *x,int *y,int n);/*畫人工探索物圖*/void peoplefind(int (*x)n);/*人工探索*/voi
18、d waycopy(int (*x)n,int (*y)n);/*為了8個(gè)方向的遞歸,把舊迷宮圖拷貝給新數(shù)組*/int findway(int (*x)n,int i,int j);/*自動(dòng)探索函數(shù)*/void maprand(int (*x)n);/*隨機(jī)生成迷宮函數(shù)*/void prmap(int (*x)n);/*輸出迷宮圖函數(shù)*/void result(void);/*輸出結(jié)果處理*/void find(void);/*成功處理*/void notfind(void);/*失敗處理*/void main(void)/*主函數(shù)*/ int mapnn; /*迷宮數(shù)組*/ char ch;
19、 clrscr(); printf(n please select hand(1) else auton);/*選擇探索方式*/ scanf(%c,&ch); init(); /*初始化*/ maprand(map);/*生成迷宮*/ prmap(map);/*顯示迷宮圖*/ if(ch=1) peoplefind(map);/*人工探索*/ else findway(map,1,1);/*系統(tǒng)自動(dòng)從下標(biāo)1,1的地方開始探索*/ result();/*輸出結(jié)果*/ close();void init(void)/*圖形初始化*/ int gd=detect,gm; initgraph(&gd,
20、&gm,c:tc);void drawpeople(int *x,int *y,int n)/*畫人工控制圖*/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/ 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è)方向的變化*/ case 1: (*x)-;break; /*上*/ case 2: (*x)-;(*y)+;break ;/*右上*/ case 3: (*y
21、)+;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
22、)/*人工手動(dòng)查找*/ 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);
23、 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 to end);/*壓回車鍵結(jié)束*/ setfillstyle(solid_fill,red); bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入
24、口位置顯示*/ while(c!=13)/*如果按下的不是回車鍵*/ c=getch();/*接收字符后開始各個(gè)方向的探索*/ if(c=w&mapx-1y!=1) drawpeople(&x,&y,1);/*上*/ else if(c=e&mapx-1y+1!=1) drawpeople(&x,&y,2);/*右上*/ else if(c=d&mapxy+1!=1) drawpeople(&x,&y,3);/*右*/ else if(c=c&mapx+1y+1!=1) drawpeople(&x,&y,4);/*右下*/ else if(c=x&mapx+1y!=1) drawpeople(
25、&x,&y,5);/*下*/ else if(c=z&mapx+1y-1!=1)drawpeople(&x,&y,6); /*左下*/ elseif(c=a&mapxy-1!=1) drawpeople(&x,&y,7); /*左*/else if(c=q&mapx-1y-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)/*人工控制找成功的話*/ y
26、es=1; /*如果成功標(biāo)志為1*/void waycopy(int (*oldmap)n,int (*map)n)/*拷貝迷宮數(shù)組 */ int i,j; for(i=0;in;i+) for(j=0;jn;j+) oldmapij=mapij;int findway(int (*map)n,int i,int j)/*遞歸找路*/ if(i=n-2&j=n-2)/*走到出口*/ yes=1;/*標(biāo)志為1,表示成功*/ return; mapij=1;/*走過的地方變?yōu)?*/ waycopy(oldmap,map); /*拷貝迷宮圖*/ if(oldmapi+1j+1=0&!yes)/*判斷
27、右下方是否可走*/ findway(oldmap,i+1,j+1); if(yes)/*如果到達(dá)出口了,再把值賦給顯示路線的way數(shù)組,也正是這個(gè)原因,所以具體路線是從最后開始保存*/ waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapi+1j=0&!yes)/*判斷下方是否可以走,如果標(biāo)志yes已經(jīng)是1也不用找下去了*/ findway(oldmap,i+1,j); if(yes) waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapij+1=
28、0&!yes)/*判斷右方是否可以走*/ findway(oldmap,i,j+1); if(yes) waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapi-1j=0&!yes)/*判斷上方是否可以走*/ findway(oldmap,i-1,j); if(yes) waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapi-1j+1=0&!yes)/*判斷右上方是否可以走*/ findway(oldmap,i-1,j+1); if(yes) way
29、wayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapi+1j-1=0&!yes)/*判斷左下方是否可以走*/ findway(oldmap,i+1,j-1); if(yes) waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(oldmapij-1=0&!yes)/*判斷左方是否可以走*/ findway(oldmap,i,j-1); if(yes) waywayn0=i; waywayn+1=j; return; waycopy(oldmap,map); if(o
30、ldmapi-1j-1=0&!yes)/*判斷左上方是否可以走*/ findway(oldmap,i-1,j-1); if(yes) waywayn0=i; waywayn+1=j; return; return;void maprand(int (*map)n)/*開始的隨機(jī)迷宮圖*/ int i,j; cleardevice();/*清屏*/ randomize(); /*隨機(jī)數(shù)發(fā)生器*/ for(i=0;in;i+) for(j=0;jn;j+) if(i=0|i=n-1|j=0|j=n-1)/*最外面一圈為墻壁*/ mapij=1; else if(i=1&j=1|i=n-2&j=n-
31、2)/*出發(fā)點(diǎn)與終點(diǎn)表示為可走的*/ mapij=0; else mapij=random(2);/*其它的隨機(jī)生成0或1*/ void prmap(int (*map)n)/*輸出迷宮圖*/ int i,j; for(i=0;in;i+) for(j=0;j=0;i-) bar(100+wayi1*15-6,50+wayi0*15-6,100+ wayi1*15+6,50+wayi0*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)紅色*/ se
32、tcolor(green); settextstyle(0,0,2);/*設(shè)置字體大小*/ outtextxy(130,400,find a way!);void notfind(void)/*沒找到通路*/ setcolor(green); settextstyle(0,0,2);/*設(shè)置字體大小*/ outtextxy(130,400,not find a way!);void result(void)/*結(jié)果處理*/ if(yes)/*如果找到*/ find(); else/*沒找到路*/ notfind(); getch();void close(void)/*圖形關(guān)閉*/ close
33、graph();第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é),是對(duì)學(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ì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,彌補(bǔ)了上課所學(xué)的知識(shí)。 我認(rèn)為它是一個(gè)團(tuán)隊(duì)的工作,團(tuán)隊(duì)需要個(gè)人,個(gè)人也離不開團(tuán)隊(duì),
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空公司客服招聘協(xié)議
- 農(nóng)業(yè)科技園區(qū)停車場(chǎng)建設(shè)合同
- 泌尿外科護(hù)理畢業(yè)設(shè)計(jì)
- 垃圾處理工程承包合同
- 軟件技術(shù)授權(quán)使用協(xié)議
- 涂料施工安全協(xié)議
- 服裝店保潔人員招聘協(xié)議
- 電子工廠易燃易爆品處理
- 農(nóng)村公路升級(jí)施工協(xié)議
- 企業(yè)監(jiān)事規(guī)范管理指南
- QCT457-2023救護(hù)車技術(shù)規(guī)范
- DZ∕T 0207-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 硅質(zhì)原料類(正式版)
- 《燒(創(chuàng))傷的急救復(fù)蘇與麻醉管理》智慧樹知到課后章節(jié)答案2023年下中國人民解放軍總醫(yī)院第四醫(yī)學(xué)中心
- 小學(xué)語文《四季》課件
- 危險(xiǎn)化學(xué)品重大危險(xiǎn)源辨識(shí)(GB18218-2018)
- 水庫移民工作存在的問題及對(duì)策水庫建設(shè)移民問題
- 班級(jí)文化建設(shè)的實(shí)踐與研究課題方案doc
- 有色金屬選礦廠工藝設(shè)計(jì)規(guī)范
- 用樣方法調(diào)查草地中某種雙子葉植物的種群密度實(shí)驗(yàn)設(shè)計(jì)[實(shí)驗(yàn)報(bào)告]
- 鍋爐英語對(duì)照
- (完整版)英美文化知識(shí)競(jìng)賽題答案
評(píng)論
0/150
提交評(píng)論