# Remember shoes - a memory clone
# by jonelf at gmail.com
# 2008-11-18
# License: http://en.wikipedia.org/w/index.php?title=MIT_License&oldid=250217282

Shoes.app(:title => "Remember Shoes", :width => 1280, :height =>960, :resizable => false) {
  background white
  filenames = %w(1001.jpg 2001.jpg 3001.jpg 4001.jpg 5001.jpg 6001.jpg 7001.jpg 8001.jpg)
  @back_image = "img/back.jpg"
  stack (:height=>0) { @nomatch = video "sounds/sad.wav"
    @paired = video "sounds/paired.mp3"
    @gamedone = video "sounds/hallonsaft.mp3" }

  @number_of_images = filenames.length
  @found_pairs = 0
  @clicks = 0
  @viewed_card = nil
  @in_click_event = false
  @in_no_match = false

  @memories = (filenames*2).collect {|filename| Memorycard.new(filename)}

  @memories.each do |m|
    m2 = @memories[(rand(srand)%@memories.length)]
    mf = m.filename
    m.filename = m2.filename
    m2.filename = mf
    m.image = image @back_image, :click => proc { card_click(m) }, :width=>320, :height=>240
  end

  def card_click(memcard)
    if !(memcard.paired? || memcard.flipped?)
      @clicks+=1
      memcard.image.path = "img/#{memcard.filename}"
      if !@viewed_card.nil?
        if (@viewed_card.filename==memcard.filename)
          memcard.paired = true
          @viewed_card.paired = true
          @viewed_card = nil
          @found_pairs+=1
          if @found_pairs==@number_of_images
            @gamedone.play
            sleep 5
            if confirm("You finished in " + @clicks.to_s + " clicks.\n\nPlay again?")
                @clicks=0
                @memories.each do |m|
                  m.paired = false
                  m.flipped = false
                  m.image.path = @back_image
                  m2 = @memories[(rand(srand)%@memories.length)]
                  mf = m.filename
                  m.filename = m2.filename
                  m2.filename = mf
                end
                @found_pairs = 0
                @gamedone.stop
            else
              exit()
            end
          end
          @paired.play
        else
          @in_no_match = true
          @nomatch.play
          timer (1) {
            memcard.image.path = @back_image
            memcard.flipped = false
            @viewed_card.image.path = @back_image
            @viewed_card.flipped = false
            @viewed_card = nil
            @in_no_match = false
            @in_click_event = false
          }
        end
      else
        @viewed_card = memcard
        memcard.flipped = true
      end
    end
  end
}

class Memorycard  
  attr_accessor :filename, :paired, :flipped, :image
  def initialize(filename)  
     @filename = filename
     @paired = false
     @flipped = false
  end
  def paired?
      @paired
  end
  def flipped?
      @flipped
  end
end