Skat Engine und AI auf Haskell Basis
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

58 行
1.5KB

  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 = putStrLn "Hello World"
  13. env :: SkatEnv
  14. env = SkatEnv piles Nothing Spades playersExamp
  15. where piles = distribute allCards
  16. envStupid :: SkatEnv
  17. envStupid = SkatEnv piles Nothing Spades pls2
  18. where piles = distribute allCards
  19. playersExamp :: Players
  20. playersExamp = Players
  21. (PL $ Stupid Team Hand1)
  22. (PL $ Stupid Team Hand2)
  23. (PL $ mkAIEnv Single Hand3 10)
  24. pls2 :: Players
  25. pls2 = Players
  26. (PL $ Stupid Team Hand1)
  27. (PL $ Stupid Team Hand2)
  28. (PL $ Stupid Team Hand3)
  29. shuffledEnv :: IO SkatEnv
  30. shuffledEnv = do
  31. cards <- shuffleCards
  32. return $ SkatEnv (distribute cards) Nothing Spades playersExamp
  33. env2 :: SkatEnv
  34. env2 = SkatEnv piles Nothing Spades playersExamp
  35. where hand1 = [Card Seven Clubs, Card King Clubs, Card Ace Clubs, Card Queen Diamonds]
  36. hand2 = [Card Seven Hearts, Card King Hearts, Card Ace Hearts, Card Queen Spades]
  37. hand3 = [Card Seven Spades, Card King Spades, Card Ace Spades, Card Queen Clubs]
  38. h1 = map (putAt Hand1) hand1
  39. h2 = map (putAt Hand2) hand2
  40. h3 = map (putAt Hand3) hand3
  41. piles = Piles (h1 ++ h2 ++ h3) [] []
  42. testAI :: Int -> IO ()
  43. testAI n = do
  44. let acs = repeat (shuffledEnv >>= evalStateT (turnGeneric playOpen 10 Hand1) )
  45. vals <- sequence (take n acs)
  46. putStrLn $ "average won points " ++ show (fromIntegral (sum (map fst vals)) / fromIntegral n)