我目前正在制作一款简单的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
- 控制器:游戏
- 助手类:玩家(我的可以是另一个,如果它有其他属性)
模型包含游戏的状态。控制器负责管理游戏的每个回合,并相应地更新状态。游戏的行动是由控制器处理的。虽然玩家是一个回合的"主人",也许是一个细胞的主人等等,但游戏在任何给定的回合中代表玩家放置地雷,并相应地更新状态。