 ; ----------------------------------------------------------
 ; mutable model
 ; ----------------------------------------------------------
-(defn update-positions! [ship asteroid]
+(defn update-positions! [ship asteroids]
   (dosync
     (alter ship shoot)
     (alter ship move)
-    (alter asteroid move))
-  nil)
+    (alter asteroids (partial map move))
+    nil))
 
 (defn do-action!
   ([ship {:keys [rotation acceleration shoot] :as action} modifier]

  )

(defn polygon-to-screen [pol mat]
  (let [f (fn [v] (->> (conj v 1)
                       (mat*vec mat)
                       (take 2)
                       (round)))]

; game
; ----------------------------------------------------------

(defn game-panel [frame ship asteroids]
  (proxy [JPanel ActionListener KeyListener] []
    (paintComponent [g]                                     ; <label id="code.game-panel.paintComponent"/>
      (proxy-super paintComponent g)
      (paint g @ship)
      (doseq [asteroid @asteroids]
        (paint g asteroid)))
    (actionPerformed [e]                                    ; <label id="code.game-panel.actionPerformed"/>
      (update-positions! ship asteroids)
      (when (lose? @ship)
        (reset-game! ship asteroids)
        (JOptionPane/showMessageDialog frame "You lose!"))
      (when (win? @ship)
        (reset-game! ship asteroids)
        (JOptionPane/showMessageDialog frame "You win!"))
      (.repaint this))
    (keyPressed [e]
