module Strategy1 where
|
|
|
|
import Datatypes
|
|
import VM
|
|
import Datatypes.Game (Command(..))
|
|
|
|
|
|
strat1 :: Game -> ([Command],Int)
|
|
strat1 game = if new_notes == GameOver
|
|
then (new_command : [], score new_game)
|
|
else (new_command : (fst $ strat1 new_game), snd $ strat1 new_game)
|
|
where
|
|
(new_game_se,notes_se) = step game MoveSE
|
|
(new_game_sw,notes_sw) = step game MoveSW
|
|
se = (new_game_se,notes_se,MoveSE)
|
|
sw = (new_game_sw,notes_sw,MoveSW)
|
|
(new_game,new_notes,new_command) = case (notes_sw,notes_se) of
|
|
(GameOver,GameOver) -> se
|
|
(_,GameOver) -> sw
|
|
(GameOver,_) -> se
|
|
(Lock i,OK) -> if i > 0
|
|
then sw
|
|
else se
|
|
(OK,Lock i) -> if i > 0
|
|
then se
|
|
else sw
|
|
(OK,OK) -> sw
|
|
(Lock i,Lock j) -> if i > j
|
|
then sw
|
|
else se
|
|
otherwise -> (game,GameOver,MoveE)
|