Skat Engine und AI auf Haskell Basis
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

71 lignes
1.8KB

  1. module Main where
  2. import Control.Monad.State
  3. import Card
  4. import Skat
  5. import Operations
  6. import Player
  7. import Pile
  8. import AI.Stupid
  9. import AI.Socket
  10. import AI.Rulebased
  11. main :: IO ()
  12. main = testAI 10
  13. testAI :: Int -> IO ()
  14. testAI n = do
  15. let acs = repeat runAI
  16. vals <- sequence (take n acs)
  17. putStrLn $ "average won points " ++ show (fromIntegral (sum vals) / fromIntegral n)
  18. runAI :: IO Int
  19. runAI = do
  20. env <- shuffledEnv
  21. let ps = piles env
  22. cs = handCards Hand3 ps
  23. trs = filter (isTrump Spades) cs
  24. if length trs >= 5 && any ((==32) . getID) cs
  25. then do
  26. pts <- fst <$> evalStateT (turn Hand1) env
  27. if pts > 60 then return 1 else return 0
  28. else runAI
  29. env :: SkatEnv
  30. env = SkatEnv piles Nothing Spades playersExamp
  31. where piles = distribute allCards
  32. envStupid :: SkatEnv
  33. envStupid = SkatEnv piles Nothing Spades pls2
  34. where piles = distribute allCards
  35. playersExamp :: Players
  36. playersExamp = Players
  37. (PL $ Stupid Team Hand1)
  38. (PL $ mkSocketEnv Team Hand2)
  39. (PL $ mkAIEnv Single Hand3 10)
  40. pls2 :: Players
  41. pls2 = Players
  42. (PL $ Stupid Team Hand1)
  43. (PL $ Stupid Team Hand2)
  44. (PL $ Stupid Team Hand3)
  45. shuffledEnv :: IO SkatEnv
  46. shuffledEnv = do
  47. cards <- shuffleCards
  48. return $ SkatEnv (distribute cards) Nothing Spades playersExamp
  49. env2 :: SkatEnv
  50. env2 = SkatEnv piles Nothing Spades playersExamp
  51. where hand1 = [Card Seven Clubs, Card King Clubs, Card Ace Clubs, Card Queen Diamonds]
  52. hand2 = [Card Seven Hearts, Card King Hearts, Card Ace Hearts, Card Queen Spades]
  53. hand3 = [Card Seven Spades, Card King Spades, Card Ace Spades, Card Queen Clubs]
  54. h1 = map (putAt Hand1) hand1
  55. h2 = map (putAt Hand2) hand2
  56. h3 = map (putAt Hand3) hand3
  57. piles = Piles (h1 ++ h2 ++ h3) [] []