C語言編寫簡單2D遊戲的方法
只要厄運打不垮信念,希望之光就會驅散絕望之雲。以下是小編為大家搜索整理的C語言編寫簡單2D遊戲的方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!
為了實現鼠標控制飛機飛行,當鼠標一移動,獲取鼠標X的座標,在消息處理函數中加入下列代碼:
x = LOWORD(lParam);
如果鼠標的X座標大於窗口臨界值,則X等於臨界值,若鼠標的X座標小於0,則將鼠標X設定為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計算機角色動畫
為了實現遊戲畫面的透明效果,加載遊戲的石頭位圖(”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”運算的結果與前景圖作”OR”運算,加入下列代碼:
BitBlt(mdc,Sx,Sy,100,100,bufdc,0,0,SRCPAINT);
為了實現遊戲石頭下落效果,定義一個速度VY,並計算Y軸座標,並不停的往下貼,加入如下代碼:
vy=15;
Sy += vy;
為了實現多個石頭下落效果,定義石頭座標Sx1,Sx2,Sx3,Sy1,Sy2,Sy3,分別表示四個石頭下落的座標值,通過如上代碼所示加載、實現透明並掉落。
3.2.3星際迷航背景動畫
為了實現背景動畫的滾動效果,設定一個間隔時間tPre以及圖片寬度W代碼實現如下
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、物理現象
為了實現整個遊戲的碰撞效果的物理現象,首先加載遊戲的石頭位圖
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);
對於碰撞效果,採取臨界值碰撞來實現,Sx1和Sy1為石頭1的座標,X和Y為鼠標的座標,當飛機的座標和石頭的座標達到臨界值的時候,產生碰撞,相關代碼如下:
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、實驗結果及分析
本實驗實現了遊戲畫面繪製貼圖、遊戲輸入消息處理、遊戲動畫技巧、遊戲物理現象設計原理。優點:初步實現了遊戲畫面繪製貼圖、遊戲輸入消息處理、遊戲動畫技巧、遊戲物理現象設計基本功能。缺點:因時間及數據結構算法沒有學好所以未實現子彈與石頭碰撞效果,爆炸效果不逼真,貼圖效果不好。
6、結論
這個程序的架構仍顯笨拙,有很多不如意的地方,但是實現了遊戲畫面繪製貼圖、遊戲輸入消息處理、遊戲動畫技巧、遊戲物理現象設計原理。雖然整個遊戲不能像紅白機一樣內容豐富,但是以後會把它設計得簡潔、優雅,以至於可以把它做成一個像《雷電》一樣精彩的飛行射擊遊戲。
-
淺談高職C語言課程的教學分析與設計
C語言作為學院網絡技術專業的人門課程,旨在通過鍛鍊學生的邏輯思維,牆養學生在職業崗位中實際應用的能力.目前,該專業的學生畢業後主要從事網站開發和網絡管理等方面的工作,而在這些領域幾乎都以C語言作為應用的開發工具.但從歷年教學實踐來看,教師往往付出的精力多...
-
C++ cin輸入流詳解
標準輸入流是從標準輸入設備(鍵盤)流向程序的數據。在頭文件iostream.h中定義了cin、cout、cerr、clog4個流對象,cin是輸入流,cout、cerr、clog是輸出流。下面是小編為大家整理的C++cin輸入流詳解,歡迎參考~cin是istream類的對象,它從標準輸入設備(鍵盤)獲取數據,程...
-
C語言scanf函數應用問題解答
C語言的輸入是由系統提供的庫函數完成的。scanf函數是C語言中最常用且功能最強的輸入函數,但該函數如使用不慎,就會出現錯誤或得不到預想的結果。以下結果都是基於VC++6.0運行環境。一、格式説明符和輸入項的三對應(類型、個數、順序)scanf函數格式中的格式説明(“%...
-
C語言的移位操作符使用方法
位移位運算符是將數據看成二進制數,對其進行向左或向右移動若干位的運算。位移位運算符分為左移和右移兩種,均為雙目運算符。第一運算對象是移位對象,第二個運算對象是所移的二進制位數。以下是小編為大家搜索整理的C語言的移位操作符使用方法,希望能給大家帶來幫...