一个实例变量可以在同一个类中访问另一个吗?

时间:2012-09-13 18:46:56

标签: ruby chess

我正在用Ruby写一个国际象棋引擎。

我有一个Game类,它由两个属性组成:

  • :board,我Board班的一个实例。
  • :log,一系列动作,用于保存&加载游戏。

Board类包含两个属性:

  • :white,我Player班的一个实例。
  • :black,我Player班的一个实例。

Player类由片段位置组成,表示为位串:

:pawns, :knights, ..., :king

我希望Player类有类似in_check?的方法来指示该播放器是否在检查中。但是,这需要@white知道@black,类中的Board的值。

有没有办法可以从@black访问变量@white,而无需将黑色部分的位置明确地作为参数传递给in_check方法?

2 个答案:

答案 0 :(得分:1)

@white@black分别向董事会询问支票。


更新

嗯,我想这里有很多假设,所以让我们写下来看看我们是否有一些共同点:

class Board

  def initialize
    ...
    @black = Player.new(self, other_args*)
    @white = Player.new(self, other_args*)
    ...
  end

  def am_i_in_check?(player)
    case player
    when @black
      return does_white_check_black?
    when @white
      return does_black_check_white?
    end
  end

  ...
end

class Player
  ...
  def initialize(board,...)
    ...
    @board=board
    ...
  end
  ...

  def wants_to_know_whether_it_is_checked
    @board.am_i_in_check?(self)
    ...
  end
  ...
end

我猜上面有隐藏的拼写错误,但它现在应该描述我的想法。

答案 1 :(得分:1)

第一个玩家可以在步骤之前或之前将消息"you're in check"传递给另一个玩家。 访问变量不是一个好主意,它会导致未来的问题,而是传递消息。