Created
April 3, 2011 21:02
-
-
Save gigasquid/900809 to your computer and use it in GitHub Desktop.
April Showers Bring May Flowers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;;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