      :winner :blue,
 		 :looser :red,
 		 :taken [[8 5] [9 5]]}"
-  [board [x y :as pos] [dx dy]]
-  (let [[head tail :as cells] (take 2 (range-cells board [(+ x dx) (+ y dy)] [dx dy]))]
+  [board [x y :as pos] [dx dy :as dir]]
+  (let [[head tail :as cells] (take 2 (range-cells board [(+ x dx) (+ y dy)] dir))]
     (when (= 2 (count cells))
       {:move pos             ;; Where the move took place
        :winner (first tail)  ;; Who wins the cells


(defn range-cells ;; TODO - Use the concept of sentinel for the walls?
  "Give all the cells in the provided direction - until you reach an empty / blocked / wall cell"
  [board [x y] [dx dy]]
  (eduction
    (comp
      (map (juxt #(get-in board %) identity))
      (take-while (comp is-cell-owned? first))
      (partition-by first)
      (map (juxt #(-> % first first) #(mapv second %))))
    (range-coord [x y] [dx dy])))

(defn available-cells-by-dir
  "Indicates the convertible cells for the provided player - when clicking at [x y]

(def board-height 11)
(def init-block-count 12) ;; Init blocks for red, blue, green, gray
(def players [:blue :red :green])
(def directions [[-1 0] [1 0] [0 -1] [0 1] [-1 1] [1 1] [-1 -1] [1 -1]])

;; -----------------------------------------
;; INIT THE BOARD
