java - 如何在主类之外或在第二个主类中创建游戏?
问题描述
我是 java 新手,我正在做一个小型大学项目,我有大约 30 个课程。
我的项目是开发一个关于建设城市的游戏,我期望的游戏应该包括以下功能:
- 不同种类的建筑(道路、建筑物和房间)和内部物体(出口);
- 玩家与游戏对象之间的交互,例如,玩家可以进入/离开房间。
我只是想避免让我的主类使用不同的对象变得如此之大,例如我的游戏将有大约 20 座建筑物,每座建筑物都有不同数量的房间和出口..
为了达到设计,我需要解决以下问题:
- 我是否必须将所有这些对象都写在 main 中?
- 我可以在另一个类中构建它以与主要玩家一起开始游戏吗?
解决方案
我将您的问题解释为如何划分职责以避免类变得过于混乱和复杂。这是一个非常好的问题,但不幸的是没有简单的答案:有很多技术,最适合您的情况的技术将在很大程度上取决于您的问题空间。
您可能听说过单一职责原则。从本质上讲,这意味着每个类都对单个功能负责。从逻辑上讲,这将意味着您的代码将有许多只做一件简单事情的小类。更改课程的唯一原因是如果那一件事发生了变化。因此,例如,您的 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();
}
}
这种结构有很多优点:
- 对读者来说,这个类的作用通常更明显
- 代表应该是可单独测试的
- 您可以在不影响用户的情况下更改委托的实现
- 您可以在其他地方重用委托功能
- 重构结构更直接
推荐阅读
- scala - Scala:将函数参数作为元组传递
- javascript - CKeditor:如何在保存时平衡 HTML 标签?(他们平衡负载)
- java - JavaFX - 使用比例获取 MouseEvent 位置
- c# - C#如何在缩放后获得原始屏幕边界
- powershell - Windows PowerShell 中的管道
- spring - 使用程序集描述符设置 Spring Boot pom.xml
- docker - Docker 无法与 Internet 通信(docker0 bridge linkdown)
- javascript - 使用命名空间导入 React 组件
- javascript - Node.js / JS - 直接 csv 数据操作?
- javascript - 将 Javascript 链接添加到整个 Flexbox 项