You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.2 KiB

  1. module Strategy2 where
  2. import Datatypes
  3. import Test.QuickCheck (generate, elements)
  4. import VM
  5. import System.Random
  6. pick :: Int -> [a] -> a
  7. pick n vector = vector !! (n `mod` (length vector))
  8. strat2 :: Game -> ([Command],Int)
  9. strat2 game = if new_notes == GameOver
  10. then (new_command : [], score new_game)
  11. else (new_command : (fst $ strat2 new_game), snd $ strat2 new_game)
  12. where
  13. commands = [MoveSE, MoveSW, MoveE, MoveW, RotateClockwise, RotateCounterclockwise]
  14. new_games = map (\cmd -> (step game cmd, cmd)) commands
  15. ok_games = filter (is_ok.snd.fst) new_games
  16. where is_ok (OK) = True
  17. is_ok _ = False
  18. locked_games = filter (is_locked.snd.fst) new_games
  19. where is_locked (Lock _) = True
  20. is_locked _ = False
  21. over_games = filter (is_over.snd.fst) new_games
  22. where is_over (GameOver) = True
  23. is_over _ = False
  24. ((new_game,new_notes),new_command) = if (length ok_games) > 0
  25. then pick 741 ok_games
  26. else if (length locked_games) > 0
  27. then pick 568 locked_games
  28. else pick 412 over_games