|
|
-
-
- module Client where
-
- import Eval
- import Lambda
- import AI
- import GoalTransform
-
- import System.IO
- import System.Environment
- import Control.Monad
-
- import qualified Data.Array.IO as A
-
- readMove :: Turn Move
- readMove = do
- lr <- liftIO getLine
- sf <- liftIO getLine
- st <- liftIO getLine
- if (lr == "1") then (do
- let f = read sf :: Card
- let t = read st :: Int
- return $ MoveLeft f t
- ) else (do
- let f = read sf :: Int
- let t = read st :: Card
- return $ MoveRight f t
- )
-
- stepClient :: Turn ()
- stepClient = readMove >>= runMove
-
- stepAI :: Turn Goal -> Turn ()
- stepAI ai = do
- try (do
- goal <- ai
- move <- moveGoal goal
- liftIO $ printMove move
- runMove move
- ) (\s -> do
- liftIO $ hPutStrLn stderr $ "Error calculating move"
- game <- getGame
- ownfields <- liftIO $ A.getAssocs (fields $ proponent game)
- let (a, _):_ = filter (\(_, (_, v)) -> v > 0) ownfields
- liftIO $ hPutStrLn stderr $ "=> I " ++ show a
- liftIO $ printMove (MoveLeft Card_I a)
- runMove (MoveLeft Card_I a)
- )
-
- run :: Turn Goal -> Bool -> IO ()
- run ai firstPlayer = do
- hSetBuffering stdin NoBuffering
- hSetBuffering stdout NoBuffering
- game <- initGame
- runTurn _loop1 game
- return ()
- where
- _loop1 :: Turn ()
- _loop1 = do
- when (firstPlayer) (stepAI ai)
- _loop
- _loop :: Turn ()
- _loop = do
- stepClient
- stepAI ai
- _loop
-
-
- getArgsFirstPlayer :: IO Bool
- getArgsFirstPlayer = do
- arg:_ <- getArgs
- return $ arg == "0"
-
- main = getArgsFirstPlayer >>= run aimove
|