X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=hw12%2FRisk.hs;fp=hw12%2FRisk.hs;h=24acbc06232be1d41dbc1e95db52967faefcbc83;hb=42b9d46f9d5c18447833c31026c336f4eb4e146c;hp=965c7c7887e20104d57d52fadb23021d7f7e3c6e;hpb=8dcef3b4c30b76c85cf6052e43d82fc7d84fa2b6;p=yorgey.git diff --git a/hw12/Risk.hs b/hw12/Risk.hs index 965c7c7..24acbc0 100644 --- a/hw12/Risk.hs +++ b/hw12/Risk.hs @@ -4,7 +4,7 @@ module Risk where import Control.Applicative import Control.Monad.Random -import Control.Monad(replicateM, liftM) +import Control.Monad(replicateM, liftM, foldM) import Data.List(sortBy) ------------------------------------------------------------ @@ -44,3 +44,13 @@ battle (Battlefield {attackers = a, defenders = d}) = rolld = replicateM (min d 2) die in liftA2 (newBattlefield (Battlefield a d)) rolla rolld + +-- exercise 3. +endgame :: Battlefield -> Bool +endgame (Battlefield {attackers=a, defenders=d}) = d == 0 || a < 2 + +invade :: Battlefield -> Rand StdGen Battlefield +-- invade battlefield = foldM (\acc f -> f $ acc) battlefield (repeat battle) +invade battlefield = battle battlefield >>= \bf -> + if (endgame bf) then return bf + else invade bf