這可能會是一個非常廣泛的問題,但我想知道什麼是在Java中使用多個狀態來構造和設計遊戲的最佳方法。遊戲架構和狀態設計
我已經開始設計一個具有多個狀態的戰艦遊戲(AI vs AI,Human vs Human等)。
它看起來像這樣:
不幸的是,我的代碼已經變得非常混亂和混亂,由於處於邏輯和資源的多重變化的遊戲需要。我想找到一種更好的方式來清理我的代碼,並以易於維護且不復雜的方式組織它。
那麼對於像這樣的遊戲來說,保持良好設計的最佳方法是什麼?
這可能會是一個非常廣泛的問題,但我想知道什麼是在Java中使用多個狀態來構造和設計遊戲的最佳方法。遊戲架構和狀態設計
我已經開始設計一個具有多個狀態的戰艦遊戲(AI vs AI,Human vs Human等)。
它看起來像這樣:
不幸的是,我的代碼已經變得非常混亂和混亂,由於處於邏輯和資源的多重變化的遊戲需要。我想找到一種更好的方式來清理我的代碼,並以易於維護且不復雜的方式組織它。
那麼對於像這樣的遊戲來說,保持良好設計的最佳方法是什麼?
您可以同時使用inheritance和composition來解決此問題。我假設你有一個主要的遊戲類或級別類,你想要存儲這些數據。你可能想要創建一個名爲GameState
的接口,並創建所有的子類(AI vs AI,Human vs Human等... )。然後添加一個變量到你的關卡類:
class MainGame{
GameState state;
public MainGame(){
state = new HumanVsHumanState();
}
public void update(){
state.update();
}
//etc...
}
我特別喜歡FlashPunk 2D遊戲引擎提供的抽象。在此框架內,你可以找出以下抽象:
在此之後的),代碼應該是這樣的:
class MyGame extends Engine {
MyGame() {
// Here we code high level setup
Context.world = new MenuWorld()
}
}
class MenuWorld extends World {
MenuWorld() {
// Here we add the elements of the menu
this.add(new CompCompButton());
this.add(new HumanHumanButton());
}
}
class CompCompButton extends Entity {
CompCompButton() {
// Here we setup button properties
}
// This is a callback function that is automatically called by the framework.
void Update() {
if (Input.mousePressed()) {
onClick();
}
}
void onClick() {
Context.world = new CompCompWorld();
}
}
請注意使用靜態Context類。這個類應該實現渲染新世界的所有邏輯。
HumanHumanButton類的實現基本上與CompCompButton類相同。唯一的區別是,onClick函數現在將當前世界改爲HumanHumanWorld。實際上,您可以實現一個通用的Button類,然後對其進行擴展以實現更簡潔的代碼。
您可以在其網站上閱讀更多關於FlashPunk的內容。這也是值得去尋找Java遊戲引擎的,還有一種叫做LWJGL,雖然我沒有用過它,但我什麼都不知道。
希望有所幫助。
A [Model-view-controller](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)是我的主要建議,這樣你可以分開個人對可插拔責任領域的要求,並輕鬆地進行互換。例如,每個狀態的視圖不應該真正改變,但數據的模型方式可能和程序的控制方式將會...例如... ps - 漂亮的空間屏幕;) – MadProgrammer
我的代碼基於模型 - 視圖 - 控制器,但一切似乎都非常骯髒和混亂。從狀態轉換到另一個狀態需要從一個面板切換到另一個面板,並根據它所處的遊戲狀態加載不同的邏輯。我正在尋找一種方式來更好地組織州內不同的邏輯和資源,例如在國家設計模式。 –
更改狀態,假設主視圖不會更改,只需要更改模型和控制器即可。沒有看到你的代碼,很難100%確定,但從菜單切換到遊戲狀態可能需要你通過「設置」狀態才能建立所需的模型/控制器。同樣,這只是另一個MVC狀態,因爲每個「遊戲狀態」應該是它自己的MVC,其中主遊戲是另一個MVC ...... – MadProgrammer