gpt4 book ai didi

ruby - 用 ruby 做一个战舰游戏

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:06 24 4
gpt4 key购买 nike

我正在学习编写 Ruby 代码并尝试制作一款战舰游戏。现在遇到了一些困难(在Github上找了很多实现,但是看不懂)。

我有一 block 10*10 的棋盘,现在我正在尝试实现在 field 上行走的算法。例如:我在场上处于x位置,如何查看A1单元格的可用性?所以这是一个变体......但是如何制作通用方法? (当我选择一个位置时,我需要检查周围的 8 个单元格是否有空闲空间用于下一个单元格)。

def test(postition)
letter = position[0]

# 1 2 3
# A O . .
# B x . .
# C . . .

keys = board.keys
index = keys.find_index(letter)
prev_key = keys[index - 1] #up-down
unless prev_key.nil?
is_ship_placed = board[prev_key][postition[1]] #left-right
end

# 1 2 3
# A O . .
# B . . .
# C . . .

end

All my code for now is in ideone.com

如果有人能帮助我,我将不胜感激!

附言请原谅我的英语。

最佳答案

我已将@JustinWood 的重要建议扩展到此答案中。您会发现将您的棋盘表示为数组而不是哈希更容易。

所以改变

board = { a: [false, false, false, false, false, false, false, false, false, false], \
b: [false, false, false, false, false, false, false, false, false, false], etc.

类似于这个二维数组。 (列表的列表。)

board = [[false, false, false, false, false, false, false, false, false, false],
[false, false, false, false, false, false, false, false, false, false],
.......... ]]

当然,您可以自动填充它,而不是将 10 行 false 复制粘贴到您的源代码中。这有效:

blank_row = Array.new(10,false)
board = Array.new(10) { blank_row.clone }

然后你可以用算术在棋盘上导航,检查周围的 8 个方 block 。你会做这样的事情:

def test (position)
x, y = position
return true if board[y][x]
return true if board[y-1][x-1]
return true if board[y-1][x]
....
false
end

添加合适的守卫来处理边缘,并使其自动化,而不是输入所有 9 种情况。

如您所见,当您将哈希更改为数组时,这意味着您必须更改游戏中使用棋盘的其他部分。例如,您已经知道如何遍历您的哈希(例如更改它)

board.each do |key, row|
row.each do |v|
# do something with cell v and build a new row
end
# insert the new row at board[key]
end

你可以像这个例子一样迭代一个二维数组

board.each.with_index do |row, y|
row.each.with_index do |v, x|
# change a true cell to 'S' and false to '.'
if v
board[y][x] = 'S'
else
board[y][x] = '.'
end
end
end

关于ruby - 用 ruby 做一个战舰游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25163039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com