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



我目前正在制作一款简单的2D网格游戏。游戏的网格是由细胞组成的。一个细胞可以包含地雷或炸弹(除其他外)。与我的问题相关的类是:Player;棋盘游戏

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

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

public class Game
{
private Board board;
private Player player;
//Currently using
public void placeMine(Player owner, int x, int y);
}
Board类主要是一个2D数组Cell
public class Board
{
private Cell[][] board;
}
Cell类可以包含mine
public class Cell
{
private boolean containsMine;
}

Player类表示一个播放器。玩家应该能够在棋盘上放置地雷或炸弹。

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

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

我的"现实生活逻辑";让我想把placeMine()放在玩家中,因为它在逻辑上是一个在地上放置地雷的玩家。然而,这样做意味着Player类必须访问Board的实例(因为矿将被放置在板上)。

Player类一个Board的实例听起来很糟糕,因为玩家不"拥有"。。Board的实例可以给placeMine()方法作为一个参数,但我不太确定我对这样做的感觉。

我目前使用的另一种选择是在Game中使用placeMine()。我相信这样做要容易得多,也更容易理解。比起我每次都要通过整个董事会,这更像是一个短暂的节日。但这并不符合我对整个事情的直觉(即玩家放置地雷,而不是游戏放置地雷)。

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

placeMine()方法属于Game类。

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

  • 型号:Board/Cell
  • 控制器:游戏
  • 助手类:玩家(我的可以是另一个,如果它有其他属性)

模型包含游戏的状态。控制器负责管理游戏的每个回合,并相应地更新状态。游戏的行动是由控制器处理的。虽然玩家是一个回合的"主人",也许是一个细胞的主人等等,但游戏在任何给定的回合中代表玩家放置地雷,并相应地更新状态。

相关内容