- 相關(guān)推薦
C語言編寫簡單2D游戲的方法
只要厄運打不垮信念,希望之光就會驅(qū)散絕望之云。以下是小編為大家搜索整理的C語言編寫簡單2D游戲的方法,希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
為了實現(xiàn)鼠標(biāo)控制飛機(jī)飛行,當(dāng)鼠標(biāo)一移動,獲取鼠標(biāo)X的坐標(biāo),在消息處理函數(shù)中加入下列代碼:
x = LOWORD(lParam);
如果鼠標(biāo)的X坐標(biāo)大于窗口臨界值,則X等于臨界值,若鼠標(biāo)的X坐標(biāo)小于0,則將鼠標(biāo)X設(shè)定為0,加入下列代碼:
if(x > 730)
x = 730;
else
if(x < 0)
x = 0;
同理,獲取鼠標(biāo)的Y坐標(biāo),加入如下代碼:
y = HIWORD(lParam);
if(y > 480)
y = 480;
else if(y < 0)
y = 0;
判斷飛機(jī)的移動方向,使飛機(jī)的移動方向與鼠標(biāo)的移動方向一致,即飛機(jī)跟隨著鼠標(biāo)的移動而移動,并進(jìn)行貼圖,加入代碼如下:
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計算機(jī)角色動畫
為了實現(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軸坐標(biāo),并不停的往下貼,加入如下代碼:
vy=15;
Sy += vy;
為了實現(xiàn)多個石頭下落效果,定義石頭坐標(biāo)Sx1,Sx2,Sx3,Sy1,Sy2,Sy3,分別表示四個石頭下落的坐標(biāo)值,通過如上代碼所示加載、實現(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坐標(biāo)不斷增加10,如果當(dāng)整個圖片(圖片大小為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的坐標(biāo),X和Y為鼠標(biāo)的坐標(biāo),當(dāng)飛機(jī)的坐標(biāo)和石頭的坐標(biāo)達(dá)到臨界值的時候,產(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)算法沒有學(xué)好所以未實現(xiàn)子彈與石頭碰撞效果,爆炸效果不逼真,貼圖效果不好。
6、結(jié)論
這個程序的架構(gòu)仍顯笨拙,有很多不如意的地方,但是實現(xiàn)了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現(xiàn)象設(shè)計原理。雖然整個游戲不能像紅白機(jī)一樣內(nèi)容豐富,但是以后會把它設(shè)計得簡潔、優(yōu)雅,以至于可以把它做成一個像《雷電》一樣精彩的飛行射擊游戲。
【C語言編寫簡單2D游戲的方法】相關(guān)文章:
C語言中的鏈接編寫05-16
C語言編寫程序的優(yōu)點04-26
用C-FREE編寫的C語言程序解析04-08
怎么編寫高效簡潔的C語言代碼05-22
學(xué)習(xí)C語言的方法05-23
C語言編寫程序的優(yōu)點有哪些06-26
JAVA語言編寫硬件接口的方法05-26
C語言的冒泡排序方法04-06