只要厄運(yùn)打不垮信念,希望之光就會(huì)驅(qū)散絕望之云。以下是小編為大家搜索整理的C語(yǔ)言編寫(xiě)簡(jiǎn)單2D游戲的方法,希望能給大家?guī)?lái)幫助!更多精彩內(nèi)容請(qǐng)及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  為了實(shí)現(xiàn)鼠標(biāo)控制飛機(jī)飛行,當(dāng)鼠標(biāo)一移動(dòng),獲取鼠標(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ī)的移動(dòng)方向,使飛機(jī)的移動(dòng)方向與鼠標(biāo)的移動(dòng)方向一致,即飛機(jī)跟隨著鼠標(biāo)的移動(dòng)而移動(dòng),并進(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ì)算機(jī)角色動(dòng)畫(huà)

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

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

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

  SelectObject(bufdc,Stone);

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

  將”AND”運(yùn)算的結(jié)果與前景圖作”O(jiān)R”運(yùn)算,加入下列代碼:

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

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

  vy=15;

  Sy += vy;

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

  3.2.3星際迷航背景動(dòng)畫(huà)

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

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

  tPre = GetTickCount();

  w +=10;

  if(w>=600)

  w = 0;

  其中tPre獲取時(shí)間,圖片的隨著時(shí)間Y坐標(biāo)不斷增加10,如果當(dāng)整個(gè)圖片(圖片大小為800*600)>600的話(huà),則將圖片重新滾動(dòng)一遍。

  4、物理現(xiàn)象

  為了實(shí)現(xiàn)整個(gè)游戲的碰撞效果的物理現(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);

  對(duì)于碰撞效果,采取臨界值碰撞來(lái)實(shí)現(xiàn),Sx1和Sy1為石頭1的坐標(biāo),X和Y為鼠標(biāo)的坐標(biāo),當(dāng)飛機(jī)的坐標(biāo)和石頭的坐標(biāo)達(dá)到臨界值的時(shí)候,產(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、實(shí)驗(yàn)結(jié)果及分析

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

  6、結(jié)論

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

1.《c語(yǔ)言編寫(xiě)的小游戲 C語(yǔ)言編寫(xiě)簡(jiǎn)單2D游戲的方法》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《c語(yǔ)言編寫(xiě)的小游戲 C語(yǔ)言編寫(xiě)簡(jiǎn)單2D游戲的方法》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/jiaoyu/76673.html