class MonkeyMusic::Runner
Public Class Methods
new()
click to toggle source
# File lib/monkey_music/runner.rb, line 11 def initialize @opt_parser = OptionParser.new @players = [] @delay = 1 init_parser(@opt_parser) end
Public Instance Methods
run(ui_class)
click to toggle source
# File lib/monkey_music/runner.rb, line 18 def run(ui_class) if ARGV[0] == "demo" puts "\tcreate ./levels" FileUtils.cp_r( File.join( File.dirname(__FILE__), "../../levels" ), Dir.getwd ) puts "\tcreate ./demo_players" FileUtils.cp_r( File.join( File.dirname(__FILE__), "../../demo_players" ), Dir.getwd ) puts "\tcreate ./#{@@default_user}" FileUtils.cp( File.join( File.dirname(__FILE__), "../../users", @@default_user ), Dir.getwd ) exit end @opt_parser.parse! # Handle fallback to default level @level_file ||= File.join( File.dirname(__FILE__), "../../levels", @@default_level ) # Handle fallback to default user @user_file ||= File.join( File.dirname(__FILE__), "../../users", @@default_user ) if (not game_is_playable?) puts @opt_parser exit end # Load user user = User.new user.load_from_file(@user_file) # Load level level = Level.new(@players, user) level.load_from_file(@level_file) # Initialize UI ui = ui_class.new(level, @players, @delay, @clear) # Start game @game = Game.new(level, @players, ui) @game.start end
Private Instance Methods
game_is_playable?()
click to toggle source
# File lib/monkey_music/runner.rb, line 79 def game_is_playable? (defined? @user_file) && (defined? @level_file) && (not @players.empty?) end
init_parser(opts)
click to toggle source
# File lib/monkey_music/runner.rb, line 85 def init_parser(opts) opts.banner = "Usage: monkeymusic [demo] [-p PLAYER_FILE -n PLAYER_NAME [-u USER_FILE] [-l LEVEL_FILE]]" opts.on('-p', '--player FILE', 'The path to a player program.') do |file| player_file = File.join(Dir.getwd, file) @players << Player.new(player_file) end opts.on('-n', '--player-name NAME', 'Set the name of the last entered player.') do |name| @players[-1].monkey.name = name unless @players.empty? end opts.on('-c', '--command-line-argument ARG', 'An argument that will be passed to the last entered program on every execution.') do |arg| @players[-1].command_line_argument = arg end opts.on('-l', '--level LEVEL', 'The level to play.') do |file| @level_file = File.join(Dir.getwd, file) end opts.on('-u', '--user USER', 'The user the players will recommend music for.') do |user| @user_file = File.join(Dir.getwd, user) end opts.on('-d', '--delay DELAY', OptionParser::DecimalNumeric, 'The delay (in seconds) between each round.') do |delay| @delay = delay end opts.on('-c', '--clear', 'Clear the console after each turn.') do @clear = true end opts.on('-v', '--version', 'Show the current version.') do |password| puts '0.0.11' # TODO: Find out how to extract version from GemSpec exit end opts.on_tail('-h', '--help', 'Show this message.') do puts opts exit end end