From 7082abcdf7897ba29e2c4b14f023ce7c8458b05a Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Fri, 16 Sep 2022 11:38:37 +0200 Subject: [PATCH] Adding point calculation for unfulfilled announcements --- .../components/add-game/add-game.component.ts | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/app/components/add-game/add-game.component.ts b/src/app/components/add-game/add-game.component.ts index 267260d..5d647a5 100644 --- a/src/app/components/add-game/add-game.component.ts +++ b/src/app/components/add-game/add-game.component.ts @@ -34,8 +34,8 @@ export class AddGameComponent implements OnInit { team: Team.CONTRA, gamePoints: 0, finalCardScore: 0, - foxesCaught: 1, - wonLastTrickWithCharlie: true + // foxesCaught: 1, + // wonLastTrickWithCharlie: true }); this.potentialPlayers.push({ firebonkId: 2, @@ -384,17 +384,18 @@ export class AddGameComponent implements OnInit { calculateCurrentScores(): void { let gameScore: number = 0; - let winningTeamScore = this.getWinningTeamAndScore().score; let winningTeam = this.getWinningTeamAndScore().team; - let unfulfilledAnnouncements = this.checkUnfulfilledAnnouncements(winningTeam, winningTeamScore); + let winningTeamScore = this.getWinningTeamAndScore().score; + let unfulfilledAnnouncementPoints = this.checkUnfulfilledAnnouncements(winningTeam, winningTeamScore); let isSoloPlay = false; // We are going to calculate the points for the winning team and then set all players points accordingly - if(!unfulfilledAnnouncements) { + if (unfulfilledAnnouncementPoints === 0) { gameScore += this.calculateNormalScore(winningTeamScore, winningTeam); } else { - // TODO method to calculate game score for unfulfilled announcements + gameScore += unfulfilledAnnouncementPoints; + winningTeam = winningTeam === Team.RE ? Team.CONTRA : Team.RE; } // Double Score in case of announcement @@ -406,7 +407,7 @@ export class AddGameComponent implements OnInit { } // Bonus points - if(!isSoloPlay) { + if (!isSoloPlay) { gameScore += this.getFinalFoxPoints(winningTeam); gameScore += this.getCharliePoints(winningTeam); } @@ -415,6 +416,12 @@ export class AddGameComponent implements OnInit { this.setGameScores(gameScore, winningTeam); } + /** + * Calculate the score according to card points and announcements in case of a "normal" game, so without unfulfilled announcements + * @param winningTeamScore + * @param winningTeam + * @private + */ private calculateNormalScore(winningTeamScore: number, winningTeam: Team): number { let gameScore = 1; // 1 Point for Winning @@ -557,8 +564,8 @@ export class AddGameComponent implements OnInit { * @param winningTeam The winning team */ getCharliePoints(winningTeam: Team): number { - for(let player of this.actualPlayers) { - if(player.wonLastTrickWithCharlie) { + for (let player of this.actualPlayers) { + if (player.wonLastTrickWithCharlie) { return player.team === winningTeam ? 1 : -1; } } @@ -566,34 +573,37 @@ export class AddGameComponent implements OnInit { } /** - * Checks if the winning team has made announcements that have not been fulfilled + * Checks if the winning team has made announcements that have not been fulfilled. + * If so, returns the points that the "losing" team gets for these unfulfilled announcements * @param normalWinningTeam The team that would have won under normal circumstances * @param normalWinningTeamScore The card score of said team */ - checkUnfulfilledAnnouncements(normalWinningTeam: Team, normalWinningTeamScore: number): boolean { - if(normalWinningTeam === Team.RE) { - if(this.checkAnnouncementActive(announcements.Announcement.RE_NO_NINETY) && normalWinningTeamScore < 151) { - return true; + checkUnfulfilledAnnouncements(normalWinningTeam: Team, normalWinningTeamScore: number): number { + let gamePoints = 0; + + if (normalWinningTeam === Team.RE) { + if (this.checkAnnouncementActive(announcements.Announcement.RE_NO_NINETY) && normalWinningTeamScore < 151) { + gamePoints++; } - if(this.checkAnnouncementActive(announcements.Announcement.RE_NO_SIXTY) && normalWinningTeamScore < 181) { - return true; + if (this.checkAnnouncementActive(announcements.Announcement.RE_NO_SIXTY) && normalWinningTeamScore < 181) { + gamePoints++; } - if(this.checkAnnouncementActive(announcements.Announcement.RE_NO_THIRTY) && normalWinningTeamScore < 211) { - return true; + if (this.checkAnnouncementActive(announcements.Announcement.RE_NO_THIRTY) && normalWinningTeamScore < 211) { + gamePoints++; } } - if(normalWinningTeam === Team.CONTRA) { - if(this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_NINETY) && normalWinningTeamScore < 151) { - return true; + if (normalWinningTeam === Team.CONTRA) { + if (this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_NINETY) && normalWinningTeamScore < 151) { + gamePoints++; } - if(this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_SIXTY) && normalWinningTeamScore < 181) { - return true; + if (this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_SIXTY) && normalWinningTeamScore < 181) { + gamePoints++; } - if(this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_THIRTY) && normalWinningTeamScore < 211) { - return true; + if (this.checkAnnouncementActive(announcements.Announcement.CONTRA_NO_THIRTY) && normalWinningTeamScore < 211) { + gamePoints++; } } - return false; + return gamePoints; } }