不确定我应该把我的方法放在哪个 class

Not sure which class I should put my method in

我目前正在开发一款简单的 2D 网格游戏。游戏的网格由单元格组成。一个牢房可以包含(除其他外)地雷或炸弹。 与我的问题相关的 classes 是: Player棋盘游戏

这就是我的 classes 在彼此之间的使用方式:

class游戏代表一个游戏的所有细节:

public class Game
{
    private Board board;

    private Player player;

    //Currently using
    public void placeMine(Player owner, int x, int y);
}

Boardclass主要是Cell

的二维数组
public class Board
{
    private Cell[][] board;
}

Cellclass可以包含地雷

public class Cell
{
    private boolean containsMine;
}

Playerclass代表一个玩家。玩家应该能够在棋盘上放置地雷或炸弹。

public class Player
{
    //placeMine() here ?
    public void placeMine(int x, int y);
}

现在的问题是:我应该把我的 placeMine() 方法放在哪里?

我的“现实生活逻辑”让我想把 placeMine() 放在 Player 中,因为从逻辑上讲,这是一个在地上放置地雷的玩家。然而,这样做意味着 Player class 必须能够访问 Board 的实例(因为地雷将被放置在板上。在更准确地登机)。

Player class 一个 Board 的实例听起来很糟糕,因为玩家不“拥有” 董事会。 Board 的实例可以作为参数提供给 placeMine() 方法,但我不太确定这样做的感受。

我目前正在使用的另一种选择是 游戏 中有 placeMine()。我相信以这种方式使它工作更容易并且更容易理解。与我每次都必须通过整个董事会相比,感觉更像是一个通过节日的实例。 但这并不符合我对整个事情的直觉(即 Player 放置地雷,而不是 Game 放置地雷一个地雷)。

如果重点是拥有一个清晰、易于理解、可扩展的架构,那么最好的方法是什么?

placeMine() 方法属于 Game class。

您的游戏架构在逻辑上分为(模型-视图-控制器):

  • 型号:电路板/电芯
  • 控制器:游戏
  • Helper classes: Player(如果它有其他属性,我的可能是另一个)

模型包含游戏的状态。控制器负责管理游戏的每一轮,并相应地更新状态。游戏的动作由控制器处理。虽然玩家是一个回合的'owner',也许是一个单元格的所有者等,但游戏代表玩家在任何给定的回合放置地雷,并相应地更新状态。