1

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

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

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

该类Board由两个属性组成:

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

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

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

我希望Player该类具有in_check?指示该播放器是否处于检查状态的方法。但是,这需要@white知道@black,哪个值是类中的一个实例Board

有没有一种方法可以访问变量@black@white而无需将黑色块的位置作为参数显式传递给该in_check方法?

4

2 回答 2

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

我想上面隐藏了错别字,但它现在应该描述我的想法。

于 2012-09-13T18:53:14.353 回答
1

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

于 2012-09-13T19:01:11.970 回答