Skip to content

Instantly share code, notes, and snippets.

@gigasquid
Created April 3, 2011 21:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gigasquid/900809 to your computer and use it in GitHub Desktop.
Save gigasquid/900809 to your computer and use it in GitHub Desktop.
April Showers Bring May Flowers
;;;;April Showers bring May Flowers
(ns my.april.showers)
(def sleep-time 20)
(def frame (java.awt.Frame.))
(defn show-frame [frame x y]
(doto frame
(.setVisible true)
(.setSize (java.awt.Dimension. x y)) ))
(defn setup [g]
(doto g
(.setColor (java.awt.Color. 255 255 255))
(.fillRect 0 0 500 500)))
(defn draw-text [g]
(let [font (java.awt.Font. "Serif" java.awt.Font/PLAIN 75)]
(doto g
(.setFont font)
(.setColor (java.awt.Color/BLUE))
(.drawString "April Showers" 40 250))))
(defn draw-grass [g max]
(.setColor g (java.awt.Color/GREEN))
(dotimes [n max]
(let [x (rand-nth (range 0 500))
width (rand-nth (range 1 20 ))]
(.fillArc g x 400 width 500 100 100))))
(defn draw-raindrop [g x y color]
(.setColor g color)
(.fillOval g x y 3 5 ))
(defn draw-raindrop-fall [_ g x]
(dotimes [n 16]
(let [y (* n 25)
old-color (java.awt.Color/WHITE)
rain-color (java.awt.Color/BLUE)]
(do
(draw-raindrop g x y rain-color)
(. Thread (sleep sleep-time))
(draw-raindrop g x y old-color)
(draw-text g)))))
(defn make-it-rain [g num-raindrops]
(let [rainagents (vec (repeat num-raindrops (agent nil)))]
(dorun
(pmap
#(send-off % draw-raindrop-fall g (rand-nth (range 0 500)))
rainagents))))
(defn april-showers [] (do
(show-frame frame 500 500)
(def g (.getGraphics frame))
(setup g)
(draw-text g)
(draw-grass g 700)
(make-it-rain g 50)))
(april-showers)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment