日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

怎样做小游戏挖金子(VC,源码4)

發(fā)布時(shí)間:2024/8/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎样做小游戏挖金子(VC,源码4) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?有人下載我的工程文件,“我很欣慰”,名字是“挖金子VC版源碼”,大家多討論。

上回講哪了?地圖加載了,物品能顯示了。該顯示畫(huà)面上方擺動(dòng)的叉子了。計(jì)算機(jī)圖形學(xué)的“圖形旋轉(zhuǎn)”,當(dāng)然,有一個(gè)WINDOWS API函數(shù)PlgBlt,可我沒(méi)有用。網(wǎng)上有很多介紹圖形旋轉(zhuǎn)的文章,我還是講解一下我這個(gè)函數(shù):

void?GAMECATCH::TcDrawAngleOff(HDC?hdc,int?*pv,float?a,int?num,int?x0,int?y0)
{
????
int?pvdest[20]={0};
//????int?x0,y0;
????int?i;
????
int?tempx,tempy;
????
????memcpy(pvdest,pv,
sizeof(int)*num);
/*
????x0=pv[0];
????y0=pv[1];

????//move
????for(i=0;i<num;i+=2)
????{
????????pvdest[i]-=x0;
????????pvdest[i+1]-=y0;
????}
*/
????
//rotate
????for(i=0;i<num;i+=2)
????{
????????tempx
=pvdest[i];
????????tempy
=pvdest[i+1];
????????pvdest[i]
=tempx*cos(a)-tempy*sin(a);
????????pvdest[i
+1]=tempx*sin(a)+tempy*cos(a);
????}

????
//move,中心點(diǎn)坐標(biāo)是320?58
????for(i=0;i<num;i+=2)
????{
????????pvdest[i]
+=x0;
????????pvdest[i
+1]+=y0;
????}

????
//繪制圖形
????Draw(hdc,pvdest);
}

為什么我沒(méi)有刪除注釋掉的代碼?有原因。一個(gè)圖形繞(x0,y0)旋轉(zhuǎn),總共分三步(耳熟):圖形移動(dòng)到坐標(biāo)原點(diǎn),旋轉(zhuǎn),再移動(dòng)回原有位置。而我這個(gè)叉子的圖形在哪里?就在原點(diǎn)。所以省略了第一步。叉子的圖形,是畫(huà)了幾個(gè)線段,各端點(diǎn)坐標(biāo)如下(x1,y1,x2,y2,...):

?//設(shè)置爪子各頂點(diǎn)坐標(biāo)
?int temp[12]={
?0,32,20,32,
?40,0,64,0,
?64,64,40,64
?};

再解釋一下公式:

??????pvdest[i]=tempx*cos(a)-tempy*sin(a);
????????pvdest[i
+1]=tempx*sin(a)+tempy*cos(a);
屏幕坐標(biāo)軸x向右,y向下,這個(gè)公式將逆時(shí)針旋轉(zhuǎn)圖形。

有一個(gè)問(wèn)題,為什么不用一個(gè)位圖?位圖的顯示效果雖然好,但是計(jì)算cos,sin時(shí),會(huì)產(chǎn)生誤差。這將使圖像有一些變形,所以沒(méi)有用位圖。

繪制、擺動(dòng)的問(wèn)題解決了。下面是伸縮。

叉子的伸縮

關(guān)鍵是使用“狀態(tài)機(jī)”。三種狀態(tài):擺動(dòng),伸出,拉回。我沒(méi)有定義宏,應(yīng)該批評(píng)。用0 1 2 表示的。

再次聲明軟件的“可維護(hù)性”,這種狀態(tài)設(shè)置,也許瑣碎,但有好處。

擺動(dòng)狀態(tài):修改當(dāng)前角度,當(dāng)前擺動(dòng)方向;

伸出狀態(tài):改變坐標(biāo),如果達(dá)到伸出的最大長(zhǎng)度,則狀態(tài)遷移:拉回;

拉回狀態(tài):改變坐標(biāo),如果“伸出長(zhǎng)度”降為0,則狀態(tài)遷移:擺動(dòng)。

為了消除坐標(biāo)計(jì)算的誤差,伸出時(shí),直接將坐標(biāo)偏移值轉(zhuǎn)為整型存儲(chǔ),如下:

???xoff=10*cos(iAngle*10*1.57/90);
???yoff=10*sin(iAngle*10*1.57/90);
拉回的時(shí)候,也用相同的偏移值,只要再乘以一個(gè)系數(shù),就實(shí)現(xiàn)了拉回的快慢不同。

按鍵檢測(cè)

用戶按“下”,叉子伸出。用按鍵消息來(lái)檢測(cè),代碼為:

????????case?WM_KEYDOWN:
????????????
switch(iGameState)
????????????{
????????????
case?GAME_STATE_MAIN:
????????????????gamecatch.KeyProc(wParam);
void?GAMECATCH::KeyProc(int?iKey)
{
????
switch(iKey)
????{
????
case?VK_DOWN:
????????
if(0==iState)
????????{
????????????
//擺動(dòng)狀態(tài)下才能變成伸出狀態(tài)
????????????iState=1;
????????????xoff
=10*cos(iAngle*10*1.57/90);
????????????yoff
=10*sin(iAngle*10*1.57/90);
????????}
????????
break;

目前,叉子能正常擺動(dòng),用戶按“下”,叉子伸出,然后拉回。緊接著就是核心問(wèn)題“抓到物品”,即“檢測(cè)碰撞”,下回接著說(shuō)。歡迎參考原工程“挖金子VC版源碼”(在CSDN下載頻道)。

總結(jié)

以上是生活随笔為你收集整理的怎样做小游戏挖金子(VC,源码4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。