Skip to content

Commit

Permalink
Code cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Zomis committed Jun 27, 2022
1 parent e8af051 commit be69aab
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ interface PlayerEliminationsWrite: PlayerEliminationsRead {
this.eliminateRemaining(WinResult.LOSS)
}
}
@Deprecated("replace with PlayerEliminationsWrite or PlayerEliminationsRead")
interface PlayerEliminationCallback: PlayerEliminationsWrite

data class PlayerElimination(val playerIndex: Int, val winResult: WinResult, val position: Int)

class PlayerEliminations(override val playerCount: Int): PlayerEliminationCallback, PlayerEliminationsWrite, PlayerEliminationsRead {
class PlayerEliminations(override val playerCount: Int): PlayerEliminationsWrite, PlayerEliminationsRead {

private val eliminations = mutableListOf<PlayerElimination>()
var callback: (PlayerElimination) -> Unit = {}
Expand All @@ -44,9 +42,7 @@ class PlayerEliminations(override val playerCount: Int): PlayerEliminationCallba
}
}

override fun eliminations(): List<PlayerElimination> {
return this.eliminations.toList()
}
override fun eliminations(): List<PlayerElimination> = this.eliminations.toList()

override fun result(playerIndex: Int, winResult: WinResult) {
val position = this.nextEliminationPosition(winResult)
Expand All @@ -72,14 +68,14 @@ class PlayerEliminations(override val playerCount: Int): PlayerEliminationCallba

override fun eliminate(elimination: PlayerElimination) {
val previousElimination = eliminations.firstOrNull { it.playerIndex == elimination.playerIndex }
if (previousElimination != null) {
throw IllegalArgumentException("Player is already eliminated: $previousElimination. Unable to eliminate $elimination")
require(previousElimination == null) {
"Player is already eliminated: $previousElimination. Unable to eliminate $elimination"
}
if (elimination.position <= 0) {
throw IllegalArgumentException("Elimination position must be positive, but is ${elimination.position}")
require(elimination.position >= 0) {
"Elimination position must be positive, but is ${elimination.position}"
}
if (elimination.position > playerCount) {
throw IllegalArgumentException("Elimination position ${elimination.position} must be less than or equal to playerCount $playerCount")
require(elimination.position <= playerCount) {
"Elimination position ${elimination.position} must be less than or equal to playerCount $playerCount"
}
this.eliminations.add(elimination)
callback(elimination)
Expand All @@ -94,11 +90,7 @@ class PlayerEliminations(override val playerCount: Int): PlayerEliminationCallba
}

override fun <T> eliminateBy(playersAndScores: List<Pair<Int, T>>, comparator: Comparator<T>) {
val pairComparator = object : Comparator<Pair<Int, T>> {
override fun compare(a: Pair<Int, T>, b: Pair<Int, T>): Int {
return comparator.compare(a.second, b.second)
}
}
val pairComparator = Comparator<Pair<Int, T>> { a, b -> comparator.compare(a.second, b.second) }
var playersAndScoresRemaining = playersAndScores
var position = this.nextEliminationPosition(WinResult.WIN)
while (playersAndScoresRemaining.isNotEmpty()) {
Expand All @@ -113,7 +105,7 @@ class PlayerEliminations(override val playerCount: Int): PlayerEliminationCallba
this.eliminate(PlayerElimination(it.first, winResult, position))
}
position += nextBatch.size
playersAndScoresRemaining = playersAndScoresRemaining.minus(nextBatch)
playersAndScoresRemaining = playersAndScoresRemaining.minus(nextBatch.toSet())
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.zomis.games.dsl.impl

import kotlinx.coroutines.flow.MutableSharedFlow
import net.zomis.games.PlayerEliminationsWrite
import net.zomis.games.common.PlayerIndex
import net.zomis.games.dsl.*
Expand Down Expand Up @@ -131,7 +130,6 @@ class StateKeeper {
function.invoke(FlowStep.UglyHack)
this.setState(preSetup.state)
this.replayMode = (preSetup.state != moveState)
println("PreSetup set state ${preSetup.state}")
}

suspend fun preMove(action: Actionable<*, *>, function: suspend (FlowStep) -> Unit) {
Expand All @@ -141,7 +139,6 @@ class StateKeeper {
function.invoke(FlowStep.UglyHack)
this.setState(preSetup.state)
this.replayMode = (preSetup.state != moveState)
println("PreMove set state $action / ${preSetup.state}")
}
}
class ReplayState(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ class ConsoleControl(val game: Game<Any>, val scanner: Scanner): GameListener {
override suspend fun handle(coroutineScope: CoroutineScope, step: FlowStep) {
if (step is FlowStep.GameEnd) job?.cancel()
if (step is FlowStep.GameSetup<*>) {
println("State: " + step.state)
job = coroutineScope.launch {
withContext(Dispatchers.IO) {
while (game.isRunning()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,8 @@ object HelloWorldGame {
allActions.after {
0.takeIf { game.values.all { b -> b } }?.let { eliminations.eliminateRemaining(WinResult.WIN) }
}
}
view {
this.value("board") { it.values }
this.value("scores") { game -> listOf(0).map { game.points } }
view("board") { game.values }
view("scores") { listOf(0).map { game.points } }
}
}

Expand Down

0 comments on commit be69aab

Please sign in to comment.