1

Rubyでチェスエンジンを書いています。

私はGame2つの属性で構成されるクラスを持っています:

  • :board、私のBoardクラスのインスタンス。
  • :log、ゲームの保存とロードのための移動の配列。

このBoardクラスは、次の 2 つの属性で構成されます。

  • :white、私のPlayerクラスのインスタンス。
  • :black、私のPlayerクラスのインスタンス。

Playerクラスは、ビット文字列として表されるピースの位置で構成されます。

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

そのプレイヤーがチェックされているかどうかを示すPlayerようなメソッドをクラスに持たせたいと思います。in_check?ただし、その@white値がクラス@black,内のインスタンスであることがわかっている必要があります。Board

黒い部分の場所をパラメーターとしてメソッドに明示的に渡さずに変数@blackにアクセスできる方法はありますか?@whitein_check

4

2 に答える 2

1

"you're in check"最初のプレーヤーは、ステップを実行した後または実行する前に、別のプレーヤーにメッセージを渡すことができます。変数にアクセスすることは良い考えではありません。それは将来の問題につながり、代わりにメッセージを渡します。

于 2012-09-13T19:01:11.970 に答える
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 に答える