2D网格上的各种“玩家”,玩家应如何参考网格?

时间:2014-03-03 21:53:41

标签: java oop reference multidimensional-array

假设我创建了一个名为Grid的类,它是一个2D数组并具有函数

boolean canMove(Position fromPos, Position toPos) {
  // Determines whether a we can move from fromPos to toPos
}

现在说我还有一个名为Player的类,只需在轮到他们中选择[UP,DOWN,LEFT,RIGHT]中的一个,然后调用canMove()来查看它们是否可以移动。

目前我的想法是构建每个玩家:

public Player(String name, Grid grid) {
  this.name = name;
  this.grid = grid;
}

当他们试图移动时,他们可以打电话:

public void move() {
  //Pick a random move
  ...

  //See if move is valid, if so make the move
  if(grid.canMove(cur_pos, new_pos) {
    move(cur_pos, new_pos);
  }
}

我的问题是,让每个玩家引用网格是否正确?由于每个玩家总是会引用相同的网格(只有一个),有没有办法基本上使它成为网格的给定,而不必在构造函数中指定它?

3 个答案:

答案 0 :(得分:0)

在结构化方面,每个玩家对网格的引用并没有多大意义。网格类应该有一个2d数组,其后面的播放器对象作为实例变量。

另外,canMove()不需要两个参数。您只需要一个参数。 canMove(Position newPos)将检查新位置是否有效。

答案 1 :(得分:0)

如果我们知道你的网格和移动方案是什么样的,那就更容易说了。

如果符合以下条件,您当前的设 您正在尝试将Player对象从网格上的一个tile拖动到另一个tile。 (这很不错)

如果你只想移动[向上,向下,向左,向右],为什么不让网格静态并调用Grid.movePlayer(Player p,int x,int y)之类的方法并处理那里的所有内容

答案 2 :(得分:0)

我怀疑这是任何一个正确答案,但在我看来,更好的设置将是:

  • 拥有一个可以访问游戏逻辑的游戏类,它可以控制一切。我认为这是你设置中缺失的部分。
  • 此游戏类包含对玩家,网格或网格的引用。
  • 想要移动的玩家请求游戏。游戏然后检查网格并让玩家知道移动是否合法,然后移动。所以是的,Player必须有一个对Game对象的引用,但也许就是这样。玩家不一定需要引用Grid(在许多情况下,但并非在所有情况下)。