       (while true
         (alt!
           game-events ([msg] (handle-game-event! msg))
-          player-events ([coord] (update-game! turn/play-move coord))
+          player-events ([coord] (play-game-turn! coord))
           (async/timeout ai-move-delay) ([_] (if (is-ai? @current-player) (handle-ai!)))
           )))
 

(defn new-game []
  (list (with-ai-data (turn/new-init-turn))))

(defn cancel-last-move ;; TODO - It needs the ai: how to move it in the game? undo then undo-while
  [old-turns]
  (let [ai-turn? #(contains? (:ai-players %) (:player %))


(def ai-move-delay 1000)

(defn play-game-turn! [move]
  (swap! app-state update-in [:games] play-turn move))

(defn- handle-ai! []
  (let [ai-algo (get @ai-players @current-player)
        move (ai-algo @game @current-player)]
    (play-game-turn! move)))

(defn- handle-game-event!
  [msg]
