2015-04-28 2 views
0

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

Я почти сертифицирован. Мне не хватает if/else заявление где-то, но не знаю где. Любая помощь приветствуется.

Код

#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 
+0

Префикс '@' означает, что это переменная экземпляра класса. Почему вы это используете? – megabyde

+0

@megabyde это глобальная переменная, нет? – Touka

+0

глобальные переменные используют префикс $ $ – megabyde

ответ

1

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

guess = guess.map(&:to_i) 
Смежные вопросы