1. java -cp ./org/clojure/clojure/1.4.0/clojure-1.4.0.jar clojure.main 2. cut & paste your code in the REPL 3. type (start) [enter]
On Fri, Aug 31, 2012 at 3:36 AM, gearss <gearss8...@gmail.com> wrote: > I have a file named pong.clj, it isunder following, I want to know how can > I run it? > Thank you. > > -------- > (ns example.game.pong > (:use [penumbra opengl] > [clojure.contrib.def]) > (:require [penumbra [app :as app] [text :as text]])) > (def ball-width 0.03) > (def ball-height 0.03) > (def paddle-width 0.02) > (def paddle-height 0.15) > ;;; > (defn abs [x] (Math/abs x)) > (defn intersect-1d [[a b] [x y]] > (and (<= a y) (>= b x))) > (defn intersect-2d [[a b c d] [x y z w]] > (and (intersect-1d [a c] [x z]) > (intersect-1d [b d] [y w]))) > (defn reflector [[x y w h] f] > (let [r [x y (+ x w) (+ y h)]] > (fn [region velocity] > (if (intersect-2d region r) > (f velocity) > velocity)))) > (defvar boundaries > [(reflector [0 -1 1 1] (fn [[x y]] [x (abs y)])) > (reflector [0 1 1 1] (fn [[x y]] [x (- (abs y))])) > (reflector [-1 0 1 1] (fn [[x y]] [(abs x) y])) > (reflector [1 0 1 1] (fn [[x y]] [(- (abs x)) y]))]) > (defn update-ball [state dt] > (let [ball (concat (:p state) (map + (:p state) [ball-width > ball-height])) > v (reduce > #(%2 ball %1) (:v state) > (conj > boundaries > (reflector [0.01 (:left state) paddle-width paddle-height] > (fn [[x y]] [(abs x) y])) > (reflector [(- 0.99 paddle-width) (:right state) paddle-width > paddle-height] > (fn [[x y]] [(- (abs x)) y]))))] > (assoc state > :v v > :p (map + (:p state) (map (partial * dt) v))))) > (defn draw-ball [pos] > (push-matrix > (apply translate pos) > (draw-quads > (vertex 0 0) > (vertex ball-width 0) > (vertex ball-width ball-height) > (vertex 0 ball-height)))) > ;;; > (defn update-opponent-paddle [state] > (let [[x y] (:p state) > [vx vy] (:v state) > dt (/ (- 1 x) vx) > dy (- (+ y (* vy dt)) (:right state))] > (assoc state > :v-right (if (neg? vx) 0 (/ dy dt))))) > (defn update-player-paddle [state] > (assoc state > :v-left > (cond > (app/key-pressed? :up) -1 > (app/key-pressed? :down) 1 > :else 0))) > (defn update-paddle [dt v pos] > (min (- 1 paddle-height) (max 0 (+ pos (* dt v))))) > (defn draw-paddle [x y] > (push-matrix > (translate x y) > (draw-quads > (vertex 0 0) > (vertex paddle-width 0) > (vertex paddle-width paddle-height) > (vertex 0 paddle-height)))) > ;;; > (defn reset-game [state] > (assoc state > :v [0.4 0.8] > :p [0.5 0.5] > :left 0.5, :v-left 0.0 > :right 0.5, :v-right 0.0)) > (defn init [state] > (app/vsync! true) > (app/title! "Pong") > (app/periodic-update! 2 update-opponent-paddle) > (reset-game state)) > (defn reshape [[x y w h] state] > (ortho-view 0 1 1 0 -1 1) > state) > (defn update [[delta _] state] > (-> state > (update-player-paddle) > (assoc :left (update-paddle delta (:v-left state) (:left state))) > (assoc :right (update-paddle delta (:v-right state) (:right state))) > (update-ball delta))) > (defn display [[delta _] state] > (draw-ball (:p state)) > (draw-paddle 0.01 (:left state)) > (draw-paddle (- 0.99 paddle-width) (:right state)) > (app/repaint!)) > (defn start [] > (app/start > {:display display, :reshape reshape, :update update, :init init} > {})) > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en