Вы задали очень самоуверенный, открытый вопрос. Это не лучший вопрос для переполнения стека. Но я сделаю это.
Во-первых, я бы выделил ваш код оценки в функцию. Примерно так:
def battle(p1, p2)
if p1 == p2
'Tie!'
elsif p1 == 'paper' && p2 = 'rock'
'Paper smothers Rock...Player 1 wins!"
elsif etc..
end
Это позволит вашему основному циклу стать очень маленьким ... что почти всегда хорошо. Это также сделает вашу жизнь прекрасной, когда вы начнете писать модульные тесты для своего кода.
Что касается использования тестов в конце игры, используйте ||
для сравнения сразу нескольких вещей, например player1_val == 9 || player2_val == 9
Я подозреваю, что ваш код не будет работать так, как естьна данный момент написано. Попробуйте запустить эту строку построчно в отладчике ... или, проще, поместите puts "var is #{var}"
в разных местах, сбрасывая значения интересных переменных. Любой подход быстро выявит любые ошибки и сделает исправление очевидным.
Что касается работы в Ruby, рассмотрите возможность использования символов вместо строк для массива параметров. Что-то вроде [:paper, :rock, :scissors]
. Избегайте магических чисел в вашем коде. Каждый раз, когда в вашем коде есть буквальное число (возможно, отличное от 1 или 0), велики шансы, что у вас есть магическое число, и оно должно работать, чтобы сделать его константой, символом или уравнением.
redo
не является широко используемой командой Ruby. (Я должен был посмотреть его, чтобы увидеть, что он делает!) У вас уже есть петля ... вам не нужно повторять, чтобы выполнить свою миссию.
Помимо хорошей практики кодирования, мы также можем поговорить о UX / UI (пользовательский интерфейс / пользовательский интерфейс). Это большая игра для этой игры ... важно, чтобы игроки не могли видеть информацию друг друга. Проведите исследование на getch
. Также подумайте о том, чтобы дать каждому игроку половину клавиатуры ... "ASD" для трех вариантов выбора одного игрока и "JKL" для другого игрока.
Это набор идей, которые вы можете использовать для улучшения своей игры! Удачи, и не стесняйтесь продолжать после того, как вы немного поработали.