t3-game-0.1.0: src/T3/Game.hs
module T3.Game
( module T3.Game.Core
, module T3.Game.Class
, module T3.Game.Types
, run
) where
import Prelude
import T3.Game.Core
import T3.Game.Class
import T3.Game.Types
run :: Game m => Board -> m ()
run b = play b X O
play :: Game m => Board -> XO -> XO -> m ()
play b p0 p1 = do
loc <- move p0
if not (valid loc b)
then forfeit (Win p1) (Lose p0)
else do
let b' = insertXO loc p0 b
step b' p0 loc
case result b' of
Unfinished -> play b' p1 p0
Winner _ -> end (Win p0) (Lose p1)
Tie -> tie