class Sokoban::Game
Public Class Methods
new()
click to toggle source
# File lib/sokoban.rb, line 30 def initialize @level = Level.new parse_opts # --level and --resume opts may change lnum @lnum = @level.lnum play end
Private Instance Methods
log_moves()
click to toggle source
# File lib/sokoban.rb, line 57 def log_moves @logger.debug @level.inspect if @options[:debug] end
parse_opts()
click to toggle source
# File lib/sokoban.rb, line 61 def parse_opts @options = {} @optparse = OptionParser.new do |opts| opts.banner = "Usage: #{BASENAME} [options]\n" opts.banner << "Controls: wasd, hjkl, number pad Move ^C Quit without save b Toggle batch mode r Restart u Undo q Quit\n" opts.banner << "Options:" opts.on("-h", "--help", "Display help") do puts opts exit end opts.on("-v", "--version", "Print version number") do puts "#{BASENAME} #{VERSION}" exit end opts.on("-b", "--batch", "Batch input mode") do $batch = true end opts.on("-d", "--debug", "Enable debug log") do @logger = Logger.new LOG_FILE @logger.level = Logger::DEBUG @logger.debug "Created logger" @logger.debug "#{BASENAME} #{VERSION}" @logger.debug "#{$0} --debug #{ARGV.join(" ")}" @options[:debug] = true end opts.on("-l N", "--level N", Integer, "Start at level N") do |n| @level = Level.new(n) @options[:level] = true end opts.on("-r", "--resume", "Resume saved game") do @level.load_game @options[:resume] = true end opts.on("-x") do $hax = true end end begin @optparse.parse! if @options[:level] && @options[:resume] raise ArgumentError, "Can't set --level and --resume. Choose one." end rescue OptionParser::InvalidOption, OptionParser::InvalidArgument, OptionParser::MissingArgument, RangeError, ArgumentError puts "#{@optparse}\n" puts "ERROR: #{$!}" exit end end
play()
click to toggle source
# File lib/sokoban.rb, line 40 def play loop do begin @lnum += 1 if @level.play rescue RuntimeError # Write log in case of quit log_moves exit end log_moves break if @lnum > 50 @level.restart(@lnum) end puts "You won Sokoban!" puts "やったね!" end