我创建了一个10x10网格的战场。垂直和水平元素的值为0-9。
计算机有五艘船,我希望计算机随机将五艘船中的每一艘放入网格中。
每艘船所占的街区数量由下面代码中的数字表示
SHIP_HASH = Hash["submarine", 2, "destroyer", 3, "destroyer", 3, "cruiser", 4, "aircraft carrier", 5]
董事会布局:
def board_layout
board_layout = Array.new(10, " ").map!{|row| Array.new(10, " ")}
row_label = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
column_label = [" ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
board_layout.unshift(row_label)
board_layout.each_with_index do |row, i|
row.unshift(column_label[i])
end
端
这是应该做的吗?或者有更简单的方法吗?
答案 0 :(得分:3)
考虑这些做你写过的方式:
此:
board_layout = Array.new(10, " ").map{|row| Array.new(10, " ")}
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
或者这个:
board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
# [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
此:
row_label = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
# => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
或其中一个:
row_label = ('0'..'9').to_a # => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
row_label = [*('0'..'9')] # => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
此:
column_label = [" ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
# => [" ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
或者这个:
column_label = [" ", *('0' .. '9')] # => [" ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
甚至:
column_label = [" ", *row_label] # => [" ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
你可以做最后一个,因为它是一个对称网格。
答案 1 :(得分:0)
SHIP_HASH = { submarine: 2, destroyer: 3, destroyer: 3, cruiser: 4, aircraftcarrier: 5,}
def print_results
board_layout = Array.new(10, ".").map{|row| Array.new(10, ".")}
row_label = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
column_label = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
print "\t"
print row_label.join("\t")
puts
board_layout.each_with_index do |row, i|
print column_label[i]
print "\t"
print row.join("\t")
puts
end
end
print_results