[ create a new paste ] login | about

Link: http://codepad.org/GZnyNlBF    [ raw code | output | fork ]

aaronla - Ruby, pasted on Aug 1:
# 
# statemachine demo
#

$sprites = []

def main()
    Sprite.new(2, 5)
    Sprite.new(5, 14)
    Sprite.new(10, 2)
    animate
    nil
end

# each sprite must wait some number of frames,
# then 'pop' up 3 steps, down 3 steps, and disappear
class Sprite
    def step()
        if @state == 0 #sleep for @wait frames
            @wait -= 1
            if @wait == 0
                @state = 1
                @wait = 0
            end
        elsif @state == 1 #move forward two
            @wait += 1
            @x += 2
            if @wait == 2
                @state = 2
                @wait = 0
            end
        elsif @state == 2 #move back two
            @wait += 1
            @x -= 2
            if @wait == 2
                @state = 3
            end
        else
            self.die() #then die
        end
    end
    def initialize(x, wait)
        @x = x
        @wait = wait
        @state = 0
        $sprites.push self
    end
    def get_x()
        @x
    end
    def die()
        $sprites.delete self
    end
end

def render
  frame = [' ']*39
  for s in $sprites
      frame[s.get_x] = '*'
  end
  puts frame.join 
end

def animate ()
  20.times do # 20 frames of animation
      render()
      sprites = $sprites.clone
      sprites.each do |s|
          s.step()
      end
  end
end

main


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  *  *    *                            
  *  *    *                            
  *  *    *                            
  *  *      *                          
  *  *        *                        
  *  *      *                          
    **    *                            
     **                                
    **                                 
  *  *                                 
     *                                 
     *                                 
     *                                 
     *                                 
     *                                 
       *                               
         *                             
       *                               
     *                                 
                                       


Create a new paste based on this one


Comments: