2015-07-12 3 views
0

Небольшое резюме кода, над которым я работаю, - это несколько игр с командной строкой, которые наследуют от игрового класса, который поставляет методы и атрибуты, используемые большинством игр в командной строке, то есть панель, меню конфигурации, check_for_winner , игровой цикл и т. д. Вместо того, чтобы предлагать пользователю вводить пробел с помощью gets, я создал плату и меню для взаимодействия с клавишами со стрелками и отображения выделения по выбранному в данный момент параметру. Вместо того, чтобы переписывать все эти циклы для сбора ввода со стрелкой, не требуя нажатия клавиши возврата, я решил создать родительский класс игры, который будет запускать методы своего подкласса в игровом цикле. Ниже game_loop код я работаю сДобавление методов подкласса к игровому циклу родителей

def game_loop 
    display_main_menu if defined? display_main_menu 
    begin 
     space = @board.interact {|char| @quit = true if char == 'q'} 
     move(space) if defined? move 
    end until @quit || @winner != nil || (end_game if defined? end_game) 
    print %x{clear} 
    game_summary if defined? game_summary 
    puts "Play Again? y/n".center(80) 
    restart if defined? restart 
    game_loop if get_char == 'y' 
end 

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

  1. дисплея главного меню, которые регулируют правила игр
  2. После того, как пользователь выбирает игру «Play "вариант, получить игрок двигаются
  3. Повторите шаг 2, пока победитель найден или нет больше движений
  4. Показать резюме в игре, то есть каждый игрок выигрыш, проигрыш, и рисует рассчитывать
  5. Попросите, чтобы играть снова, если не вернуться к выбору игры

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

Любая помощь приветствуется, благодарю вас всех заблаговременно.

ответ

1

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

Смежные вопросы