 (defn play-move
   "On player playing the move [x y] - update all the game state accordingly"
   [{:keys [player board] :as game} point]
+  {:pre [(board? board)]}
   (if-let [moves (get-move-at game player point)]
     (->
       (reduce apply-move game moves)

       :looser :red,
       :taken [[0 4]]})}}"
  [{:keys [board] :as game}]
  (assoc game :moves
    (transduce
      (available-moves-xf board)

   :looser :red,
   :taken [[8 5] [9 5]]}"
  [board [xi yi :as move] [dx dy]]
  {:pre [(board? board)]}
  (loop [x (+ xi dx)
         y (+ yi dy)
         looser nil
