WinnerAlgorithm.kt
package delta.codecharacter.server.logic.verdict
import delta.codecharacter.server.config.GameConfiguration
import delta.codecharacter.server.match.MatchVerdictEnum
class WinnerAlgorithm : VerdictAlgorithm {
override fun getVerdict(
player1HasErrors: Boolean,
player1CoinsUsed: Int,
player1Destruction: Double,
player2HasErrors: Boolean,
player2CoinsUsed: Int,
player2Destruction: Double,
): MatchVerdictEnum {
if (player1HasErrors && player2HasErrors) return MatchVerdictEnum.TIE
if (player1HasErrors) return MatchVerdictEnum.PLAYER2
if (player2HasErrors) return MatchVerdictEnum.PLAYER1
val gameConfiguration = GameConfiguration()
val totalCoins = gameConfiguration.gameParameters().numberOfCoins
val player1CoinLeftPercentage = ((totalCoins - player1CoinsUsed.toDouble()) / totalCoins) * 100
val player2CoinLeftPercentage = ((totalCoins - player2CoinsUsed.toDouble()) / totalCoins) * 100
val scoreCalculator =
{ coinsLeftPercent: Double, destructionPercent: Double,
->
coinsLeftPercent + (2 * destructionPercent)
}
val player1Score = scoreCalculator(player1CoinLeftPercentage, player1Destruction)
val player2Score = scoreCalculator(player2CoinLeftPercentage, player2Destruction)
if (player1Score == player2Score) return MatchVerdictEnum.TIE
if (player1Score > player2Score) return MatchVerdictEnum.PLAYER1
return MatchVerdictEnum.PLAYER2
}
}