module Strategy2 where
|
|
|
|
import Datatypes
|
|
import Test.QuickCheck (generate, elements)
|
|
import VM
|
|
import System.Random
|
|
|
|
pick :: Int -> [a] -> a
|
|
pick n vector = vector !! (n `mod` (length vector))
|
|
|
|
strat2 :: Game -> ([Command],Int)
|
|
strat2 game = if new_notes == GameOver
|
|
then (new_command : [], score new_game)
|
|
else (new_command : (fst $ strat2 new_game), snd $ strat2 new_game)
|
|
where
|
|
commands = [MoveSE, MoveSW, MoveE, MoveW, RotateClockwise, RotateCounterclockwise]
|
|
new_games = map (\cmd -> (step game cmd, cmd)) commands
|
|
ok_games = filter (is_ok.snd.fst) new_games
|
|
where is_ok (OK) = True
|
|
is_ok _ = False
|
|
|
|
locked_games = filter (is_locked.snd.fst) new_games
|
|
where is_locked (Lock _) = True
|
|
is_locked _ = False
|
|
over_games = filter (is_over.snd.fst) new_games
|
|
where is_over (GameOver) = True
|
|
is_over _ = False
|
|
|
|
((new_game,new_notes),new_command) = if (length ok_games) > 0
|
|
then pick 741 ok_games
|
|
else if (length locked_games) > 0
|
|
then pick 568 locked_games
|
|
else pick 412 over_games
|
|
|
|
|