當前位置:
首頁 > 最新 > C語言C加加遊戲開發 十八角色在障礙物中智能行走的實現

C語言C加加遊戲開發 十八角色在障礙物中智能行走的實現

最近一直在忙著寫一個遊戲,其中融入了RPG元素,有人物的行走與障礙物判定。一般而言,當人物行走時碰到障礙物時應該停止不動,就像下面這樣

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

這樣的實現非常簡單,每次移動前判斷人物的矩形是否和障礙物相交即可,如果只以向右的方向為例,代碼大概可以寫成這樣

[cpp]view plain copy

if(行走)

{

switch(方向)

{

case 右:如果當前位置的右邊位置是障礙物,則不動,否則將人物移到右邊位置

break;

}

}

這看起來非常合理,我一開始也是按照這個思路寫的,但是當人物處於下面這種情況時,即人物只有一部分碰撞到障礙物的時候

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

如果仍然像上面那樣,障礙物和人物矩形仍然是相交的,所以人物仍然是行走不了的,這在遊戲中可以接受,但是看起來總是有一種違和感,為什麼我們的人物不能智能一點,在拐角處可以繞過障礙物呢?

下面是自己的想法和實現,希望可以給新手朋友們參考,也希望路過的高手可以指導下,畢竟自己對遊戲了解的不太多。

在上圖的情況中,我們看到人物(就是那隻可愛的小狗)向右行走的時候下半部分碰撞到了障礙物,而上半部分沒有碰撞到,那麼我們希望出現的情況就是小狗先向上行走一點,使得下半部分不再與障礙物碰撞,然後向右行走。如果是上半部分碰撞到障礙物,而下半部分沒有碰撞到障礙物,那麼小狗應該向下行走一點,再向右行走。

另外,當處於下面這樣的情況時

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

如果小狗向右下方向行走時,那麼按照之前的判斷,小狗仍然是不會運動的。但是我們想要的效果是小狗向下移動。

那麼,我們怎麼樣實現這個效果呢?

事實上是非常簡單的。

實現的思路有兩點關鍵:

1.將運動方向分解,單獨進行x方向和y方向的判斷和運動。

2.障礙判斷使用人物矩形的四個頂點進行。

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

在遊戲中我使用了搖桿,那麼當是右上方向時,就分解為向右運動和向上運動。在運動分解之後,第二種情況即小狗沿牆向右下方向的移動就自然解決了,此時小狗運動方向被分解為右方向和下方向,有方向上遇到障礙物無法行走,但是下方向是暢通的,那麼就會出現小狗向下面移動的效果了。

再回到我們初始提出的問題,現在解決起來就很容易了。

我們可以很容易的得到小狗矩形的四個頂點,在不同的方向判斷中使用不同的點。

例如:當向右運動時,我們得到右上頂點和右下頂點。

判斷右上頂點和右下頂點是否遇到障礙物,會出現四種情況

1.右上頂點和右下頂點均是障礙物

這顯示就是不可走的情況

2.右上頂點和右下頂點均不是障礙物

這就是可通行的情況

3.右上頂點是障礙物,右下頂點不是障礙物

此時人物應該向下運動,然後再向右運動,繞過障礙物

4.右上頂點不是障礙物,右下頂點是障礙物

人物應該向上運動,然後向右運動,繞過障礙物

事實上如果我們分解處理xy方向之後,對於3,4種情況下,只需要處理前面一部分運動就可以,即只向上下運動即可,因為遊戲中是在不斷接受玩家的按鍵信息,不斷的處理位置變化,當玩家按著右鍵的時候,在y方向上處理了上下運動經過障礙物後,在x方向的處理上自然處於可以運動的狀態了,也就形成了繞過障礙物的效果。

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

有了思路,實現可以向下面這樣

[cpp]view plain copy

switch(方向)

{

case 右:if(情況1)

不作處理

else(情況2)

到達該位置,即x增加

else(情況3)

向下運動,即y增加

else(情況4)

向上運動,即y減少

break;

case

……

}

實現中可以用switch –case處理方向。但是寫完後就會發現大量的代碼都是一樣的,所以我是使用了數組,分xy方向分解,依次進行xy方向判斷,將上下左右分別添加了另外分解的一個方向,設為不可通行,通過數組下標處理不同的情況,看起來代碼就不累贅了。用switch-case語句最大的好處就是代碼很清晰,很容易看明白,缺點是重複代碼。用數組後代碼很簡潔,但是語義不是那麼清晰,有時過會自己就會混淆,囧。

想要一起學習C語言C++的可以加裙二九九 四 一 一五九六,裙內有各種資料滿足大家,更新最新行業行情

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 萌萌的程序員 的精彩文章:

國內的C語言C加加遊戲程序員是否有前途?
聽說C語言C加加要消失了?嚇我一跳
C加加遊戲開發需要學什麼,你知道嗎?
學好這幾點,你就學會了C語言
學習C語言和C加加僅僅是為了高工資嗎?

TAG:萌萌的程序員 |