首页 > 解决方案 > 如何在主类之外或在第二个主类中创建游戏?

问题描述

我是 java 新手,我正在做一个小型大学项目,我有大约 30 个课程。

我的项目是开发一个关于建设城市的游戏,我期望的游戏应该包括以下功能:

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

我只是想避免让我的主类使用不同的对象变得如此之大,例如我的游戏将有大约 20 座建筑物,每座建筑物都有不同数量的房间和出口..

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

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

标签: java

解决方案


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

您可能听说过单一职责原则。从本质上讲,这意味着每个类都对单个功能负责。从逻辑上讲,这将意味着您的代码将有许多只做一件简单事情的小类。更改课程的唯一原因是如果那一件事发生了变化。因此,例如,您的 main 方法可能负责启动 UI,而不是设置所有游戏数据。

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

例如:

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();
    }
}

这种结构有很多优点:

  • 对读者来说,这个类的作用通常更明显
  • 代表应该是可单独测试的
  • 您可以在不影响用户的情况下更改委托的实现
  • 您可以在其他地方重用委托功能
  • 重构结构更直接

推荐阅读