Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用ruby时相邻为空,如何选择相邻数组值_Ruby - Fatal编程技术网

如果使用ruby时相邻为空,如何选择相邻数组值

如果使用ruby时相邻为空,如何选择相邻数组值,ruby,Ruby,我试图弄清楚如果数组值与填充的数组值相邻且为空,如何选择该数组值 假设数组引用的网格是这样布置的 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 有人能提供解决方案或提示吗 这是一个简单的

我试图弄清楚如果数组值与填充的数组值相邻且为空,如何选择该数组值

假设数组引用的网格是这样布置的

 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
课程板
属性读取器:网格
def初始化(单元格_值=”)
@网格={
a1:单元值,a2:单元值,a3:单元值,
b1:单元值,b2:单元值,b3:单元值,
c1:单元值,c2:单元值,c3:单元值
}
结束
def打印网格
board=“\n”

board您可以实现一种方法来确定单元格是否位于
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
[:a1, :a2, :a3, :b1, :b2, :b3, :c1, :c2, :c3].find_all { |cell_location|
  !space_taken(cell_location) and next_to_x?(cell_location)
}
然后,要查找
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
[:a1, :a2, :a3, :b1, :b2, :b3, :c1, :c2, :c3].find_all { |cell_location|
  !space_taken(cell_location) and next_to_x?(cell_location)
}

网格的结构是什么?是2D吗?它与数组的关系如何?什么是“中心值”?一个人究竟如何在一个2年的账户上获得11000分?虽然Stefan下面的方法可行,但您最根本的问题是,您使用的是一维数据结构来表示二维情况。让网格成为2D结构,整个问题就变得容易理解了。我还建议你先在纸上或做点什么——太过沉迷于代码可能是导致你出现这个问题的原因。@BenParsons我是ruby的noob。我已经制作这个游戏好几个月了。我甚至不知道该问“这应该是2d结构吗?”谢谢,我想我会试着回答我原来的问题。