@@ -78,8 +78,9 @@ data class GameState @JvmOverloads constructor(
78
78
override fun clone (): GameState =
79
79
copy(players = players.clone())
80
80
81
- fun cloneCurrentPlayer (transform : (Hare ) -> Unit ) =
82
- copy(players = players.map { if (it.team == currentTeam) it.clone().apply (transform) else it })
81
+ /* * Create a copy of this state with the player matching the given team adjusted. */
82
+ fun clonePlayer (team : Team = currentTeam, transform : (Hare ) -> Unit = {}) =
83
+ copy(players = players.map { if (it.team == team) it.clone().apply (transform) else it })
83
84
84
85
override fun getSensibleMoves (): List <Move > = getSensibleMoves(currentPlayer)
85
86
@@ -89,7 +90,7 @@ data class GameState @JvmOverloads constructor(
89
90
return (1 .. calculateMoveableFields(player.carrots).coerceAtMost(board.size - player.position)).flatMap { distance ->
90
91
if (checkAdvance(distance, player) != null )
91
92
return @flatMap emptyList()
92
- return @flatMap possibleCardMoves(distance, player) ? : listOf (Advance (distance))
93
+ return @flatMap possibleCardMoves(distance, player.team ) ? : listOf (Advance (distance))
93
94
} + listOfNotNull(
94
95
FallBack .takeIf { nextFallBack(player) != null },
95
96
* possibleExchangeCarrotMoves(player).toTypedArray()
@@ -98,10 +99,9 @@ data class GameState @JvmOverloads constructor(
98
99
99
100
/* * Possible Advances including buying/playing of cards.
100
101
* @return null if target field is neither market nor hare, empty list if no possibilities, otherwise possible Moves */
101
- fun possibleCardMoves (distance : Int , player : Hare = currentPlayer): List <Advance >? {
102
- val state =
103
- copy(players = players.map { if (it.team == player.team) it.clone().apply { advanceBy(distance) } else it })
104
- return state.nextCards(state.getHare(player.team))?.map { cards ->
102
+ fun possibleCardMoves (distance : Int , team : Team = currentTeam): List <Advance >? {
103
+ val state = clonePlayer(team) { it.advanceBy(distance) }
104
+ return state.nextCards(state.getHare(team))?.map { cards ->
105
105
Advance (distance, * cards)
106
106
}
107
107
}
0 commit comments