c語言游戲講解_第1頁
c語言游戲講解_第2頁
c語言游戲講解_第3頁
c語言游戲講解_第4頁
c語言游戲講解_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1: C語言游戲設(shè)計1.1 :課程設(shè)計目標(biāo)c語言編寫一款打飛機(jī)游戲,掌握函數(shù)的使用和編程的整體思路。1.2 :整體設(shè)計思路總體設(shè)想:運行游戲時顯示游戲的界面,允許用戶選擇個性化設(shè)置, A、D、W分別控制飛機(jī)的左右移動和發(fā)射子彈,不同的敵機(jī)飛行和攻擊,并 不時伴有獎勵。游行運行時播放音效,同時記錄飛機(jī)的生命和得分,達(dá)到一 定的分?jǐn)?shù)進(jìn)入下一關(guān)。需要構(gòu)建的函數(shù):位圖調(diào)用模塊、界面輸出函數(shù)、主菜單函數(shù)、設(shè)置函數(shù)、速度選擇函數(shù)、游戲控制函數(shù)、敵機(jī)移動函數(shù)、子彈移動函數(shù)、boss函數(shù)、計時函數(shù)1.3 :需調(diào)用的頭文件:include /常規(guī)庫頭文件include /include/include/incl

2、ude /windows控制臺輸入輸出流頭文件系統(tǒng)函數(shù)頭文件時間函數(shù)頭文件函數(shù)庫include /導(dǎo)入聲音頭文件pragma comment(lib,winmm.lib )/導(dǎo)入聲音頭文件庫1.4:游戲過程模擬:記錄飛機(jī)飛行時間和Menu菜單 函數(shù)Mpov epall 敵彈Move pal 敵機(jī) 函數(shù)Boss函數(shù)Bmp 位圖 調(diào)用Set 設(shè)置 函數(shù)Moveb ul 子彈速 度11Print界面 輸出Indelay速控函 數(shù)IDelay 游控 函數(shù)飛機(jī)的移動,子彈的發(fā)射,音樂的播放,信息的記錄1,5 :顯示效果如下圖所示Update計時函數(shù)游戲界面初始設(shè)置界面:呼rE:hahaDebughaha

3、, eie游戲說明: 飛行控制:A向左D向右 上發(fā)射鉀Esc:開始游戲游戲時間為1噴鐘本游貸由王期坐改編雙擊回車鍵直凝進(jìn)入游戲:.2算法實現(xiàn)2.1 需要了解的知識點:Main函數(shù)和menu函數(shù)編寫比較順利,在bmp函數(shù)中遇到如何顯示窗口和調(diào)用圖 片的問題,看了一些例子和網(wǎng)上的資料,逐漸掌握了一下知識點:O 設(shè)備上下文:設(shè)備,顯示器,打印機(jī),數(shù)碼相機(jī),掃描儀這些類似的設(shè)備上下文,就是上面設(shè)備的相關(guān)信息,比如屏幕分辨率等HANDLE通用句柄,實際上是一個指向指針的指針,在Windows操作系統(tǒng)中, 內(nèi)存操作器經(jīng)常移動對象,來滿足各種程序的內(nèi)存需要,為了解決尋找對象問題, 內(nèi)存管理器開辟出一塊專門的

