module Main where
import TicTacToe
import System.IO
-- |Greet user, start recursion, and say farewell to user when game ends
main :: IO ()
main = do
putStrLn "Welcome to tic tac toe."
--start recursion
playerMove emptyBoard
putStrLn "Thanks for playing!"
-- |Helper function to ensure prompt is made before user is expected to input something
promptLine :: String -> IO String
promptLine text = do
putStr text
hFlush stdout
getLine
-- |Code common to both player and computer at the end of the game
endRecursion :: Board -> IO ()
endRecursion b = do
putStrLn (show b)
putStrLn (winner b) -- end recursion
-- |Grab the user's move, and feed that to tic-tac-toe. Recurse as needed.
playerMove :: Board -> IO ()
playerMove board = do
putStrLn (show board)
loc <- promptLine "Where do you want to place your O? "
putStrLn ""
let moveLoc = Left (read loc)
let newBoard = findAndReplace board moveLoc (Right O)
if won newBoard || draw newBoard
then endRecursion newBoard
else compMove newBoard -- continue recursion
-- |Make a decision based on the board on where to move. Recurse as needed.
compMove :: Board -> IO ()
compMove board = do
let newBoard = makeXMove board
if won newBoard || draw newBoard
then endRecursion newBoard -- end recursion
else playerMove newBoard -- continue recursion