             (drop (+ y (count block)) grid))))
 
 (defn score [{:keys [grid] :as world}]
-  (let [grid (render world)]
-    (assoc world
-           :grid grid
-           :marked (->> grid
-                        (map vector (iterate inc 0))
-                        (reduce (fn [marked [i grid-line]]
-                                  (if (every? (partial not= \ ) grid-line)
-                                    (conj marked i)
-                                    marked))
-                                #{})))))
+  (let [grid   (render world)
+        marked (->> grid
+                    (map vector (iterate inc 0))
+                    (reduce (fn [marked [i grid-line]]
+                              (if (every? (partial not= \ ) grid-line)
+                                (conj marked i)
+                                marked))
+                            #{}))]
+    (-> world
+        (assoc :grid grid
+               :marked marked)
+        (update :speed + (if (empty? marked) 0 10)))))
 
 (defn clear [{:keys [grid] :as world}]
   (-> world

       [:a.title
        {:href     "#"
         :on-click #(reset! world-atom
                            (new-block {:grid empty-grid}))}
        "GAME OVER"])]))

(defonce world-atom (r/atom (new-block {:grid empty-grid})))

(defonce key-listener
  (.addEventListener (.-body js/document) "keydown"


(defn tick! []
  (move! world-atom :down)
  (let [tick-frequency (max (- initial-tick-frequency
                               (-> world-atom deref :speed))
                            min-tick-frequency)]
    (js/setTimeout tick! tick-frequency)))

(defonce game-loop
