Ruby 战舰游戏的重新设计

Ruby 战舰游戏的重新设计,ruby,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, " ")

我用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
结束


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

考虑一下你写的东西的这些方法:

这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
column_label = [" ", *('0' .. '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"]
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
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"]

你可以做最后一个,因为它是一个对称的网格。

考虑以下方法来完成你所写的内容:

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
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
column_label = [" ", *('0' .. '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"]
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
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"]

你可以做最后一个,因为它是一个对称的网格。

考虑以下方法来完成你所写的内容:

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
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
column_label = [" ", *('0' .. '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"]
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
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"]

你可以做最后一个,因为它是一个对称的网格。

考虑以下方法来完成你所写的内容:

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
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
column_label = [" ", *('0' .. '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"]
这:

或者这个:

board_layout = [[' '] * 10] * 10
# => [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "],
#     [" ", " ", " ", " ", " ", " ", " ", " ", " ", " "]]
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"]


你可以做最后一个,因为它是一个对称的网格。

慢一点。这里的人真的不可能帮助您调试200行脚本。从你的目标1开始,在问题中加入你的输入和错误信息代码,并更详细地解释你所说的“不工作”是什么意思。你是对的。我只是有点太沮丧了,它不起作用,仅此而已@NeilSlaterbtw我会使用
SHIP_HASH={subside:2,destropher:3,…}
一种更简单、更可读的方法来初始化HASH。与数组相同:
[10,“]
数组相同。如果您的代码有效,则询问是否有更简单的方法可以立即解决堆栈溢出问题,而将问题置于堆栈溢出问题。Ruby是一种面向对象语言。不面向数组、不面向哈希、不面向字符串。我在你的代码中没有看到一个对象!(嗯,数字、字符串、数组和散列都是对象,但你知道我的意思。)慢一点。这里的人真的不可能帮助您调试200行脚本。从你的目标1开始,在问题中加入你的输入和错误信息代码,并更详细地解释你所说的“不工作”是什么意思。你是对的。我只是有点太沮丧了,它不起作用,仅此而已@NeilSlaterbtw我会使用
SHIP_HASH={subside:2,destropher:3,…}
一种更简单、更可读的方法来初始化HASH。与数组相同:
[10,“]
数组相同。如果您的代码有效,则询问是否有更简单的方法可以立即解决堆栈溢出问题,而将问题置于堆栈溢出问题。Ruby是一种面向对象语言。不面向数组、不面向哈希、不面向字符串。我在你的代码中没有看到一个对象!(嗯,数字、字符串、数组和散列都是对象,但你知道我的意思。)慢一点。这里的人真的不可能帮助您调试200行脚本。从你的目标1开始,在问题中加入你的输入和错误信息代码,并更详细地解释你所说的“不工作”是什么意思。你是对的。我只是有点太沮丧了,它不起作用,仅此而已@NeilSlaterbtw我会使用
SHIP_HASH={subside:2,destropher:3,…}
一种更简单、更可读的方法来初始化HASH。与数组相同:
[10,“]
数组相同。如果您的代码有效,则询问是否有更简单的方法可以立即解决堆栈溢出问题,而将问题置于堆栈溢出问题。Ruby是一种面向对象语言。不面向数组、不面向哈希、不面向字符串。我在你的代码中没有看到一个对象!(嗯,数字、字符串、数组和散列都是对象,但你知道我的意思。)慢一点。这里的人真的不可能帮助您调试200行脚本。从你的目标1开始,在问题中加入你的输入和错误信息代码,并更详细地解释你所说的“不工作”是什么意思。你是对的。我只是有点太沮丧了,它不起作用,仅此而已@NeilSlaterbtw我会使用
SHIP_HASH={subside:2,destropher:3,…}
一种更简单、更可读的方法来初始化HASH。与数组相同:
[10,“]
数组相同。如果您的代码有效,则询问是否有更简单的方法可以立即解决堆栈溢出问题,而将问题置于堆栈溢出问题。Ruby是一种面向对象语言。不面向数组、不面向哈希、不面向字符串。我在你的代码中没有看到一个对象!(数字、字符串、数组和散列都是对象,但你知道我的意思。)我需要使用一组
def
end
函数来执行它们吗@我不知道你在说什么。我建议用这一点,看看它是否更有意义。如果没有,那就针对你当时发现的问题问一个新问题。好!一个好的程序员最重要的特征之一是,他们努力,有时比其他时候更努力,自己去想办法。我们不断地被要求去发明,去从无到有地创造新事物,这需要创造力、逻辑和一种不择手段的态度(也知道什么时候去寻求帮助)。我需要使用一组
def
end
函数来执行它们吗@我不知道你在说什么。我建议用这一点,看看它是否更有意义。如果答案是否定的,那么就针对你当时发现的问题提出一个新问题
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