我正在试图弄清楚如果它与填充的数组值相邻并且为空,则选择一个数组值。
所以让我们说数组引用的网格是这样布局的。
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
任何人都可以提供解决方案或提示吗?
这是一个简单的tic-tac-toe网格
以下是网格所在的类。
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
答案 0 :(得分: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)
}