重新设计战舰游戏

时间:2014-12-04 22:05:35

标签: ruby

我创建了一个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

这是应该做的吗?或者有更简单的方法吗?

2 个答案:

答案 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