试图使用多维哈希。还有一个循环问题

时间:2017-08-05 17:51:07

标签: ruby

检查多组值时遇到一些问题。

loop do
  turns(player1,player2)
  break puts "you win!"  if @entries.values[0..2].all?{|move| move == "X"}
end

我想使用像这样的多维哈希。我的语法错了,或者这只是你不能做的事情?

loop do
  turns(player1,player2)
  break puts "you win!"  if @entries.values[[0..2][3..5]].all?{|move| move =="X"}
end

另一个问题是当值[0..2]已经等于“x”时,循环在下一次转弯之前不会中断。

这是repl https://repl.it/JrQe/57

源代码

@entries = {1=>" ", 2=>" ", 3=>" ", 4=>" ", 5=>" ", 6=>" ", 7=>" ", 8=>" ", 9=>" "}

puts "###########################################"
puts "                tic-tac-toe"

puts "\t\t 1 | 2 | 3 "
puts "\t\t-----------"
puts "\t\t 4 | 5 | 6 "
puts "\t\t-----------"
puts "\t\t 7 | 8 | 9 "
puts" ###########################################"

class Players
  attr_accessor :name, :piece
  end

puts "Player one, what is your name?"
player1 = Players.new
player1.name = gets.chomp
player1.piece = "X"
puts "Hello #{player1.name}, you have been assigned #{player1.piece}."

puts "Player two, what is your name?"
player2 = Players.new
player2.name = gets.chomp  
player2.piece = "O"
puts "Hello #{player2.name}, you have been assigned #{player2.piece}."

  def grid
puts "\t\t #{@entries[1]} | #{@entries[2]} | #{@entries[3]} "
puts "\t\t-----------"
puts "\t\t #{@entries[4]} | #{@entries[5]} | #{@entries[6]} "
puts "\t\t-----------"
puts "\t\t #{@entries[7]} | #{@entries[8]} | #{@entries[9]} "
end 

def choice(grid)
  name = gets.chomp
  name2 = name.to_i
    @entries.each do |key,value|
      if name2 == key 
     @entries[key]= "X"
     end
   end
 end

def choice2(grid)
  name = gets.chomp
  name2 = name.to_i
    @entries.each do |key,value|
      if name2 == key 
     @entries[key]= "O"
     end
   end
 end

def turns(player1,player2)
  puts "#{player1.name} make your move"
  player1 = choice(grid)
  puts "#{player2.name} make your move"
  player2 = choice2(grid)
end  

def win


loop do
  turns(player1,player2)
  break puts "you win!"  if @entries.values[0..2].all?{|move| move == "X"}
end

1 个答案:

答案 0 :(得分:1)

我认为您提出的具体问题的答案如下:

|        route | average |
|--------------|---------|
|    A21>B15>> |       3 |
| A21>B15>C09> |       2 |

此外,在尾随rows = [[0..2],[3..5],[6..8]] cols = [[0,3,6],[1,4,7],[2,5,8]] diag = [[0,4,8],[2,4,6]] (rows + cols + diag).any?{ |line| line.all?{ |cell| @entries[cell] == "X"} } 语句之前,您不能有两个表达式breakputs。试试这个:

if