Skat Engine und AI auf Haskell Basis
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

69 satır
1.7KB

  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.Human
  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 fst <$> evalStateT (turn Hand1) env
  26. else runAI
  27. env :: SkatEnv
  28. env = SkatEnv piles Nothing Spades playersExamp
  29. where piles = distribute allCards
  30. envStupid :: SkatEnv
  31. envStupid = SkatEnv piles Nothing Spades pls2
  32. where piles = distribute allCards
  33. playersExamp :: Players
  34. playersExamp = Players
  35. (PL $ Stupid Team Hand1)
  36. (PL $ Stupid Team Hand2)
  37. (PL $ mkAIEnv Single Hand3 10)
  38. pls2 :: Players
  39. pls2 = Players
  40. (PL $ Stupid Team Hand1)
  41. (PL $ Stupid Team Hand2)
  42. (PL $ Stupid Team Hand3)
  43. shuffledEnv :: IO SkatEnv
  44. shuffledEnv = do
  45. cards <- shuffleCards
  46. return $ SkatEnv (distribute cards) Nothing Spades playersExamp
  47. env2 :: SkatEnv
  48. env2 = SkatEnv piles Nothing Spades playersExamp
  49. where hand1 = [Card Seven Clubs, Card King Clubs, Card Ace Clubs, Card Queen Diamonds]
  50. hand2 = [Card Seven Hearts, Card King Hearts, Card Ace Hearts, Card Queen Spades]
  51. hand3 = [Card Seven Spades, Card King Spades, Card Ace Spades, Card Queen Clubs]
  52. h1 = map (putAt Hand1) hand1
  53. h2 = map (putAt Hand2) hand2
  54. h3 = map (putAt Hand3) hand3
  55. piles = Piles (h1 ++ h2 ++ h3) [] []