-1

配列値が塗りつぶされた配列値に隣接していて空の場合、配列値を選択する方法を理解しようとしています。

では、配列が参照するグリッドがそのようにレイアウトされているとしましょう。

 a1,a2,a3,
 b1,b2,b3,
 c1,c2,c3

a1 が X を保持している場合、グリッドはそのようになります。

 X,a2,a3,
 b1,b2,b3,
 c1,c2,c3

メソッドで隣接する配列値 (この場合は a2、b1、b2) を検出できるようにしたいと考えています。

しかし、この次のケースでは、O が中心値を保持しています。

 X,a2,a3,
 b1,O,b3,
 c1,c2,c3  

...メソッドは a2、b1 を選択します

誰でも解決策やヒントを提供できますか?

これは単純な三目並べのグリッドです

グリッドが存在するクラスを見てみましょう。

class Board
attr_reader :grid

def initialize(cell_value = " ")
  @grid = {
    a1: cell_value, a2: cell_value, a3: cell_value,
    b1: cell_value, b2: cell_value, b3: cell_value,
    c1: cell_value, c2: cell_value, c3: cell_value
  }
end

def printgrid
  board = "\n"
  board << "a #{@grid[:a1]}|#{@grid[:a2]}|#{@grid[:a3]} \n"
  board << "----------\n"
  board << "b #{@grid[:b1]}|#{@grid[:b2]}|#{@grid[:b3]} \n"
  board << "----------\n"
  board << "c #{@grid[:c1]}|#{@grid[:c2]}|#{@grid[:c3]} \n"
  board << "----------\n"
  board << "  1 2 3\n"
end

def space_taken?(cell_location)
  cell_value = cell_location
  @grid[cell_value] != " "
end
end
4

1 に答える 1

1

セルが の隣にあるかどうかを判断するメソッドを実装できますX

def next_to_x?(cell_location)
  case cell_location
  when :a1
    @grid[:a2] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X'
  when :a2
    @grid[:a1] == 'X' or @grid[:a3] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X' or @grid[:b3] == 'X'
  # ...
  end
end

次に、空であり、 の隣にあるすべてのセルを見つけるには、次のようにしXます。

[:a1, :a2, :a3, :b1, :b2, :b3, :c1, :c2, :c3].find_all { |cell_location|
  !space_taken(cell_location) and next_to_x?(cell_location)
}
于 2012-10-22T09:20:47.303 に答える