【发布时间】:2015-02-24 20:39:52
【问题描述】:
我有一个数组如下:
@spaces = []
def make_board
7.times do |x|
x += 1
6.times do |y|
y += 1
@spaces << [x," "]
end
end
end
...以及一系列所需的组合:
def winners
#V row 1
[ [[0][1], [1][1], [2][1], [3][1]],
[[1][1], [2][1], [3][1], [4][1]],
[[2][1], [3][1], [4][1], [5][1]],
#V row 2
[[6][1], [7][1], [8][1], [9][1]],
[[7][1], [8][1], [9][1], [10][1]],
[[8][1], [9][1], [10][1], [11][1]],
#V row 3
[[12][1], [13][1], [14][1], [15][1]],
[[13][1], [14][1], [15][1], [16][1]],
[[14][1], [15][1], [16][1], [17][1]] ]
end
在程序的其余部分,@spaces 数组中的“”可以更改为“X”或“O”。我正在尝试编写一种方法来检测任何组合何时不是“”并且都具有相同的值。
def @win? = false
def success
winners.each do |x|
fours = [ @spaces[x[0]], @spaces[x[1]], @spaces[x[2]], @spaces[x[3]] ]
if fours.each{|x| x[1] != " "}
if @spaces[x[0]] == @spaces[x[1]] && @spaces[x[1]] == @spaces[x[2]] && @spaces[x[2]] == @spaces[x[3]]
@win = true
end
end
end
end
它不喜欢从#winners 数组传递的数据类型#success 方法来搜索@spaces 数组。它将其读取为 nil 并需要一个整数,但添加 .to_i 会导致所有内容都为 0。添加括号、“”以及响应错误消息的任何其他内容的变化和分类组合只会导致更多的 nil 和 0 . 要使该方法有效,需要什么数据类型? 或者,在可能的情况下,我会以一种特别愚蠢的方式来处理它,只是还没有意识到 有人可以建议实现相同目标的替代方法?
6X7 网格是“连接四”板。 @sample 数组中的每个子数组[0] 都是列,用于程序的其他部分。每个子数组[1] 是“X”、“O”或“”(未使用)。该程序是用于学习目的的“连接四个”游戏
【问题讨论】:
-
@spaces是一个由 42 个元素组成的数组,形式为[i,s],其中i是介于1和7(含)之间的数字,而s最初是 @987654330 @,但可以更改为"X"或"O"。@spaces的jth元素是什么意思? -
你从哪里得到
jth 元素? -
j引用@spaces在位置(或索引或偏移)j处的元素,其中j是0和41之间的任意数字。例如,j=21。 -
啊。在这些术语中,每个元素
j代表 6X7 网格上的一个空间。j[0]是列,用于程序的其他部分。j[1]是“X”、“O”或“”(未使用)。该程序是一个用于学习目的的“连接四个”游戏。
标签: ruby arrays multidimensional-array