扫雷游戏板|红宝石



我已经为扫雷游戏的绘图板写了一段代码,谁能帮我重构一下这段代码?

请在

下面找到我的代码
def draw(height, width, mines)
board = Array.new(height) { Array.new(width,0) }
x =  Random.rand(height)
y = Random.rand(width)
mines.times do
until board[x][y] != 'x'
x =  Random.rand(height)
y = Random.rand(width)
end
board[x][y] = 'x'
end
board.each_with_index do |row, i|
row.each_with_index do |elem, j|
next if board[i][j] == 'x'
count = 0
count += 1 if i+1 < height && board[i+1][j] == 'x'
count += 1 if j+1 < width && board[i][j+1] == 'x'
count += 1 if i-1 >= 0 && board[i-1][j] == 'x'
count += 1 if j-1 >= 0 && board[i][j-1] == 'x'
board[i][j] = count
end
end
board.each do |row|
row.each do |e|
print "#{e} "
end
print "n"
end 
end
draw(4,4,3)

提前感谢。

我认为你需要检查8个相邻的单元格,而不是4个。因为这是重构,所以我保留了原来的行为。

def draw(height, width, mines)
board = Array.new(height) { Array.new(width, 0) }
mines.times do
x = rand(height)
y = rand(width)
redo if board[x][y] == 'x'
board[x][y] = 'x'
[[x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1]].each do |x, y|
next if x < 0 || x >= height
next if y < 0 || y >= width
next if board[x][y] == 'x'
board[x][y] += 1
end
end
board.each { |row| puts row.join(' ') }
end

最新更新