版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《C++程序》迷宮游戲設計報告</p><p> 專 業(yè): 電子信息工程 </p><p> 班 級: 2班 </p><p> 姓 名: </p><p> 學 號: 2011508
2、217 </p><p> 目 錄</p><p> 1、課程設計的目的、課程設計題目、題目要求3</p><p> 1.1課程設計的目的3</p><p> 1.2課程設計的題目3</p><p><b> 1.3題目要求3</b></p&
3、gt;<p> 2課程設計的實驗報告內容:4</p><p> 3課程設計的原程序代碼:4</p><p><b> 4運行結果16</b></p><p> 5課程設計總結20</p><p><b> 6參考書目21</b></p><p&g
4、t;<b> 1課程設計的目的</b></p><p> 1.1課程設計的目的:</p><p> 為大家解決一些生活中實際的問題,在這個過程中,自身的能力也在不斷地提高。此次 程序設計綜合運用所學知識解決實際問題, 將課堂的書本知識有效的在程序中體現(xiàn)出來, 讓 學生更理解 C++功能之強大,進一步讓學生對面向對象的方法以及 C++的編程思想有較好的了解和認識。
5、此外,此次設計培養(yǎng)獨立開發(fā)、設計、調試、運行程序的能力,激發(fā)學生較 強的自學興趣,鍛煉學生之間以及學生與老師的溝通能力,培養(yǎng)學生之間的合作精神,讓彼 此更好的認識到合作的重要性,使學生在今后的學習中加強對合作精神的培養(yǎng)。</p><p> 1.2課程設計的題目: 迷宮游戲設計</p><p><b> 1.3題目要求:</b></p><p&g
6、t; 編一迷宮游戲程序,迷宮生成有用戶輸入和程序自動生成兩種方式(迷宮以矩陣表示),要求輸出迷宮和走出迷宮的路徑。</p><p> 2課程設計的實驗報告內容:</p><p> ?。?)迷宮數(shù)組定義為結構體包含兩個整型數(shù)據(jù),迷宮出口和入口的值定義為整型。 (2)迷宮內部的設計時各坐標點設置成棧內整型。 (3)迷宮中求最短路徑時定義結構體類型表示隊列,包含整型坐標點,和整型下標; 又有
7、整型的隊首尾指針。</p><p> 3課程設計的原程序代碼:</p><p> #include<iostream></p><p> #include<stack></p><p> #include<stdio.h></p><p> #include<time
8、.h></p><p> #include<string></p><p> using namespace std;</p><p> typedef struct</p><p><b> {</b></p><p><b> int x,y;</b
9、></p><p><b> }item;</b></p><p> typedef struct</p><p><b> {</b></p><p> int x,y,d;</p><p> }Datetype;</p><p>
10、 typedef stack<Datetype> stack_int;</p><p> void path (int **maze,int,int,int,int);</p><p> void printpath();</p><p> #define NUM 100 //隊列大??;</p><p> typed
11、ef struct{</p><p> int x,y; //所到點的坐標;</p><p> int pre; //前驅點的下標;</p><p> }SqType; //隊列;</p><p> int front,rear; //隊首指針與隊尾指針;</p><p> void printpat
12、h(SqType sq[],int){//打印路徑</p><p><b> int i;</b></p><p><b> i=rear; </b></p><p><b> do{</b></p><p> cout<<"("<
13、<sq[i].x<<","<<sq[i].y<<")<--";</p><p> i=sq[i].pre; //回溯;</p><p> }while(i!=-1);</p><p><b> }</b></p><p>
14、 void restore(int **maze,int m,int n){//恢復迷宮</p><p> for(int i=1;i<=m;i++){</p><p> for(int j=1;j<=n;j++){</p><p> if(maze[i][j]==-1)</p><p> maze[i][j]=0;<
15、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int path1(int **maze,int m,int n,int c,int d,int x1,int y1)//最短路徑</p
16、><p> { //m,n為迷宮的長和寬,c,d為迷宮入口坐標,x1,y1為迷宮出口坐標;maze為迷宮;</p><p> item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //坐標增量數(shù)組;</p><p> SqType sq[NUM];</p>&l
17、t;p> int x,y,i,j,v; </p><p> front=rear=0;</p><p> sq[0].x=c;</p><p> sq[0].y=d;</p><p> sq[0].pre=-1; </p><p> if(maze[c][d]==0)</p><
18、p> maze[c][d]=-1;//入口點入隊;</p><p> else goto G;</p><p> while(front<=rear){ //隊列不為空</p><p> x=sq[front].x;</p><p> y=sq[front].y;</p><p> fo
19、r(v=0;v<8;v++){</p><p> i=x+move[v].x;</p><p> j=y+move[v].y;</p><p> if(maze[i][j]==0){</p><p><b> rear++;</b></p><p> sq[rear].x=i;&l
20、t;/p><p> sq[rear].y=j;</p><p> sq[rear].pre=front;</p><p> maze[i][j]=-1; //訪問過的坐標點,入隊;</p><p><b> }</b></p><p> if(i==x1&&j==y1){&l
21、t;/p><p> cout<<"最短路徑為:"<<endl;</p><p> printpath(sq,rear); //輸出路徑;</p><p> restore(maze,m,n); //恢復迷宮;</p><p> return 1; </p><p>
22、;<b> }</b></p><p> } //for v;</p><p> front++; //當前點搜索完,取下一個點搜索</p><p> } //while</p><p> G:cout<<"無路徑。"<<endl;</p>
23、<p><b> return 0;</b></p><p><b> }</b></p><p> void path(int **maze,int a,int b,int m,int n)</p><p><b> {</b></p><p> item
24、 move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};</p><p> stack_int st;</p><p> Datetype temp;</p><p> int x,y,d,i,j;</p><p> if(maze[a][b]==1){cout
25、<<"進口輸入有誤。";return;}</p><p> temp.x=a;temp.y=b;temp.d=-1; //初始化入口點坐標及方向;</p><p> st.push(temp);</p><p> while(!st.empty())</p><p><b> {</b&
26、gt;</p><p> temp=st.top();</p><p><b> st.pop();</b></p><p> x=temp.x;y=temp.y;d=temp.d+1;</p><p> while(d<8)</p><p><b> {</b&g
27、t;</p><p> i=x+move[d].x;j=y+move[d].y;</p><p> if(maze[i][j]==0) //該點可到達;</p><p><b> {</b></p><p> temp.x=x;temp.y=y;temp.d=d; //坐標及方向;</p><
28、;p> st.push(temp); //坐標及方向入棧;</p><p><b> x=i;y=j;</b></p><p> maze[x][y]=-1;//到達新點;</p><p> if(x==m && y==n)</p><p><b> {</b><
29、;/p><p> cout<<" 迷宮路徑為:"<<endl;</p><p> cout<<"("<<m<<","<<n<<")<---";</p><p> Datetype t;</p
30、><p> while(!st.empty())</p><p><b> {</b></p><p> t=st.top();</p><p> cout<<"("<<t.x<<","<<t.y<<")&l
31、t;---";</p><p><b> st.pop();</b></p><p> } //輸出路徑;</p><p> cout<<endl;</p><p> return ; //到達出口;</p><p><b> }</b>
32、;</p><p> else d=0; //重新初始化方向;</p><p><b> }</b></p><p> else d++; //改變方向;</p><p><b> }</b></p><p><b> }</b>&l
33、t;/p><p> cout<<"對不起,無法找到出口.";</p><p> return; //迷宮無路;</p><p><b> }</b></p><p> void printpath()</p><p><b> {</b&g
34、t;</p><p> int m,n,i,j,l,c,d;</p><p><b> string s;</b></p><p> cout<<" 請輸入迷宮的行數(shù)列數(shù)如:(m n)"<<endl;</p><p> cin>>m>>n;<
35、;/p><p> int **maze=new int*[m+2];</p><p> for(i=0;i<=m+1;i++)</p><p> maze[i]=new int[n+2];//申請迷宮的空間;</p><p> for(i=0;i<=m+1;i++) </p><p> maze[
36、i][0]=1;</p><p> for(i=0;i<=n+1;i++)</p><p> maze[0][i]=1;</p><p> for(i=0;i<=m+1;i++)</p><p> maze[i][n+1]=1;</p><p> for(i=0;i<=n+1;i++)<
37、;/p><p> maze[m+1][i]=1; //建立迷宮周圍的墻;</p><p> cout<<"1、采用創(chuàng)建好的迷宮; 2、自己創(chuàng)建迷宮(其他輸入按'2'處理)"<<endl;</p><p><b> cin>>s;</b></p><p
38、> if(s=="1")</p><p><b> {</b></p><p> srand(time(0)); //系統(tǒng)時間隨機函數(shù);</p><p> for(i=1;i<=m;i++)</p><p> for(j=1;j<=n;j++)</p>&l
39、t;p> maze[i][j]=rand()%2; //隨機賦值</p><p> maze[1][1]=0; //(1,1)點為可通過點;</p><p> maze[m][n]=0; //(m,n)點為可通過點;</p><p><b> }</b></p><p><b> el
40、se </b></p><p><b> {</b></p><p> cout<<"請輸入迷宮:"<<m<<"行"<<n<<"列"<<", 輸入必須為'0' 或 '1';&quo
41、t;<<endl;</p><p> for(i=1;i<=m;i++) //輸入第i行迷宮的構造;</p><p> for(j=1;j<=n;j++) //輸入第j列迷宮的結構;</p><p><b> {</b></p><p> cin>>maze[i
42、][j];</p><p> A:if(maze[i][j]!=0 && maze[i][j]!=1)</p><p><b> {</b></p><p> cout<<"請再次輸入:";</p><p> cin>>maze[i][j];goto A
43、; //判錯;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> cout<<"迷宮如下:"<<endl; //顯示用戶輸入的迷宮;<
44、/p><p> for(i=0;i<=m+1;i++)</p><p><b> {</b></p><p> for(j=0;j<=n+1;j++)</p><p> cout<<maze[i][j]<<" ";</p><p> c
45、out<<endl;</p><p><b> }</b></p><p> H:cout<<"請輸入迷宮入口(a,b),出口(c,d):";</p><p> cin>>i>>j>>c>>d;</p><p> path
46、(maze,i,j,c,d); //調用路徑函數(shù),輸出路徑;</p><p> cout<<endl; //格式設置;</p><p> restore(maze,m,n); //恢復迷宮;</p><p> path1(maze,m,n,i,j,c,d); //輸出最短路徑;</p><p> cout&l
47、t;<endl; //格式設置;</p><p> cout<<"1、尋找其他入口與出口;2、退出此迷宮;";</p><p><b> cin>>l; </b></p><p><b> if(l==1){</b></p><p> r
48、estore(maze,m,n); //恢復迷宮;</p><p><b> goto H;</b></p><p><b> }</b></p><p> else return; //跳出此函數(shù);</p><p><b> }</b></p>&
49、lt;p> void main()</p><p><b> {</b></p><p> string s="Y";</p><p><b> do</b></p><p><b> {</b></p><p>
50、cout<<"--------------------------歡迎到達迷宮界面--------------------------\n";</p><p> printpath();</p><p> cout<<endl;</p><p> cout<<"\n 是否繼續(xù)?'Y
51、9; 或'N'(輸入其他操作按'N')"<<endl;</p><p><b> cin>>s;</b></p><p> }while (s=="Y"||s=="y");</p><p> system("pause&qu
52、ot;);</p><p><b> }</b></p><p><b> 4運行結果:</b></p><p><b> 5. 課程設計總結</b></p><p> 為大家解決一些生活中實際的問題,在這個過程中,自身的能力也在不斷地提高。此次 程序設計綜合運用所學知
53、識解決實際問題, 將課堂的書本知識有效的在程序中體現(xiàn)出來, 讓 學生更理解 C++功能之強大,進一步讓學生對面向對象的方法以及 C++的編程思想有較好的了解和認識。此外,此次設計培養(yǎng)獨立開發(fā)、設計、調試、運行程序的能力,激發(fā)學生較 強的自學興趣,鍛煉學生之間以及學生與老師的溝通能力,培養(yǎng)學生之間的合作精神,讓彼 此更好的認識到合作的重要性,使學生在今后的學習中加強對合作精神的培養(yǎng)。一般來說,課程設計要比教學實驗復雜一些,涉及的深度深,而
54、且更加實用些。其目的 是通過課程設計的綜合訓練, 培養(yǎng)學生分析解決實際問題和編程等動手能力, 最終目標是想 通過這種形式,幫助學生系統(tǒng)掌握 C++這門課程的主要內容,使老師更好的完成教學任務。 結合實際應用的要求, 使課程設計既覆蓋教學所要求的知識點, 又接近工程的實際需要, 訓練自己實際分析問題和解決問題以及編程的能力。 通過詳細的實例分析,循環(huán)漸進的描述,啟發(fā)學生順利的完成設計。課程設計將設計要 求、需求分析、算法設計、編程和實例測
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 迷宮課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 課程設計(迷宮)
- 數(shù)據(jù)結構課程設計迷宮問題課程設計報告
- 數(shù)據(jù)結構課程設計報告--迷宮
- 課程設計迷宮求解
- 數(shù)據(jù)結構課程設計報告---迷宮求解
- 《數(shù)據(jù)結構》課程設計報告迷宮求解
- 數(shù)據(jù)結構迷宮求解課程設計報告
- 數(shù)據(jù)結構課程設計報告----迷宮問題
- 數(shù)據(jù)結構課程設計報告---迷宮算法
- 數(shù)據(jù)結構課程設計報告-迷宮求解
- 數(shù)據(jù)結構課程設計報告---迷宮問題
- 高級語言課程設計——迷宮實驗報告
- 羅密歐與朱麗葉迷宮課程設計報告
- c語言課程設計--迷宮
評論
0/150
提交評論