版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《高級語言程序設(shè)計》</p><p><b> 課程設(shè)計報告</b></p><p><b> 計算機與信息工程系</b></p><p> 2013年6 月 28日</p><p> 學(xué)號1208010245</p><p><b>
2、 目錄</b></p><p> 1 設(shè)計內(nèi)容及要求1</p><p> 1.1 設(shè)計內(nèi)容1</p><p> 1.2 設(shè)計任務(wù)及要求1</p><p><b> 2概要設(shè)計2</b></p><p> 2.1 系統(tǒng)的功能簡介2</p><p&g
3、t; 2.2 總體程序框圖2</p><p> 3設(shè)計過程或程序代碼3</p><p> 3.1各個模塊的程序流程圖3</p><p> 3.2關(guān)鍵代碼加以分析4</p><p> 4設(shè)計結(jié)果與分析7</p><p><b> 5小結(jié)8</b></p><
4、;p><b> 致謝9</b></p><p><b> 參考文獻10</b></p><p><b> 附:源程序11</b></p><p><b> 設(shè)計內(nèi)容及要求</b></p><p><b> 1.1 設(shè)計內(nèi)容&
5、lt;/b></p><p> 《高射炮打飛機游戲》主要根據(jù)課程設(shè)計要求進行設(shè)計,并了解了游戲進行的流程,該系統(tǒng)功能主要包括以下模塊:</p><p> 游戲控制函數(shù),用來設(shè)置背景以及控制移動。</p><p> 設(shè)置是否繼續(xù)游戲函數(shù),當(dāng)玩家有事暫停時提示詢問是否繼續(xù)。</p><p> 輸出函數(shù),輸出該游戲一切用到的數(shù)據(jù)。&l
6、t;/p><p> 子彈移動函數(shù),控制子彈移動來打敵機以獲取得分。</p><p> 飛機移動函數(shù),利用左右上快捷鍵移動飛機打敵人。</p><p> 設(shè)置函數(shù),供玩家選擇敵機密度,飛行快慢,游戲界面的大小等數(shù)據(jù)。</p><p> 菜單函數(shù),顯示開始界面。</p><p> 1.2 設(shè)計任務(wù)及要求 </p
7、><p> 主要利用c語言函數(shù)語句設(shè)計開發(fā)一個小游戲,可以實現(xiàn)炮彈發(fā)射,飛機移動來打射敵機,繼而獲得勝利。地面對高空飛過的飛機進行有提前量的射擊,顯示射擊效果并記分。該程序包含了不同的功能,對原來的程序作出了很大的改進,用到的主要語句有g(shù)etche語句、for語句、while語句printf語句、switch語句等等,添加了顏色函數(shù),實現(xiàn)了諸多功能。</p><p> 要求:課程設(shè)計是為了
8、讓我們對所學(xué)知識有進一步的了解和掌握,能運用所學(xué)的C語言編寫簡單算法,簡單的C程序設(shè)計(順序程序、選擇結(jié)構(gòu)程序、循環(huán)控制程序),用數(shù)組存放數(shù)據(jù),并運用各種函數(shù)及函數(shù)知識來編寫一個完整的符合題目要求的程序,將程序調(diào)試出成功的結(jié)果。由此提高了我們運用C語言知識的能力,初步了解了軟件開發(fā)的一般方法和步驟。</p><p><b> 2概要設(shè)計</b></p><p>
9、2.1 系統(tǒng)的功能簡介</p><p> 該系統(tǒng)主要功能是通過c語言編寫一個射擊類的打飛機小游戲,可以通過鍵盤來進行游戲,操作方法是“a”“d”“w”或者“←”“↑”“→”來控制,擊中敵機可獲得積分,被敵機撞中死亡一次,每次游戲有3次生還機會,游戲結(jié)束后可選擇是否重新開始游戲。</p><p> 2.2 總體程序框圖</p><p> 圖2.1總體程序程序框圖
10、</p><p> 圖2.2游戲參數(shù)函數(shù)設(shè)計</p><p> 3設(shè)計過程或程序代碼</p><p> 3.1各個模塊的程序流程圖</p><p> 1)主函數(shù)程序流程圖及運行界面</p><p> a.主函數(shù)程序流程圖(N—S圖)</p><p> 圖3.1主函數(shù)流程圖</p
11、><p> 簡單說明:該功能主要給用戶顯示一個進入界面,告訴用戶有哪些功能能執(zhí)行。下面是顯示給用戶的界面。(如圖3.2)</p><p><b> b.主函數(shù)運行界面</b></p><p> 圖3.2 游戲界面設(shè)置</p><p> 3.2關(guān)鍵代碼加以分析</p><p><b>
12、 1)游戲控制函數(shù)</b></p><p> void run()</p><p> { system("color 2e");//設(shè)置背景顏色</p><p> int i=0,j=0;</p><p> scr[21][pl]=1; //我方飛機初始位置</p><p>
13、 scr[0][5]=3; </p><p> while(death<3) //限制死亡次數(shù)</p><p> { if(kbhit())</p><p> switch(getch())//控制左右移動</p><p> { case left:</p><p><b> case &
14、#39;a':</b></p><p> case 'A':if(pl>0)</p><p> scr[21][pl]=0,scr[21][--pl]=1;break;</p><p> case right:</p><p><b> case 'd':</
15、b></p><p> case 'D':if(pl<width-2)</p><p> scr[21][pl]=0,scr[21][++pl]=1;break;</p><p><b> case up:</b></p><p><b> case 'W':
16、</b></p><p> case 'w':scr[20][pl]=2;break;</p><p> case 27 :exit(0);break;</p><p><b> }</b></p><p> if(++j%density==0)//控制生產(chǎn)敵機的速度</p>
17、;<p><b> { j=0;</b></p><p> srand(time(NULL));//產(chǎn)生隨機數(shù)</p><p> scr[0][rand()%width]=3;//生成隨機敵方飛機</p><p><b> }</b></p><p> if(++i%spee
18、d==0)//控制敵機移動速度,相對于子彈移動速度</p><p> movepla(scr);//飛機移動</p><p> movebul(scr);//子彈移動</p><p> print(scr);//繪制游戲畫面</p><p><b> } </b></p><p> 本段
19、函數(shù)是對整個游戲進行的一個控制,以確保程序能供用戶使用。</p><p> 2)設(shè)置游戲是否繼續(xù)</p><p><b> void yn()</b></p><p> { system("cls");</p><p> system("color 2e");</p&
20、gt;<p> printf("\n");</p><p> printf("\n");</p><p> printf("\t\t\t\t *****GAME OVER*****\n\a");</p><p> printf("\n");</p>&
21、lt;p> printf("\n");</p><p> printf("\t\t *****游***戲***結(jié)***束***** \n\n\n");</p><p> printf("\t\t\t按y鍵繼續(xù)游戲,n鍵退出游戲(y/n)?\n");</p><p> prin
22、tf("\t\t\t");</p><p> switch(getch())//提示是否要繼續(xù)游戲</p><p> { case 'y':</p><p> case 'Y':death=0,score=0,run();break;</p><p><b> case &
23、#39;n':</b></p><p> case 'N':break;</p><p> default :exit(0);break;</p><p><b> }</b></p><p><b> }</b></p><p>
24、<b> 圖3.3 詢問設(shè)置</b></p><p> 當(dāng)游戲被暫停時,程序不知道用戶的意圖,故寫此程序來詢問是否繼續(xù)游戲,以防游戲結(jié)束銷毀了正在進行的游戲。</p><p><b> 3)子彈移動函數(shù)</b></p><p> void movebul(int a[][N])</p><p&g
25、t; { int i,j;</p><p> for(i=0;i<22;i++)</p><p> for(j=0;j<width;j++)</p><p> { if(i==0&&a[i][j]==2)</p><p> a[i][j]=0;</p><p> if(a[i
26、][j]==2)</p><p> { if(a[i-1][j]==3)//加分</p><p> { score+=1;</p><p> printf("\7");</p><p><b> }</b></p><p> a[i][j]=0,a[i-1][j]=2
27、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 在打飛機游戲中需要瞄準(zhǔn)再射擊這樣才能打中目標(biāo),通過這段程序來控制子彈移動,可以打中更多敵機,獲得高分。</p><
28、p><b> 4設(shè)計結(jié)果與分析</b></p><p> 當(dāng)把程序?qū)懞貌⑦M行調(diào)試時,并不是一帆風(fēng)順的,總會遇到很多在調(diào)試時遇到的錯誤。</p><p> 1)首先在定義函數(shù)時,不能輸入漢字。否則會程序會顯示錯誤。</p><p> 2)前后定義變量要統(tǒng)一。</p><p> 3)如果要調(diào)用添加函數(shù),修改函
29、數(shù),修改函數(shù),查找函數(shù),統(tǒng)計函數(shù)等要在主函數(shù)前面進行申明。否則會顯示警告。</p><p> 4)對背景顏色設(shè)置的時候,當(dāng)你輸入的顏色在內(nèi)存中不存在時,運行程序過后,系統(tǒng)會告訴你相應(yīng)的顏色符號常數(shù)及數(shù)值。</p><p> 5)如果程序在運行的過程中,對于一個循環(huán)語句,如果你返回的值始終是真的,那么程序?qū)⑦M如死循環(huán)。</p><p> 6)對應(yīng)該有花括弧的復(fù)合
30、語句,忘記加花括弧。</p><p> 7)所調(diào)用的函數(shù)在調(diào)用語句之后才定義,而又在調(diào)用前未加說明。</p><p> 圖4.1 游戲運行結(jié)果圖</p><p><b> 5小結(jié)</b></p><p> 通過本次試驗,使我對c語言有了更深一層次的了解,對getche語句、for語句、while語句、printf
31、語句、switch語句、顏色函數(shù)等等的了解及使用更加詳細了一些,明白了這些語句的用法,明確了c語言的使用環(huán)境,功能。C語言作為一個基礎(chǔ)性編程語言是我們在以后編程中不可或缺的語言,使用率肯定會進一步增高。掌握了c語言就相當(dāng)于掌握了一門技術(shù),同時c語言相對而言簡單一些,更容易理解。自己雖然對這個小游戲進行一部分的改造,但是我也感覺這只是其中的很很小的一部分,肯定會有更加強大的功能等待著我們?nèi)ジ纳啤?lt;/p><p>
32、 同時,我也發(fā)現(xiàn)了自己很多的不足,需要進一步加強這一方面的學(xué)習(xí),明白了自己的在哪一方面的欠缺,希望可以在以后的學(xué)習(xí)中更加徹底的彌補自己的不足,改善這種情況,</p><p> 也希望自己也可很容易的就可以輕松寫出一些小游戲代碼 ,我相信我也可以在以后的學(xué)習(xí)過程中逐步地掌握它,徹底的掌握它,使它成為自己手中的一把利劍。</p><p><b> 致謝</b><
33、/p><p> 在這次C語言課程設(shè)計中,我的老師和同學(xué)給了我及大的幫助。特別是我的指導(dǎo)老師孫淮寧老師,還有我的C語言任課老師徐寧老師。在此,我對他們表示感謝!感謝他們在我面對困難時給了我?guī)椭椭С?。也感謝那些給我?guī)椭乃型瑢W(xué)!</p><p><b> 參考文獻</b></p><p> [1] 譚浩強.C程序設(shè)計[M].清華大學(xué)出版社,2
34、005年,第三版.</p><p> [2] 譚浩強.C程序設(shè)計[M].清華大學(xué)出版社,1999年,第二版.</p><p> [3] 譚浩強,張基溫,唐永炎.C語言程序設(shè)計[M].高等教育出版社,1992年</p><p><b> 附錄:</b></p><p><b> 源程序</b>
35、;</p><p> #include <stdio.h></p><p> #include <conio.h></p><p> #include <stdlib.h></p><p> #include <time.h></p><p> #define
36、N 35</p><p> #define up 72</p><p> #define left 75</p><p> #define right 77</p><p> void run();//游戲控制函數(shù)</p><p> void yn();//設(shè)置是否繼續(xù)游戲函數(shù)</p><
37、p> void print(int [][N]);//輸出函數(shù)</p><p> void movebul(int [][N]);//子彈移動函數(shù)</p><p> void movepla(int [][N]);//敵機移動函數(shù)</p><p> void setting(void);//設(shè)置函數(shù)</p><p> void
38、 menu(void);//菜單函數(shù)</p><p> int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0;//全局變量:界面、我機初始位、界面寬度、敵機速度、敵機密度、得分、死亡</p><p> void main()</p><p><b> { menu();
39、</b></p><p><b> run();</b></p><p><b> }</b></p><p> void print(int a[][N])//輸出函數(shù)</p><p> { system("cls");</p><p&g
40、t;<b> int i,j;</b></p><p> for(i=0;i<22;i++)</p><p> { a[i][width-1]=4;</p><p> for(j=0;j<width;j++)</p><p> { if(a[i][j]==0)printf(" "
41、);</p><p> if(a[i][j]==1)printf("\5");//輸出我機的符號</p><p> if(a[i][j]==2)printf("^");//子彈</p><p> if(a[i][j]==3)printf("\3"); //輸出敵機符號</p><p
42、> if(a[i][j]==4)printf("\2");</p><p> if(i==1&&j==width-1)printf("您成功殺敵:%d 架",score);//右上角顯示得分</p><p> if(i==2&&j==width-1)</p><p> printf
43、("設(shè)置:Esc");</p><p> if(i==4&&j==width-1)printf("您已經(jīng)死亡了:%d 次",death);//右上角顯示死亡次數(shù)</p><p> if(i==9&&j==width-1)printf(" 你還剩余 %d 條命!",3-death);</p
44、><p> if(i==18&&j==width-1)</p><p> printf("制作人:張曉依");</p><p> if(i==19&&j==width-1)</p><p> printf("班級:計科2班");</p><p>
45、; if(i==20&&j==width-1)</p><p> printf("學(xué) 號:1208010245");</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b&
46、gt;</p><p><b> }</b></p><p> void movebul(int a[][N])</p><p> { int i,j;</p><p> for(i=0;i<22;i++)</p><p> for(j=0;j<width;j++)</
47、p><p> { if(i==0&&a[i][j]==2)</p><p> a[i][j]=0;</p><p> if(a[i][j]==2)</p><p> { if(a[i-1][j]==3)//加分</p><p> { score+=1;</p><p>
48、printf("\7");</p><p><b> }</b></p><p> a[i][j]=0,a[i-1][j]=2;</p><p><b> }</b></p><p><b> }</b></p><p>&l
49、t;b> }</b></p><p> void movepla(int a[][N])</p><p><b> {int i,j;</b></p><p> for(i=21;i>=0;i--)//從最后一行往上是為了避免把敵機直接沖出數(shù)組。</p><p> for(j=0;j&l
50、t;width;j++)</p><p> {if(i==21&&a[i][j]==3)</p><p> a[i][j]=0;//消除敵機,在最低層</p><p> if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敵機移動</p><p><b> }</b><
51、;/p><p> if(a[20][pl]==3&&a[21][pl]==1)death++;//死亡</p><p><b> }</b></p><p><b> void yn()</b></p><p> { system("cls");</p&
52、gt;<p> system("color 2e");</p><p> printf("\n");</p><p> printf("\n");</p><p> printf("\t\t\t\t *****GAME OVER*****\n\a");</p&
53、gt;<p> printf("\n");</p><p> printf("\n");</p><p> printf("\t\t *****游***戲***結(jié)***束***** \n\n\n");</p><p> printf("\t\t\t按y鍵繼續(xù)游戲,n鍵退出游戲
54、(y/n)?\n");</p><p> printf("\t\t\t");</p><p> switch(getch())//提示是否要繼續(xù)游戲</p><p> { case 'y':</p><p> case 'Y':death=0,score=0,run();b
55、reak;</p><p><b> case 'n':</b></p><p> case 'N':break;</p><p> default :exit(0);break;</p><p><b> }</b></p><p>
56、<b> }</b></p><p> void setting(void)</p><p> { int sw=0,i,j;</p><p> system("cls");</p><p><b> do</b></p><p><b&g
57、t; { sw=0;</b></p><p> printf("\n 游戲界面的大?。?.大2.小>> ");</p><p> switch(getche())</p><p> { case '1':width=34;break;</p><p> case '
58、2':width=24;;break;</p><p> default:printf("\n 錯誤,請重新選擇...\n");</p><p><b> sw=1;</b></p><p><b> }</b></p><p> }while(sw);</
59、p><p><b> do</b></p><p><b> { sw=0;</b></p><p> printf("\n 請選擇敵機密度:1.大2.中3.小>> ");</p><p> switch(getche())</p><p>
60、; { case '0':density=10;break;</p><p> case '1':density=20;break;</p><p> case '2':density=30;break;</p><p> case '3':density=40;break;</p>
61、<p> default:printf("\n 錯誤,請重新選擇...\n");</p><p><b> sw=1;</b></p><p><b> }</b></p><p> }while(sw);</p><p><b> do<
62、/b></p><p><b> { sw=0;</b></p><p> printf("\n 敵機的飛行速度:1.快2.中3.慢>> ");</p><p> switch(getche())</p><p> { case '1':speed=2;bre
63、ak;</p><p> case '2':speed=3;break;</p><p> case '3':speed=4;break;</p><p> default:printf("\n 錯誤,請重新選擇...\n");</p><p><b> sw=1;<
64、/b></p><p><b> }</b></p><p> }while(sw);</p><p> for(i=0;i<22;i++)</p><p> for(j=0;j<45;j++)</p><p> scr[i][j]=0;</p><
65、p> scr[21][pl=9]=1;</p><p> printf("\n 按任意鍵保存...");</p><p><b> getch();</b></p><p><b> }</b></p><p> void run()</p><
66、;p> { system("color 2e");//設(shè)置背景顏色</p><p> int i=0,j=0;</p><p> scr[21][pl]=1; //我方飛機初始位置</p><p> scr[0][5]=3; </p><p> while(death<3) //限制死亡次數(shù)<
67、;/p><p> { if(kbhit())</p><p> switch(getch())//控制左右移動</p><p> { case left:</p><p><b> case 'a':</b></p><p> case 'A':if(pl
68、>0)</p><p> scr[21][pl]=0,scr[21][--pl]=1;break;</p><p> case right:</p><p><b> case 'd':</b></p><p> case 'D':if(pl<width-2)<
69、/p><p> scr[21][pl]=0,scr[21][++pl]=1;break;</p><p><b> case up:</b></p><p><b> case 'W':</b></p><p> case 'w':scr[20][pl]=2;br
70、eak;</p><p> case 27 :exit(0);break;</p><p><b> }</b></p><p> if(++j%density==0)//控制生產(chǎn)敵機的速度</p><p><b> { j=0;</b></p><p> sra
71、nd(time(NULL));//產(chǎn)生隨機數(shù)</p><p> scr[0][rand()%width]=3;//生成隨機敵方飛機</p><p><b> }</b></p><p> if(++i%speed==0)//控制敵機移動速度,相對于子彈移動速度</p><p> movepla(scr);//飛機
72、移動</p><p> movebul(scr);//子彈移動</p><p> print(scr);//繪制游戲畫面</p><p><b> } </b></p><p><b> yn();</b></p><p><b> }</b>
73、</p><p> void menu(void)</p><p> { system("color 2e");//設(shè)置背景顏色</p><p> printf("說明:按A D 控制我機左右飛行,W 發(fā)射子彈\n 設(shè)置:請按Esc\n 開始游戲:任意鍵");</p><p> if(getc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計報告--子彈打飛機
- 高射炮打蚊子
- 打飛機小游戲-java課程設(shè)計
- android-打飛機游戲-課程設(shè)計論文
- c++課程設(shè)計-教學(xué)游戲
- c++課程設(shè)計——飛機訂票系統(tǒng)
- c++課程設(shè)計拼圖游戲
- c++課程設(shè)計報告--飛機訂票系統(tǒng)
- c++課程設(shè)計報告---飛機訂票系統(tǒng)
- c++課程設(shè)計報告--坦克游戲
- c++課程設(shè)計報告---飛機訂票系統(tǒng)
- c++課程設(shè)計報告--猜數(shù)游戲
- c++課程設(shè)計報告飛機訂票管理系統(tǒng)
- c++剪刀石頭布游戲課程設(shè)計
- c++剪刀石頭布游戲課程設(shè)計
- 猜單詞游戲c++課程設(shè)計報告
- c++課程設(shè)計---吃豆子游戲程序
- 基于紅外技術(shù)的高射炮發(fā)射過程炮管溫度測量.pdf
- c++猜單詞課程設(shè)計--——猜單詞游戲
- JAVA打飛機游戲畢業(yè)設(shè)計.doc
評論
0/150
提交評論