|
- module Main where
-
- import Control.Monad.State
-
- import Card
- import Skat
- import Operations
- import Player
- import Pile
-
- import AI.Stupid
- import AI.Human
- import AI.Rulebased
-
- main :: IO ()
- main = testAI 10
-
- testAI :: Int -> IO ()
- testAI n = do
- let acs = repeat runAI
- vals <- sequence (take n acs)
- putStrLn $ "average won points " ++ show (fromIntegral (sum vals) / fromIntegral n)
-
- runAI :: IO Int
- runAI = do
- env <- shuffledEnv
- let ps = piles env
- cs = handCards Hand3 ps
- trs = filter (isTrump Spades) cs
- if length trs >= 5 && any ((==32) . getID) cs
- then fst <$> evalStateT (turn Hand1) env
- else runAI
-
- env :: SkatEnv
- env = SkatEnv piles Nothing Spades playersExamp
- where piles = distribute allCards
-
- envStupid :: SkatEnv
- envStupid = SkatEnv piles Nothing Spades pls2
- where piles = distribute allCards
-
- playersExamp :: Players
- playersExamp = Players
- (PL $ Stupid Team Hand1)
- (PL $ Stupid Team Hand2)
- (PL $ mkAIEnv Single Hand3 10)
-
- pls2 :: Players
- pls2 = Players
- (PL $ Stupid Team Hand1)
- (PL $ Stupid Team Hand2)
- (PL $ Stupid Team Hand3)
-
- shuffledEnv :: IO SkatEnv
- shuffledEnv = do
- cards <- shuffleCards
- return $ SkatEnv (distribute cards) Nothing Spades playersExamp
-
- env2 :: SkatEnv
- env2 = SkatEnv piles Nothing Spades playersExamp
- where hand1 = [Card Seven Clubs, Card King Clubs, Card Ace Clubs, Card Queen Diamonds]
- hand2 = [Card Seven Hearts, Card King Hearts, Card Ace Hearts, Card Queen Spades]
- hand3 = [Card Seven Spades, Card King Spades, Card Ace Spades, Card Queen Clubs]
- h1 = map (putAt Hand1) hand1
- h2 = map (putAt Hand2) hand2
- h3 = map (putAt Hand3) hand3
- piles = Piles (h1 ++ h2 ++ h3) [] []
|