在Ruby上非常新,并尝试将数组与嵌套数组进行比较
发布时间:2020-12-17 02:07:21 所属栏目:百科 来源:网络整理
导读:所以我正在构建一个tic tac toe游戏,我试图从我的板哈希中拉出键,然后将其与数组中的数组进行比较.问题在于获胜的组合都有3个值,但是可能需要玩家4或5次获胜,所以我想看看这些4或5值是否包含其中一个获胜组合(希望这是有意义的).具体问题是使用winner_check
所以我正在构建一个tic tac toe游戏,我试图从我的板哈希中拉出键,然后将其与数组中的数组进行比较.问题在于获胜的组合都有3个值,但是可能需要玩家4或5次获胜,所以我想看看这些4或5值是否包含其中一个获胜组合(希望这是有意义的).具体问题是使用winner_check方法,有没有办法让这个方法有效?
def initialize_board board = {} (1..9).each {|position| board[position] = ' ' } board end def empty_positions(board) board.keys.select {|position| board[position] != 'X' && 'O'} end def player_turn(board) puts "Let's play Tic Tac Toe! Pick a position 1-9 and try to beat me." position = gets.chomp.to_i board[position] = 'X' end def computer_turn(board) position = empty_positions(board).sample board[position] = 'O' end def winner_check(board) winning_combos = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,8],[3,6,7]] winning_combos.each {|combo|} if board.select { |k,v| v == 'X' }.keys.include?(combo) puts "You've won! Great job!" if board.select { |k,v| v == 'O' }.keys.include?(combo) puts "Looks like the computer outsmarted you,try again!" elsif puts "Looks like you've tied,try again!" end nil nil end def game_over?(board) empty_positions(board) == [] end def draw_board(board) puts puts " #{board[1]} | #{board[2]} | #{board[3]} " puts "---+---+---" puts " #{board[4]} | #{board[5]} | #{board[6]} " puts "---+---+---" puts " #{board[7]} | #{board[8]} | #{board[9]} " puts end board = initialize_board draw_board(board) until winner_check(board) || game_over?(board) player_turn(board) draw_board(board) winner_check(board) computer_turn(board) draw_board(board) winner_check(board) end 解决方法
我认为你是在正确的轨道上,但你有一些语法错误:
winning_combos.each {|combo|} if board.select { |k,v| v == 'X' }.keys.include?(combo) puts "You've won! Great job!" if board.select { |k,v| v == 'O' }.keys.include?(combo) puts "Looks like the computer outsmarted you,try again!" elsif puts "Looks like you've tied,try again!" end nil 在第一行,您过早关闭您的区块.该行末尾的}关闭块. 在最后一行,你有一个字面上的零,我认为这是你应该去的地方. 你也有两个ifs,应该是if,elsif. 语法错误已更正: winning_combos.each { |combo| if board.select { |k,v| v == 'X' }.keys.include?(combo) puts "You've won! Great job!" elsif board.select { |k,try again!" end } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |