LightTable과 Quil을 간략하게 소개하고 손쉽게 크리스마스 트리를 작성합니다.

11905 단어 Clojure
대단합니다. 메리 크리머스 매스!!!

LightTable과 Quil이 꽤 좋다고 느끼기 때문에, 그래서 간단하게 소개하고, 크리스마스 트리에서도 쓸까요, 라고 써 보았습니다.

LightTable과 Quil



글쎄, 우선 LightTable이지만 Clojure로 작성된 편집기입니다. Clojure로 작성된 편집기로서 실시간으로 프로그램을 평가하고 실제로 값을 보면서 소스를 편집할 수 있습니다. 설정등도 Clojure로 쓰여져 있고, 나는 Clojure를 쓰면, 이 에디터를 적극적으로 이용하고 있습니다. (Emacs도 사용하지만)

Quil은 Processing의 API를 이용하는 그래픽 라이브러리이며 Creative Coding에서의 이용 등 아트계의 프로그래밍을 할 때 잘 쓰이는 라이브러리입니다.

환경 구축



leiningen으로 쉽게 프로젝트를 만들 수 있습니다.
lein new quil advent-calendar-2015

lightTable에서 평가하면서 Quil을 씁니다.



이제 quil 프로젝트를 만든 후 LightTable을 시작하고 File -> Open Folder에서 이번에 만든 프로젝트의 폴더를 엽니 다.

그리고 Workspace가 표시되지 않으면 View -> Workspace에서 Workspace를 표시합시다. Workspace에서 core.clj를 선택하고 LightTable에서 core.clj를 열어 봅시다. 다음 상태가 되어야 합니다.



그 상태에서 OSX의 경우 Command + Shift + Return을 누르십시오. 그러면 core.clj의 소스 전체가 quil의 윈도우가 열리고, 또한 S 표현식의 평가 된 값의 반환 값, 편집기쪽에 표시되어야합니다.



도중 어쩐지 (+ 1 2)도 썼습니다. 훌륭합니다.

글쎄, 코드를 약간 바꿔 봅시다. 여기서 draw-state의 배경을 다시 씁니다. 그리고 다시 작성한 부분에 커서가 있는지 확인하면서 Command + Return을 해봅시다. 그러면 quil이 재부팅되지 않고 quil window 화면이 변경되고 있음을 확인할 수 있다고 생각합니다. 런타임에 코드가 변경되었습니다.



이런 느낌으로 Command+Return이나 Command+Shift+Return을 누르면서 런타임에 코드를 바꾸면서 Quil을 즐기세요.

크리스마스 트리를 작성합니다.



자, 크리스마스 트리를 제대로 썼습니다.
(ns advent-calendar-2015.core
  (:require [quil.core :refer :all]
            [quil.middleware :as m]))

(def w 700)
(def h 700)

(defn setup []
  ; Set frame rate to 30 frames per second.
  (frame-rate 2)

   {:frames 0})

(defn update-state [state]
  ; Update sketch state by changing circle color and position.
  {:frames (+ (:frames state) 1)})

(defn draw-state [state]
  (background 70)
  (no-stroke)


  (loop [y 0]
    (when (<= y h)
      (loop [x 0]
        (when (<= x w)
          (fill 20 400 200)


          (if (< (abs (- x (/ w 2))) (- (* y 0.4) 25))
            (if (or (< y (- h 80)) (< (abs (- x (/ w 2))) 50))
              (let [size (* (rand) 7)]
                (ellipse x y  size size))
              (ellipse x y 1 1)
              )
            (ellipse x y 1 1))
          (recur (+ x 5))))
      (recur (+ y 5)))))



(defsketch advent-calendar-2015
  :title "You spin my circle right round"
  :size [w h]
  ; setup function called only once, during sketch initialization.
  :setup setup
  ; update-state is called on each iteration before draw-state.
  :update update-state
  :draw draw-state
  :features [:keep-on-top]
  ; This sketch uses functional-mode middleware.
  ; Check quil wiki for more info about middlewares and particularly
  ; fun-mode.
  :middleware [m/fun-mode])

이런 식으로 나타납니다. (꼭 별을 써보세요)



메리 크리스마스 !!!

좋은 웹페이지 즐겨찾기