Module: PuzzleGenerator

Defined in:
lib/puzzle_generator.rb,
lib/puzzle_generator/map.rb,
lib/puzzle_generator/misc.rb,
lib/puzzle_generator/chain.rb,
lib/puzzle_generator/puzzle.rb,
lib/puzzle_generator/chained_map.rb,
lib/puzzle_generator/colored_map.rb

Overview

puzzle generator for shooting-cubes, example usage:

PuzzleGenerator.debug = true
pg = PuzzleGenerator::Puzzle.new :level => 4, :timeout => 2, :invoke_max => 5
begin
  pg.generate
  pg.display_map
rescue Ludy::Timeout => e
  puts e
ensure
  p pg.tried_times
  p pg.tried_duration
end

Defined Under Namespace

Modules: DisplayMap, MapUtils Classes: Chain, ChainedMap, ColoredMap, GenerationFailed, Map, Puzzle

Constant Summary collapse

LastTriedInfo =

:nodoc:

{}
DefaultOption =
{:width => 6, :height => 10, :level => 4, :colors => 4,
:invoke => 3, :invoke_max => 5, :timeout => 5}

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.debugObject

specify whether to show the answer in the puzzle



15
# File 'lib/puzzle_generator/misc.rb', line 15

def debug; @debug || false; end

Class Method Details

.generate(timeout = 5, &generator) ⇒ Object

generate someing with generator with timeout, used in Puzzle#generate



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/puzzle_generator.rb', line 37

def self.generate timeout = 5, &generator
  timer = Ludy::Timer.new(timeout).start
  tried_times = 1
  begin
    result = generator.call
    until result.result_map.kind_of? Array
      tried_times += 1
      result = generator.call
    end
  ensure
    # timer.stop
    LastTriedInfo.merge! :tried_times => tried_times, :tried_duration => timer.total_time
  end
  result
end

.generate_chained_map(option = {}) ⇒ Object

:nodoc:



27
28
29
# File 'lib/puzzle_generator.rb', line 27

def self.generate_chained_map option = {} #:nodoc:
  generate_klass ChainedMap, option
end

.generate_klass(klass, option = {}) ⇒ Object

:nodoc:



30
31
32
33
# File 'lib/puzzle_generator.rb', line 30

def self.generate_klass klass, option = {} #:nodoc:
  option.reverse_merge! :timeout => 5
  generate(option[:timeout]){ klass.new option }
end