 
 (defn tick! []
   (move! world-atom :down)
-  (let [tick-frequency (- initial-tick-frequency
-                          (-> world-atom deref :score (* 10)))]
+  (let [tick-frequency (max (- initial-tick-frequency
+                               (-> world-atom deref :speed))
+                            min-tick-frequency)]
     (js/setTimeout tick! tick-frequency)))
 
 (defonce game-loop

            (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))
                                #{})))))

(defn clear [{:keys [grid] :as world}]
  (-> world

  (:require [reagent.core :as r]))

(defonce initial-tick-frequency 500)
(defonce min-tick-frequency 50)

(defonce width 10)
(defonce height 20)

(defonce empty-grid
  (vec (take height (repeat (vec (take width (repeat \ )))))))

(defonce empty-world
  {:grid  empty-grid
   :speed 0})

(defonce blocks [["IIII"]
                 ["JJJ"