4、內(nèi)存儲存空間, 把移動后的地址存儲在該空間,這 樣就可以通過該地址間接尋找到對象。(3 HDC設(shè)備描述句柄,實現(xiàn)對窗口操作區(qū)域的 GDI (圖形設(shè)備接口,負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Window綱序的圖形輸出)操作,如畫線、 寫文本、繪畫制圖等。(4 BITMAP用于處理有像素數(shù)據(jù)定義的圖像的對象(5 GetDC(0)檢索特定的客戶區(qū)域或整個屏幕的宣示設(shè)備上下文環(huán)境的句 柄,以后可以使用該句柄在設(shè)備上下文環(huán)境中繪圖。 Loadimage 裝載圖標(biāo)、光標(biāo)或位圖。HANDLELoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,i

5、nt cxDesired,int CyDesired,UINT fuLoad), hinst處理包含被撞在圖像模塊的實例,裝載oem圖像時參數(shù)設(shè)為0;name f旨向裝載圖像資源的名稱;type指定被裝備圖像類型cxdesired和cyDesired指定圖標(biāo)的寬度和高度,如果參數(shù)為0,則使用目前資源的高度。Fuload -LR_LOADFROMFILE據(jù)參數(shù)IpszName的值裝載圖像。若標(biāo)記未被給定, IpszName的值為資源名稱。CreateCompatibleDC該函數(shù)創(chuàng)建一個與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(D。通過GetDc()獲取的HDCft接與相關(guān)設(shè)備溝通,而本函數(shù)創(chuàng)建的DC

6、 則是與內(nèi)存中的一個表面相關(guān)聯(lián)。C8 SelectObject計算機(jī)編程語言函數(shù),該函數(shù)選擇一對象到指定的設(shè)備上下文環(huán)境中,該新對象替換先前的相同類型的對象。(9 GetObject函數(shù)功能:該函數(shù)得到指定圖形對象的信息,根據(jù)圖形對象, 函數(shù)把填滿的或結(jié)構(gòu),或表項(用于邏輯調(diào)色板)數(shù)目放入一個指定的緩沖區(qū)。10 BitBlt該函數(shù)對指定的源設(shè)備環(huán)境區(qū)域中的像素進(jìn)行位塊( bit_block )轉(zhuǎn)換,以傳送到目標(biāo)設(shè)備環(huán)境. ReleaseDC函數(shù)釋放設(shè)備上下文環(huán)境(D。供其他應(yīng)用程序使用。函數(shù)的效果與設(shè)備上下文環(huán)境類有關(guān)。它只釋放公用的和設(shè)備上下文環(huán)境,對于類或私有的則無效。吟 DeleteDC

7、 :該函數(shù)刪除指定的設(shè)備上下文環(huán)境.13 DeleteObject該函數(shù)刪除一個邏輯筆、畫筆、字體、位圖、區(qū)域或者調(diào)色板,釋放所有與該對象有關(guān)的系統(tǒng)資源,在對象被刪除之后,指定的句柄也就失效了 system(mode con cols=48 lines=25)表示窗 口寬度和高度15 system( color OA )color后面的0是背景色代號,A是前景色代號。各顏色代碼如下:04色1 =藍(lán)色2=綠色3=湖藍(lán)色4=紅色5=紫色6=黃色7= 白色8=灰色9=淡藍(lán)色A=淡綠色B淡淺綠色,淡紅色D=淡紫色E=淡黃色F= 亮白色2.2代碼講解:/windows#include/#include/

8、#include/#include/#include常規(guī)庫頭文件控制臺輸入輸出流頭文件 系統(tǒng)函數(shù)頭文件時間函數(shù)頭文件函數(shù)庫宏計時函數(shù)游戲控速函數(shù) 速度選擇函數(shù) 界面輸出函數(shù) 子彈移動函數(shù)子彈移動函數(shù)敵機(jī)移動函數(shù) 敵機(jī)移動函數(shù)模塊位圖調(diào)用模塊 設(shè)置函數(shù) 主菜單函數(shù)#include /導(dǎo)入聲音頭文件#pragma comment(lib,winmm.lib )/導(dǎo)入聲音頭文件庫#define N 50/void Update(void);/void Delay(void); / void InDelay(void);/void print(int N);/ void movebul(int N);

9、 /void movebul1(int N); /BOSSvoid movepla(int N); /void movepla1(int N); /void boss(int N);/bossvoid bmp(void);/void set(void); /void menu(void); / intscr23N=0,pl=20,bl=1,width=40,speed=4,density=30,score=0,death=7 ,k1=0,k2=7;/ 全局變量定義|int minute=0,second=0,p=0,k3=0;long int max=0;/時間結(jié)構(gòu)體struct clocki

10、nt minute;int second;typedef struct clock CLOCK;/計時模塊void Update(void) Ip+;if(p=7)_p=0;second+;)if(second=60)(second=0;minute+;)k3=minute;if(minute=15) |minute=0;)/游戲控速模塊void Delay(void)long t;for(t=0;t=max;t+) )/速度選擇函數(shù)void InDelay(void) Iint sw=0;system(cls);do Eprintf( 請游戲的速度:0-10n);switch (getch(

11、)case0:max=0;break;case1:max=1000;break;case2:max=10000;break;case3:max=100000;break;case4:max=1000000;break;case5:max=10000000;break;case6:max=100000000;break;case7:max=1000000000;break;case8:max=10000000000;break;case9:max=100000000000;break;case10:max=500000000000;break;default:printf(輸入錯誤,請重新選擇)

12、;sw=1;)while(sw);) 1,/界面輸出模塊void print(int aN)(int i,j;system(cls);for(i=0;i23;i+)(for(j=-1;jwidth;j+)(ai+1width-1=4;/ai-1=4;a0j-1=5;a22j=6;if(aij=0)printf( );/清空if(aij=1)printf(%C%c%C”,17,87,16);/角色if(aij=2)printf(%c,43);/子彈if(aij=3)printf(%c,3);/敵機(jī) 1if(aij=7)printf(%c,15);/敵機(jī) 2if(aij=8)printf(%c,1

13、4);/BOSSif(aij=9)printf(%c,31);/BOSS/if(aij=4)printf(|);/if(aij=5)printf(%c,20);/if(aij=6)printf(-);/攻擊垂直邊界 上水平邊界下水平邊界if(i=1&j=width-1)printf( if(i=3&j=width-1)printf( if(i=5&j=width-1)printf( if(i=7&j=width-1)printf( if(i=9&j=width-1)printf( if(i=12&j=width-1)printf( if(i=13&j=width-1)printf( if(i=

14、14&j=width-1)printf( if(i=15&j=width-1)printf( if(i=16&j=width-1)printf(得分:%d,score);生命:d,death);設(shè)置:S鍵)速度:V鍵)時間:2d:%2d,minute,second) 控制:);W);A D);5);1 3);printf(n);/BOSS攻擊模塊/子彈攻擊模塊void movebul(int aN) (int i,j;for(i=0;i21;i+)for(j=0;j=0;i-)for(j=0;j=0;i-)for(j=0;jwidth;j+)if(i=21&aij=7)aij=0;if(aij

15、=7)aij=0,ai+1j=7;if(a21pl=1&a20pl=7) death -=3; k=death; I/橫向獎勵模塊void boss(int aN)int i,j;for(i=0;i=0;j-)(if(i=21&aij=8)aij=0;if(aij=8)aij=0,aij+1=8; |/位圖調(diào)用模塊void bmp(void)int argc, char* argv(HANDLE h;HDC dc1,dc2;BITMAP bmp;dc1=GetDC(0);/ 得到屏幕 DC h=LoadImage(NULL,E:hahamusic1.bmp,IMAGE BITMAP,0,0,L

16、R LOADFRO MFILE);dc2=CreateCompatibleDC(dc1);SelectObject(dc2,h);GetObject(h,sizeof(bmp),&bmp);BitBlt(dc1,100,100,bmp.bmWidth=2080,bmp.bmHeight=1080,dc2,0,0,SRCCOPY);Sleep(20);ReleaseDC(0,dc1);DeleteDC(dc2);DeleteObject(h);getch();/游戲設(shè)置模塊void set(void) int sw=0,i,j;system(cls);do Esw=0;printf(請游戲界面的

17、大?。?.小2.大nn);switch (getch() case1:width=200;pl=200;break;case2:width=20;pl=40;break;default:printf(輸入錯誤,請重新選擇);sw=1;10while(sw);do(sw=0;printf(請選擇敵機(jī)密度:1.大2.中3.小nn);switch (getch() |case1:density=10;break;case2:density=20;break;case3:density=30;break;default:printf(錯,請重新選擇);sw=1;while(sw);dosw=0;pri

18、ntf(敵機(jī)的飛彳T速度:1.快2.中3.慢nn);switch (getch() |case1:speed=2;break;case2:speed=3;break;case3:speed=4;break;default:printf(錯誤,請重新選擇);sw=1;while(sw);for(i=0;i22;i+)for(j=0;j:,15);if(getch()=s|getch()=S) set(); I/主函數(shù)void main() I/全局變量初始化long int i=0,j=0;menu();system(mode con cols=54 lines=25); /屏幕大小控制syst

19、em(color 0A);/屏幕顏色更改scr21pl=1;scr00=3;/關(guān)卡一背景音樂PlaySound(E:hahamusicgame_music.mp3, NULL, SND_ASYNC | SND_LOOP | SND_FILENAME); /方式一,不能同時播放兩首歌曲mciSendString(open E:hahamusicgame music.mp3 alias MySong,NULL,0,NULL);mciSendString(play MySong,NULL,0,NULL);/方式二,課同時播放兩首歌/關(guān)卡一/while(1) 12 int second=0,minut

20、e=0;if(kbhit()/判斷鍵盤當(dāng)前是否有輸入,有則返回該值,無則返回0switch(getch()(casea:caseA:case 49:if(pl0)scr21pl=0,scr21-pl=1;break;cased:caseD:case 51:if(pl=100) mciSendString(close MySong,NULL,0,NULL);PlaySound(E:hahamusic1761.mp3, NULL, SND_FILENAME | SND_ASYNC);printf( 恭喜你闖過第1關(guān):按任意鍵繼續(xù));getch();getch();break; if(k2=0) p

21、rintf(對不起,游戲結(jié)束:按任意鍵結(jié)束);getch();getch();break; if(k3=10) printf(對不起,游戲結(jié)束:按任意鍵結(jié)束);getch();getch();break;/關(guān)卡二/if(k1=100)/全局變量初始化k1=0;score=0;death=7;minute=0;second=0;width=40;density=20;speed=3;/關(guān)卡二背景音樂mciSendString(open E:hahamusicgame music.mp3 alias MySong,NULL,0,NULL);mciSendString(play MySong,NUL

22、L,0,NULL);while(1) if(kbhit()/判斷鍵盤當(dāng)前是否有輸入,有則返回該值,無則返回0switch(getch() Icasea:case 49:if(pl0)scr21pl=0,scr21-pl=1;break;cased:case 51:if(pl=500) mciSendString(close MySong,NULL,0,NULL);PlaySound(C:gameresourcesounds9.wav”, NULL, SND_FILENAME | SND_ASYNC);printf( );getch();getch();break;if(k2=0) printf

23、( );getch();getch();break;if(k3=10) printf( );getch();getch();break;恭喜你闖過第2關(guān):按任意鍵繼續(xù)對不起,游戲結(jié)束:接任意鍵結(jié)束對不起,游戲結(jié)束:接任意鍵結(jié)束/關(guān)卡三/ / if(k1=500)15/全局變量初始化k1=0;score=0;death=7; k1=0;minute=0;second=0;width=20;speed=2;/關(guān)卡三背景音樂mciSendString(open C:gameresourcesounds1.mp3 aliasMySong,NULL,0,NULL);mciSendString(play MySong,NULL,0,NULL);while(1)if(kbhit()/判斷鍵盤當(dāng)前是否有輸入,有則返回該值,無則返回0switch(getch()casea:case 49:if(pl0)scr21pl=0,scr21-pl=1;break;cased:case 51:if(pl=1000) mciSendString(close MySong,NULL,0,NULL);PlaySound(E:hahamusic1761.wav

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論