加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读