【发布时间】:2021-02-28 16:15:43
【问题描述】:
我不知道如何退出游戏循环。我正在努力创建一个lose? 函数,我尝试像lose?(x) 那样做,当x==1 时返回true,但没有让它退出run 方法。这是我的 Game 类代码。
class Minesweeper
attr_accessor :board
def initialize
@board = Board.new
end
def run
puts "Welcome to minesweeper!"
x = nil
play_turn until win? || lose?(x)
end
def play_turn
board.render
pos, command = get_input
debugger
if !explode?(pos, command)
board.set_input(pos,command)
else
puts "You lose!"
lose?(1)
end
end
def explode?(pos, cmd)
board.grid[pos[0]][pos[1]].bomb && cmd == "reveal"
end
def get_input
pos = nil
command = nil
until pos && check_pos(pos)
puts "What position?"
pos = parse_pos(gets.chomp)
end
until command && check_command(command)
puts
puts "What would you like to do (e.g. reveal, flag... ~ else?)"
command = gets.chomp
puts
end
[pos, command]
end
#Some code here (check_pos, etc)
def lose?(x)
return true if x == 1
false
end
def win?
# board.all? {}
end
end
我之前在Board 类中有explode?,但是为了能够结束游戏,把它移到了这里。非常感谢任何帮助!
【问题讨论】:
-
它永远不会退出,因为在每个循环中你检查
lose?(x)并且x 总是相同的 -nil,所以你每次都得到错误。else内的else子句毫无意义 - 对于当前的until,您需要play_turn之外的此控制流才能工作。从技术上讲,您可以将lose(1)替换为play_turn内的exit并且您的代码应该可以工作(有点),但我建议您进行一些重构...... -
@KonstantinStrukov,你会建议什么样的重构?也许直到
win? || lose?
标签: ruby minesweeper