我正在用 Java 实现一个基本的棋盘游戏,我很难决定解决的利弊。我已经成功地利用命令模式在游戏中启用撤消功能,并且最初打算通过序列化整个游戏模型对象集来实现游戏保存/加载。
但是我意识到,由于游戏是一个棋盘游戏,不涉及随机元素并且总是以相同的状态初始化,我可以通过简单地序列化包含命令堆栈和命令本身的对象来实现保存/加载功能,并且然后重新执行所有命令以将游戏带到保存的位置。
我当前的设计不允许我这样做,因为我的命令包含对构成我的板的图块和块的对象实例的引用,我认为这是最佳 OO 实践。这意味着我还必须序列化这些模型对象,这将破坏仅序列化命令并执行它们的目的。我的问题是,让命令只保存棋盘图块的整数位置是否会被认为是不好的做法。
我的 Command 类代码的相关部分:
private GameController controller;
private Tile sourceTile;
private Tile[] route;
public MoveCommand(GameController controller, Tile sourceTile, Tile... route) {
this.controller = controller;
this.sourceTile = sourceTile;
this.route = route;
}
@Override
public void execute() {
controller.executeMove(sourceTile, route);
}
我打算将 Tile 引用更改为对称为 TileLocation 的新可序列化类的引用或类似的东西,它将保存一个 X 和 Y 整数,以便板可以找到瓷砖。