我正在处理的代码的一些摘要是几个命令行游戏,它继承自游戏类,提供大多数命令行游戏使用的方法和属性,即棋盘,配置菜单,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
我的问题是,有没有更好的方法来编写游戏循环方法而不是调用我希望子类具有的方法。我希望游戏循环具有游戏的基本结构,因此在伪代码中它将是
它按照我编写的方式工作,但我觉得必须有一种更好的方法来构建游戏循环而不检查方法是否已定义。另外,继承是实现游戏循环的好方法,还是有更好的方法,比如将哈希中的键映射到子类的方法。
感谢所有的帮助,谢谢大家。
答案 0 :(得分:1)
您可以在超类中定义那些实例方法,如display_main_menu
和move
,使用空实现,通过这样做,所有子类都保证拥有这些方法,但默认情况下什么都不做,所以你不需要检查这些方法的存在。子类可以覆盖这些方法以提供自己的功能。