【发布时间】:2019-05-10 10:29:58
【问题描述】:
我正在测试 Ruby Connect 4 游戏中的对角线胜利。我一直在使用硬编码的二维数组进行测试:
grid_array = [
["B", ".", ".", ".", ".", ".", ".", "."],
[".", "B", ".", ".", ".", ".", ".", "."],
[".", ".", "B", ".", ".", ".", ".", "."],
[".", ".", ".", "B", ".", ".", ".", "."],
[".", ".", ".", "X", "M", ".", ".", "."],
[".", ".", ".", ".", "X", "M", ".", "."],
[".", ".", ".", ".", ".", "X", "M", "."],
[".", ".", ".", ".", ".", ".", "X", "M"]
]
此方法的此内部循环正常工作(正确识别 'M' 或 'B' 分别是赢家,但是当我尝试移动对角线检查跨列或使用外部循环选择行时卡住了例如,将'X' 作为获胜值。
def nw_diagonal_win (playing_board)
row = 7
while row < playing_board.size && row >= 0
row = 7
column = 7
piece_count = 0
while (row < playing_board.size && column < playing_board[row].size && column >= 0)
if playing_board[row][column] == 'M'
piece_count += 1
if piece_count == 4
puts "Player is the winner in a diagonal!"
end
puts piece_count.inspect
else
piece_count = 0
puts "No winner."
end
row += 1
column += 1
end
row -= 1
end
end
编辑添加:
Connect 4 中的“获胜者”设置了 4 个相邻的棋子(水平、垂直或对角线)。在我的游戏中,这由'X' 和'0' 表示。碎片从网格中列的顶部“掉落”到该列中最底部的可用空间。棋子可以堆成一列,但不能“漂浮”在棋盘中间。对角线可以从左上到右下或从右上到左下。只有当棋子在网格内不间断(没有环绕)时才会发生胜利。
考虑一个更大版本的井字游戏,其中必须首先在底行进行移动,然后才能在上面的行中进行移动,像盒子一样堆叠。连续四个(水平、垂直或对角线 \ /)获胜。
响应史蒂夫的回答建议,如下:
def top_left_diagonal (playing_board, player_piece)
row = 0
while row < playing_board.size - 3
piece_count = 0
column = 0
while column < playing_board[row].size - 3 && playing_board[row][column] == player_piece
if (playing_board[row][column] == playing_board[row + piece_count][column + piece_count])
piece_count += 1
else
piece_count = 0
end
column += 1
end
if piece_count == 4
puts "Diagonal winner!"
end
row += 1
end
end
【问题讨论】:
-
对于位置 i,j 的元素,让 t=i-j。那么位置 p,q 处的元素在同一主对角线上当且仅当 p-q=t。改变 t 会产生所有的主对角线。除了
p+q=t之外,每个对角线上的元素都具有相似的属性。请定义什么是“赢家”。许多读者,包括我在内,从未听说过这款游戏。 -
您应该编写计算对角线上点的函数,然后为每个对角线调用该辅助函数(在 n*n 板上有 2*(n+n-1) 条对角线 - 两个方向和从第一行第一列的每个元素开始)
-
@CarySwoveland en.wikipedia.org/wiki/Connect_Four ...我希望它无处不在...或者至少是无限的纸质变体。
-
感谢两位的帮助。如果我有任何澄清问题,我会回到 cmets。
-
@CarySwoveland 我理解这个概念(第 7 列 - 第 7 行)= 0,所以该对角线上的所有点都等于 0(4,4;5,5 等)我只是不知道'不明白如何实现。
标签: arrays ruby multidimensional-array