add end-of-game scoring, including Lord of Waterdeep card bonuses
This commit is contained in:
parent
b0d20dff3d
commit
d02c06addc
|
|
@ -110,6 +110,7 @@ waterdeepGame = do
|
|||
beginRound round
|
||||
performAction 1 $ TakeResource [Cleric, Fighter, Rogue, Wizard, Gold]
|
||||
performAction 2 $ ChooseQuest
|
||||
scoreFinalPoints
|
||||
notifyState
|
||||
determineWinners
|
||||
|
||||
|
|
@ -170,6 +171,23 @@ performAction p a = case a of
|
|||
return True
|
||||
_ -> 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 = do
|
||||
-- TODO: Implement tie-breaker(s)
|
||||
|
|
|
|||
Loading…
Reference in New Issue