class Theseus::Formatters::ASCII::Delta

Renders a DeltaMaze to an ASCII representation, using 4 characters horizontally and 2 characters vertically to represent a single cell.

       __
     /\  /
    /__\/
   /\  /\ 
  /__\/__\ 
 /\  /\  /\ 
/__\/__\/__\

You shouldn't ever need to instantiate this class directly. Rather, use DeltaMaze#to(:ascii) (or DeltaMaze#to_s to get the string directly).

Public Class Methods

new(maze, options={}) click to toggle source

Returns a new Delta canvas for the given maze (which should be an instance of DeltaMaze). The options parameter is not used.

The returned object will be fully initialized, containing an ASCII representation of the given DeltaMaze.

Calls superclass method Theseus::Formatters::ASCII::new
# File lib/theseus/formatters/ascii/delta.rb, line 25
def initialize(maze, options={})
  super((maze.width + 1) * 2, maze.height * 2 + 1)

  maze.height.times do |y|
    py = y * 2
    maze.row_length(y).times do |x|
      cell = maze[x, y]
      next if cell == 0

      px = x * 2

      if maze.points_up?(x, y)
        if cell & Maze::W == 0
          self[px+1,py+1] = "/"
          self[px,py+2] = "/"
        elsif y < 1
          self[px+1,py] = "_"
        end

        if cell & Maze::E == 0
          self[px+2,py+1] = "\\"
          self[px+3,py+2] = "\\"
        elsif y < 1
          self[px+2,py] = "_"
        end

        if cell & Maze::S == 0
          self[px+1,py+2] = self[px+2,py+2] = "_"
        end
      else
        if cell & Maze::W == 0
          self[px,py+1] = "\\"
          self[px+1,py+2] = "\\"
        elsif x > 0 && maze[x-1,y] & Maze::S == 0
          self[px+1,py+2] = "_"
        end

        if cell & Maze::E == 0
          self[px+3,py+1] = "/"
          self[px+2,py+2] = "/"
        elsif x < maze.row_length(y) && maze[x+1,y] & Maze::S == 0
          self[px+2,py+2] = "_"
        end

        if cell & Maze::N == 0
          self[px+1,py] = self[px+2,py] = "_"
        end
      end
    end
  end
end