我的位置: 首頁 > 學習專區(qū) > .NET技術(shù) > C語言編寫簡單2D游戲

C語言編寫簡單2D游戲

2013-06-06 08:44:23
來源:
[導讀] 為了實現(xiàn)鼠標控制飛機飛行,當鼠標一移動,獲取鼠標X的坐標,在消息處理函數(shù)中加入下列代碼:x = LOWORD(lParam);如果鼠標的X坐標大于窗

為了實現(xiàn)鼠標控制飛機飛行,當鼠標一移動,獲取鼠標X的坐標,在消息處理函數(shù)中加入下列代碼:

x = LOWORD(lParam);

如果鼠標的X坐標大于窗口臨界值,則X等于臨界值,若鼠標的X坐標小于0,則將鼠標X設(shè)定為0,加入下列代碼:

if(x > 730)

x = 730;

else

if(x < 0)

x = 0;

同理,獲取鼠標的Y坐標,加入如下代碼:

y = HIWORD(lParam);

if(y > 480)

y = 480;

else if(y < 0)

y = 0;

判斷飛機的移動方向,使飛機的移動方向與鼠標的移動方向一致,即飛機跟隨著鼠標的移動而移動,并進行貼圖,加入代碼如下:

if(nowX < x)

{

nowX += 20;

if(nowX > x)

nowX = x;

}

else

{

nowX -=20;

if(nowX < x)

nowX = x;

}

if(nowY < y)

{

nowY += 20;

if(nowY > y)

nowY = y;

}

else

{

nowY -= 20;

if(nowY < y)

nowY = y;

}

SelectObject(bufdc,plane);

BitBlt(mdc,nowX,nowY,70,70,bufdc,0,70,SRCAND);

BitBlt(mdc,nowX,nowY,70,70,bufdc,0,0,SRCPAINT);

3.2.2計算機角色動畫

為了實現(xiàn)游戲畫面的透明效果,加載游戲的石頭位圖(”Stone.bmp”)

Stone=(HBITMAP)LoadImage(NULL,"Stone.bmp",IMAGE_BITMAP,100,200,LR_LOADFROMFILE);

其次前景位圖的屏蔽圖部分與背景圖作”AND”運算,加入下列代碼:

SelectObject(bufdc,Stone);

BitBlt(mdc,Sx,Sy,100,100,bufdc,0,100,SRCAND);

將”AND”運算的結(jié)果與前景圖作”OR”運算,加入下列代碼:

BitBlt(mdc,Sx,Sy,100,100,bufdc,0,0,SRCPAINT);

為了實現(xiàn)游戲石頭下落效果,定義一個速度VY,并計算Y軸坐標,并不停的往下貼,加入如下代碼:

vy=15;

Sy += vy;

為了實現(xiàn)多個石頭下落效果,定義石頭坐標Sx1,Sx2,Sx3,Sy1,Sy2,Sy3,分別表示四個石頭下落的坐標值,通過如上代碼所示加載、實現(xiàn)透明并掉落。

3.2.3星際迷航背景動畫

為了實現(xiàn)背景動畫的滾動效果,設(shè)定一個間隔時間tPre以及圖片寬度W代碼實現(xiàn)如下

BitBlt(hdc,0,0,800,600,mdc,0,0,SRCCOPY);

tPre = GetTickCount();

w +=10;

if(w>=600)

w = 0;

其中tPre獲取時間,圖片的隨著時間Y坐標不斷增加10,如果當整個圖片(圖片大小為800*600)>600的話,則將圖片重新滾動一遍。

4、物理現(xiàn)象

為了實現(xiàn)整個游戲的碰撞效果的物理現(xiàn)象,首先加載游戲的石頭位圖

baozha0=(HBITMAP)LoadImage(NULL,"baozha0.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);

baozha1=(HBITMAP)LoadImage(NULL,"baozha1.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);

baozha2=(HBITMAP)LoadImage(NULL,"baozha2.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);

baozha3=(HBITMAP)LoadImage(NULL,"baozha3.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);

對于碰撞效果,采取臨界值碰撞來實現(xiàn),Sx1和Sy1為石頭1的坐標,X和Y為鼠標的坐標,當飛機的坐標和石頭的坐標達到臨界值的時候,產(chǎn)生碰撞,相關(guān)代碼如下:

SelectObject(bufdc,baozha0);

{

if(((Sx1x))&&((Sy1y)))

{

BitBlt(mdc,Sx1-50,Sy1-70,316,316,bufdc,0,316,SRCAND);

BitBlt(mdc,Sx1-50,Sy1-70,316,316,bufdc,0,0,SRCPAINT);

DeleteDC(bufdc);

}}

5、實驗結(jié)果及分析

本實驗實現(xiàn)了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現(xiàn)象設(shè)計原理。優(yōu)點:初步實現(xiàn)了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現(xiàn)象設(shè)計基本功能。缺點:因時間及數(shù)據(jù)結(jié)構(gòu)算法沒有學好所以未實現(xiàn)子彈與石頭碰撞效果,爆炸效果不逼真,貼圖效果不好。

6、結(jié)論

這個程序的架構(gòu)仍顯笨拙,有很多不如意的地方,但是實現(xiàn)了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現(xiàn)象設(shè)計原理。雖然整個游戲不能像紅白機一樣內(nèi)容豐富,但是以后會把它設(shè)計得簡潔、優(yōu)雅,以至于可以把它做成一個像《雷電》一樣精彩的飛行射擊游戲。

深圳北大青鳥

評論
熱點專題
>>
相關(guān)文章推薦
>>
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
免费国产精品专区 | 日本一卡精品视频免费 | 亚洲成a人片在线不卡一二三区 | 在线看日本中文字幕不卡 | 亚洲欧美中文不卡 | 日韩r级视频在线观看 |