use minmax for rulebased ai

This commit is contained in:
2020-02-29 12:39:04 +01:00
parent 173bd0df2e
commit 5846a22d8a
7 changed files with 93 additions and 62 deletions
+33 -6
View File
@@ -16,6 +16,7 @@ import Skat.Pile
import Skat.AI.Stupid
import Skat.AI.Online
import Skat.AI.Rulebased
import Skat.AI.Minmax (playCLI)
main :: IO ()
main = testAI 10
@@ -34,17 +35,17 @@ runAI = do
trs = filter (isTrump Spades) cs
if length trs >= 5 && any ((==32) . getID) cs
then do
pts <- fst <$> evalStateT (turn Hand1) env
pts <- fst <$> evalStateT turn env
-- if pts > 60 then return 1 else return 0
return pts
else runAI
env :: SkatEnv
env = SkatEnv piles Nothing Spades playersExamp
env = SkatEnv piles Nothing Spades playersExamp Hand1
where piles = distribute allCards
envStupid :: SkatEnv
envStupid = SkatEnv piles Nothing Spades pls2
envStupid = SkatEnv piles Nothing Spades pls2 Hand1
where piles = distribute allCards
playersExamp :: Players
@@ -57,15 +58,20 @@ pls2 :: Players
pls2 = Players
(PL $ Stupid Team Hand1)
(PL $ Stupid Team Hand2)
(PL $ Stupid Team Hand3)
(PL $ Stupid Single Hand3)
shuffledEnv :: IO SkatEnv
shuffledEnv = do
cards <- shuffleCards
return $ SkatEnv (distribute cards) Nothing Spades playersExamp
return $ SkatEnv (distribute cards) Nothing Spades playersExamp Hand1
shuffledEnv2 :: IO SkatEnv
shuffledEnv2 = do
cards <- shuffleCards
return $ SkatEnv (distribute cards) Nothing Spades pls2 Hand1
env2 :: SkatEnv
env2 = SkatEnv piles Nothing Spades playersExamp
env2 = SkatEnv piles Nothing Spades playersExamp Hand1
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]
@@ -74,6 +80,23 @@ env2 = SkatEnv piles Nothing Spades playersExamp
h3 = map (putAt Hand3) hand3
piles = Piles (h1 ++ h2 ++ h3) [] []
env3 :: SkatEnv
env3 = SkatEnv piles Nothing Diamonds pls2 Hand3
where hand1 = [ Card Jack Diamonds, Card Jack Clubs, Card Nine Spades, Card King Spades
, Card Seven Diamonds, Card Nine Diamonds, Card Seven Clubs, Card Eight Clubs
, Card Ten Clubs, Card Eight Hearts ]
hand2 = [ Card Seven Spades, Card Eight Spades, Card Seven Hearts, Card Nine Hearts
, Card Ace Hearts, Card King Diamonds, Card Ace Diamonds, Card Nine Clubs
, Card King Clubs, Card Ace Clubs ]
hand3 = [ Card Jack Hearts, Card Jack Spades, Card Ten Spades, Card Ace Spades, Card Eight Diamonds
, Card Queen Diamonds, Card Ten Diamonds, Card Ten Hearts, Card Queen Hearts, Card King Hearts ]
skat = [ Card Queen Clubs, Card Queen Spades]
h1 = map (putAt Hand1) hand1
h2 = map (putAt Hand2) hand2
h3 = map (putAt Hand3) hand3
skt = map (putAt SkatP) skat
piles = Piles (h1 ++ h2 ++ h3) [] skt
runWebSocketServer :: IO ()
runWebSocketServer = do
WS.runServer "localhost" 4243 application
@@ -85,3 +108,7 @@ application pending = do
forever $ do
msg <- WS.receiveData conn
putStrLn $ BS.unpack msg
playSkat :: IO ()
playSkat = do
void $ (flip runStateT) env3 playCLI