Skip to content

Instantly share code, notes, and snippets.

@jaymoid
Created August 27, 2018 13:34
Show Gist options
  • Save jaymoid/5c3fe073cdd0fae6fdd724da356dc804 to your computer and use it in GitHub Desktop.
Save jaymoid/5c3fe073cdd0fae6fdd724da356dc804 to your computer and use it in GitHub Desktop.
import kotlin.math.abs
data class Player(val name: String, var points: Int = 0)
class TennisGameKotlin(player1Name: String, player2Name: String) : TennisGame {
private val player1 = Player(player1Name)
private val player2 = Player(player2Name)
private val scores = listOf("Love", "Fifteen", "Thirty", "Forty")
override fun wonPoint(player: String) =
if (player === player1.name)
player1.points += 1
else
player2.points += 1
override fun getScore(): String =
when {
someoneHasWon() -> "Win for ${winningPlayer().name}"
playerHasAdvantage() -> "Advantage ${winningPlayer().name}"
gameIsDrawn() -> if (player1.points >= 3) "Deuce" else scores[player1.points] + "-All"
else -> scores[player1.points] + "-" + scores[player2.points]
}
private fun someoneHasWon() = pointsDifference() >= 2 && aPlayerHasMoreThan3Points()
private fun winningPlayer() = if (player1.points > player2.points) player1 else player2
private fun gameIsDrawn() = player1.points == player2.points
private fun playerHasAdvantage() = pointsDifference() == 1 && aPlayerHasMoreThan3Points()
private fun aPlayerHasMoreThan3Points() = player1.points > 3 || player2.points > 3
private fun pointsDifference() = abs(player1.points - player2.points)
}
@jaymoid
Copy link
Author

jaymoid commented Aug 27, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment