gpt4 book ai didi

java - 如何在主类之外或第二个主类中创建游戏?

转载 作者:行者123 更新时间:2023-11-30 05:23:51 25 4
gpt4 key购买 nike

我是 Java 新手,正在从事一个小型大学项目,大约有 30 个类(class)。

我的项目是开发一款关于 build 城市的游戏,我期望的游戏应该包含以下功能:

  1. 不同类型的建筑(道路、建筑物和房间)和内部物体(导出);
  2. 玩家和游戏对象之间的交互,例如玩家可以进入/离开房间。

我只是想避免让我的主类因不同的对象而变得太大,例如我的游戏将有大约 20 个建筑物,每个建筑物都有不同数量的房间和导出..

为了达到设计,我需要解决以下问题:

  1. 我必须将所有这些对象写入 main 中吗?
  2. 我可以在另一个类中构建它,以便与主玩家一起开始游戏吗?

最佳答案

我将您的问题解释为如何划分职责以避免类变得过于困惑和复杂。这是一个非常好的问题,但不幸的是没有简单的答案:有很多技术,而最适合您的情况的技术将在很大程度上取决于您的问题空间。

您可能听说过 Single Responsibility Principle 。本质上,这意味着每个类都负责一项功能。从逻辑上讲,这意味着您的代码将有许多小类,它们只做一件简单的事情。改变类(class)的唯一原因是那一件事发生了变化。因此,例如,您的 main 方法可能负责启动 UI,但不设置所有游戏数据。

那么如何实现这一目标呢?有几种技术可以将逻辑从类中分离出来,以避免它变得又长又困惑,但最重要的(IMO)是 Delegation 。这涉及将一项功能委托(delegate)给另一个类,然后调用该类中的方法。

例如:

class Game {
public static void main(String[] args) {
Game game = new Game();
game.setUpUI();
game.configureGameData();
game.start();
}

public void setUpUI() {
}

public void configureGameData() {
}

public void start() {
}
}

可能会变成:

class Game {
private final UI_Maker uiMaker;
private final GameData gameData;
private final GameStarter gameStarter;

public static void main(String[] args) {
Game game = new Game();
game.start();
}

private void start() {
uiMaker.makeUI();
gameData.loadData();
gameStarter.start();
}
}

这种结构有很多优点:

  • 对于读者来说,该类的作用通常更明显
  • 代表应该可以单独测试
  • 您可以更改委托(delegate)的实现而不影响用户
  • 您可以在其他地方重用委托(delegate)的功能
  • 重构结构更加简单

关于java - 如何在主类之外或第二个主类中创建游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59041505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com