    :looser :empty
    :taken [pos]})
 
+(defn with-available-moves
+  "Compute all available moves on the board"
+  [{:keys [board] :as game}]
+  (merge game
+    {:moves
+     (into {}
+       (map (juxt identity #(available-moves-at board %)))
+       all-positions)}
+    ))
+
 
 ;; -----------------------------------------
 ;; ON PLAYER MOVE

(defn play-move
  "On player playing the move [x y]"
  [{:keys [player board] :as game} [x y]]
  (if-let [moves (get (available-moves-at board [x y]) player)]
    (-> game
      (apply-moves (conj moves (take-empty-cell-move player [x y])))
      (update-in [:player] next-player)) ;; TODO - We must compute the available moves to switch player
    game))


    (fn [r [color [x y]]] (assoc-in r [x y] color))
    empty-board (init-positions)))


;; -----------------------------------------
;; IDENTIFY CONVERTIBLE CELLS
;; -----------------------------------------

(defn range-single-coord
