class GameLoop(private val first: Character, private val second: Character, val complition: (Character, Character) -> Unit) { fun init() { //enemy must be initialized first since the Card initiate needs them first.enemy = second second.enemy = first first.endGameAsLoser = { //first's deck is empty complition(second, first) } second.endGameAsLoser = { //second's deck is empty complition(first, second) } first.drawFromDeck(3) second.drawFromDeck(3) } fun start() { while(first.life > 0 && second.life > 0) { first.nextTurn() second.nextTurn() } endGame() } private fun endGame() { val winner = if (first.life > 0) first else second val loser = winner.enemy complition(winner, loser) } }