2015-04-07 2 views
1

Я пытаюсь установить xpos и ypos изменение в зависимости от направления, в которое игрок входит. Программе удается запросить Where to?, но позиция не изменяется. Сценарий также всегда по умолчанию соответствует последнему условию (puts("You're drunk.")).Изменение переменной на основе ввода пользователя

Например:

Однако, мой вывод:

> n 
You're drunk. 
0 
0 

Это мой текущий код:

north = "n" 
west = "w" 
south = "s" 
east = "e" 
xpos = 0 
ypos = 0 

puts("WHERE TO?") 
compass = gets 

if compass == north 
    ypos = ypos + 1 
elseif compass == west 
    xpos = xpos - 1 
elseif compass == south 
    ypos = ypos - 1 
elseif compass == east 
    xpos = xpos + 1 
else 
    puts("You're drunk.") #if the player does not submit a proper direction 

    puts(xpos) #for debugging. prints zero when called showing the player has not moved 
    puts(ypos) 
end 
+0

Просто небольшая сторона комментарий - в Ruby, вы не всегда нужны скобки вокруг аргументов функции. Например, большинство ваших 'puts (...)' здесь могут стать 'puts ...'. Я заметил, что это похоже на способ Ruby делать что-то, хотя ваш код по-прежнему верен. –

+1

Вы забыли «chomp!» Ваш вход. – squiguy

+0

Еще одно примечание: это 'elsif', а не' elseif', по крайней мере, насколько я знаю. –

ответ

0

Похоже, у вас есть два основных проблемы, по крайней мере, я вижу. Сначала elseif должен быть elsif. Я удивлен, что вы не получаете синтаксическую ошибку.

Во-вторых, Kernel::gets возвращает следующую введенную строку, до и в том числе linebreak. Это означает, что вам нужно удалить строку в конце, так что сравнение с строками, которые не имеют \r\n или \n, в зависимости от вашей платформы, можно сравнить. Это очень просто: Просто замените

compass = gets 

с

compass = gets.chomp 

(String#chomp reference)

В качестве альтернативы, если вы хотите, чтобы избавиться от всех пробелов до и после того, как вы могли бы использовать

compass = gets.strip 

(String#strip reference)

+0

Лучше использовать 'chomp' в этой ситуации, так как он удалит разделитель записей только в том случае, если пользователь хочет сохранить пробел. – squiguy

+0

@squiguy Это зависит от случая. Например, если OP хочет удостовериться, что даже случайные пробелы не влияют на выбранную опцию, тогда лучше всего использовать полосу. Однако, если он хочет пробелы, то да, chomp лучше. –

1

Как указывали другие, это, вероятно, отсутствующие chomp и elseif.

Просто предложение, но это взывает к case высказывания:

case compass 
    when 'north' 
    ypos = ypos + 1 
    when 'west' 
    xpos = xpos - 1 
    when 'south' 
    ypos = ypos - 1 
    when 'east' 
    xpos = xpos + 1 
else 
    puts("You're drunk.") #if the player does not submit a proper direction 
    puts(xpos)#for debugging. prints zero when called showing the player has not moved 
    puts(ypos) 
end 
Смежные вопросы