设计一个简单的 oop 游戏 class 层次结构
Designing a simple oop game class hierarchy
我正在尝试制作战舰游戏(请参阅 wikipedia:Battleship_(游戏))。
我有一个Player
class、一个Grid
class和一个Ship
class.
每个玩家都有一个网格,每个玩家都有一组生活在网格上的飞船。
我如何知道是将 Ships 集合设为 Player 成员还是设为 Grid 成员?
在游戏开始时,玩家必须将他们的船只放置在网格上。我有一个方法可以询问玩家在哪里放置他们的飞船。我怎么知道 class 应该放置该方法?如果它在 Player 中,但 Ships 集合在 Grid 中,那么我将不得不从 Grid 中获取对 Ships 集合的引用。然后我要 Grid::PlaceShip(Ship) 还是 Ship::Place(x, y)?
有这方面的方法吗?我试过 Class-Responsibilities-Collaborators 但它没有给我答案让我开始编码。对于这个特定的例子,我宁愿自己学习如何找到答案,也不愿别人给他们答案。
这有点取决于周围的代码,但我的直觉是 Ship 应该是 Grid 的一部分。 Grid 和 Ship 所代表的信息之间有很多重叠部分与玩家无关:具体的网格位置、合法猜测等。如果您让 Ship 成为 Player 的一部分,您仍然需要 link 这两个直接,这样网格就知道什么时候船被击中或没有。如果 Grid 甚至不知道 Ships 在哪里,那么拥有 Grid 就毫无意义。
这个问题没有真正硬性的快速答案:如何构建对象模型?我试着想象 functions/methods/subroutines 我可能不得不写什么,不管对象模型如何。如果相同的概念开始出现在同一组函数中,那么它们应该在对象模型中捆绑在一起。
当您在代码的不同部分多次表示相同的信息时,也应该注意一下。对于每个任务或资源,尽量确保只有一部分代码负责它。您可能需要调整您的抽象,以便负责任的代码可以用于略有不同的事情,但都涉及相同类型的工作。
您的目标是简单的代码。如果您开始编写并且代码随着您的进行变得更加复杂(即更难以理解),则表明您需要重新思考和重构您的模型。
我正在尝试制作战舰游戏(请参阅 wikipedia:Battleship_(游戏))。
我有一个Player
class、一个Grid
class和一个Ship
class.
每个玩家都有一个网格,每个玩家都有一组生活在网格上的飞船。
我如何知道是将 Ships 集合设为 Player 成员还是设为 Grid 成员?
在游戏开始时,玩家必须将他们的船只放置在网格上。我有一个方法可以询问玩家在哪里放置他们的飞船。我怎么知道 class 应该放置该方法?如果它在 Player 中,但 Ships 集合在 Grid 中,那么我将不得不从 Grid 中获取对 Ships 集合的引用。然后我要 Grid::PlaceShip(Ship) 还是 Ship::Place(x, y)?
有这方面的方法吗?我试过 Class-Responsibilities-Collaborators 但它没有给我答案让我开始编码。对于这个特定的例子,我宁愿自己学习如何找到答案,也不愿别人给他们答案。
这有点取决于周围的代码,但我的直觉是 Ship 应该是 Grid 的一部分。 Grid 和 Ship 所代表的信息之间有很多重叠部分与玩家无关:具体的网格位置、合法猜测等。如果您让 Ship 成为 Player 的一部分,您仍然需要 link 这两个直接,这样网格就知道什么时候船被击中或没有。如果 Grid 甚至不知道 Ships 在哪里,那么拥有 Grid 就毫无意义。
这个问题没有真正硬性的快速答案:如何构建对象模型?我试着想象 functions/methods/subroutines 我可能不得不写什么,不管对象模型如何。如果相同的概念开始出现在同一组函数中,那么它们应该在对象模型中捆绑在一起。
当您在代码的不同部分多次表示相同的信息时,也应该注意一下。对于每个任务或资源,尽量确保只有一部分代码负责它。您可能需要调整您的抽象,以便负责任的代码可以用于略有不同的事情,但都涉及相同类型的工作。
您的目标是简单的代码。如果您开始编写并且代码随着您的进行变得更加复杂(即更难以理解),则表明您需要重新思考和重构您的模型。