私は Ruby で五目並べゲームを実装しています。これは 15x15 のボードでプレイされる三目並べのバリエーションであり、水平、垂直、または斜めの行に 5 つの O または X を配置した最初のプレイヤーが勝ちます。
まず、Matrix を変数に代入し、0 から 224 までの数値を入力します。これにより、繰り返しがなくなり、後で数えることができます。
gomoku = Matrix.zero(15)
num = 0
15.times do |i|
15.times do |j|
gomoku[i, j] = num
num += 1
end
end
その後、プレイヤーは交代し、ターンごとにメソッドで勝利を確認しますwin?
def win? matrix
15.times do |i|
return true if matrix.row_vectors[i].chunk{|e| e}.map{|_, v| v.length}.max > 4 # thanks to sawa for this way of counting adjacent duplicates
return true if matrix.column_vectors[i].chunk{|e| e}.map{|_, v| v.length}.max > 4
end
return false
end
おそらく間違っていることはわかっていますが、私の問題はそうではありませんが、提案は大歓迎です。問題は斜めの列にあります。斜めの行で重複をカウントする方法がわかりません