这可能是一个非常广泛的问题,但我想知道在Java中构建和设计具有多个状态的游戏的最佳方法是什么。
我已经开始设计一个具有多种状态的战舰游戏(AI与人工智能,人与人等等)。
看起来像这样:
不幸的是,由于游戏所需的状态逻辑和资源的多重变化,我的代码变得非常混乱和混乱。我想找到一种更好的方法来清理我的代码,并以一种易于维护且不那么复杂的方式进行组织。
那么为这样的游戏保持良好设计的最佳方法是什么?
答案 0 :(得分:1)
您可以同时使用inheritance和composition来解决此问题。我假设您有一个主要的游戏类或级别类,您想要存储这些数据。您可能希望创建一个名为GameState
的接口,并创建所有子类(AI vs AI,Human vs Human,等等...)。然后将一个变量添加到您的关卡类:
class MainGame{
GameState state;
public MainGame(){
state = new HumanVsHumanState();
}
public void update(){
state.update();
}
//etc...
}
答案 1 :(得分:0)
我特别喜欢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,但由于我没有使用它,所以我什么都不知道。
希望有所帮助。