Flujo de control confuso (Ruby)

2023-01-25 04:19:05

Estoy tratando de crear un juego en Ruby que implique seleccionar números en un orden determinado y obtener la secuencia correcta en un número limitado de intentos, bla, bla, bla. Mi problema es que, independientemente de los números que adivine, no se suma a la variable @correct_r ni se muestra si está en la posición correcta.

Estoy casi seguro de que me falta una declaración if/else en alguna parte, pero no estoy seguro de dónde. Cualquier ayuda es apreciada.

Código

#by Touka, ©2015
actions = (0..9).to_a
@sequence = []
4.times do |key|
    key = actions.sample
    @sequence << key
end
@fails_left = 10
@correct_a = 0
@correct_r = 0
@a = " "
@b = " "
@c = " "
@d = " "
def sel
    system "cls"
    puts """
    __________________________________
   /   ___     ___     ___     ___    \
   |  |   |   |   |   |   |   |   |   |
   |  | #{@a} |   | #{@b} |   | #{@c} |   | #{@d} |   |
   |  |___|   |___|   |___|   |___|   |
   \__________________________________/

Tries left:                      #{@fails_left}
Correct numbers (in wrong spot): #{@correct_r}

Enter guess (x x x x):"""
    guess = gets.chomp
    guess = guess.split(" ")
    case guess[0]
    when @sequence[0]
        @correct_a += 1
        @a = "#"
    when @sequence[1]
        @correct_r += 1
    when @sequence[2]
        @correct_r += 1
    when @sequence[3]
        @correct_r += 1
    end
    case guess[1]
    when @sequence[0]
        @correct_r += 1
    when @sequence[1]
        @correct_a += 1
        @b = "#"
    when @sequence[2]
        @correct_r += 1
    when @sequence[3]
        @correct_r += 1
    end
    case guess[2]
    when @sequence[0]
        @correct_r += 1
    when @sequence[1]
        @correct_r += 1
    when @sequence[2]
        @correct_a += 1
        @c = "#"
    when @sequence[3]
        @correct_r += 1
    end
    case guess[3]
    when @sequence[0]
        @correct_r += 1
    when @sequence[1]
        @correct_r += 1
    when @sequence[2]
        @correct_r += 1
    when @sequence[3]
        @correct_a += 1
        @d = "#"
    end
    ct = @correct_r + @correct_a
    if ct == 0
        @fails_left -= 1
    else
        hi = " "
    end
    sel
end
sel

- Touka

Source
zh
Responder


0
  • Su problema radica en diferentes tipos de secuencias y variables de conjetura. La secuencia es una matriz de enteros y la conjetura es una matriz de cadenas. Debe convertirlos al mismo tipo.

    guess = guess.map(&:to_i)