add end-of-game scoring, including Lord of Waterdeep card bonuses

This commit is contained in:
Jesse D. McDonald 2014-04-02 19:40:07 -05:00
parent b0d20dff3d
commit d02c06addc
1 changed files with 18 additions and 0 deletions

View File

@ -110,6 +110,7 @@ waterdeepGame = do
beginRound round beginRound round
performAction 1 $ TakeResource [Cleric, Fighter, Rogue, Wizard, Gold] performAction 1 $ TakeResource [Cleric, Fighter, Rogue, Wizard, Gold]
performAction 2 $ ChooseQuest performAction 2 $ ChooseQuest
scoreFinalPoints
notifyState notifyState
determineWinners determineWinners
@ -170,6 +171,23 @@ performAction p a = case a of
return True return True
_ -> return False _ -> return False
scoreFinalPoints :: Waterdeep ()
scoreFinalPoints = do
ps <- toListOf traverse <$> use gamePlayers
forM_ ps $ \p -> do
let rs = p ^. playerTavern . to M.toAscList
forM_ rs $ \(r, n) -> do
let pts = case r of { Gold -> n `div` 2; _ -> n; }
gamePlayer (p ^. playerNumber) . playerScore += pts
case p ^. playerLord . lordBonus of
QuestBonus types pts -> do
let (cqs, apqs, upqs) = (p ^. playerCompletedQuests, p ^. playerActivePlotQuests, p ^. playerUsedPlotQuests)
let matches = length $ filter ((`elem` types) . (view questType)) (cqs ++ apqs ++ upqs)
gamePlayer (p ^. playerNumber) . playerScore += matches * pts
BuildingBonus pts -> do
ownedBuildings <- length <$> filter ((== (p ^. playerNumber)) . (view buildingOwner)) <$> use gameAdvancedBuildings
gamePlayer (p ^. playerNumber) . playerScore += ownedBuildings * pts
determineWinners :: Waterdeep [PlayerID] determineWinners :: Waterdeep [PlayerID]
determineWinners = do determineWinners = do
-- TODO: Implement tie-breaker(s) -- TODO: Implement tie-breaker(s)