Запутанный поток управления (Ruby)

Я пытаюсь создать игру на Ruby, включающую выбор чисел в определенном порядке и получение правильной последовательности за ограниченное количество попыток, бла, бла, бла. Моя проблема заключается в том, какие числа я предполагаю, они не добавляются к переменной @correct_r и не отображаются, если они находятся в правильном положении.

Я почти уверен, что где-то там отсутствует инструкция _2 _ / _ 3_, но не знаю где. Любая помощь приветствуется.

Код

#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

person Touka    schedule 28.04.2015    source источник
comment
Префикс «@» означает, что это переменная экземпляра класса. Зачем вы это используете?   -  person Yury Bayda    schedule 29.04.2015
comment
@megabyde это глобальная переменная, не так ли?   -  person Touka    schedule 29.04.2015
comment
глобальные переменные используют префикс '$'   -  person Yury Bayda    schedule 29.04.2015


Ответы (1)


Ваша проблема заключается в различных типах переменных последовательности и предположений. Последовательность - это массив целых чисел, а предположение - это массив строк. Вам нужно преобразовать их в один и тот же тип.

guess = guess.map(&:to_i)
person Michał Młoźniak    schedule 28.04.2015