09-12-2021, 01:55 PM
Final update:
I discovered an obvious fatal flaw in the goal of Windflowers: a player can force a win simply be passing until the game ends.
Therefore I have changed the goal to a choice of most stones placed (preferred) or optionally, size of largest group. The previous submission for windflowers should be replaced with the below attachment.
The standard tiebreaker remains as having the smaller of the largest groups after removing tied pairs, but the implementation and score numbers are slightly different. This is due to designing a comparison for the case of multiple players:
I found that the game remains finite if the capture condition is properly described for the multiple player case, and so I implemented it at the same time as changing the goal.
More testing will be needed to see if king-making is a problem, but due to the opacity, and the independence of players in choosing relatively stable sites for their pieces, I believe it should not suffer too badly from king-making.
A final note. Although the game compiles and plays correctly, there is an error when it is loaded that doesn't seem to affect anything.
This appears to be coming from
(define "Tied4FirstPlace"
(=
(max 0 (max (sizes Group "ScoreConnection" of:(player))))
(max
(difference
(values Remembered "Scores")
(max 0 (max (sizes Group "ScoreConnection" of:(player)))) // This is causing a non-fatal null pointer exception at compilation
))))
or from the process of expanding the defines.
java.lang.NullPointerException
at game.functions.intArray.math.Difference.concepts(Difference.java:137)
at game.functions.ints.math.Max.concepts(Max.java:95)
at game.functions.booleans.math.Equals.concepts(Equals.java:196)
at game.rules.play.moves.nonDecision.operators.logical.If.concepts(If.java:201)
at game.rules.play.moves.nonDecision.operators.foreach.player.ForEachPlayer.concepts(ForEachPlayer.java:143)
at game.rules.play.moves.nonDecision.effect.requirement.Do.concepts(Do.java:339)
at game.rules.play.moves.nonDecision.effect.requirement.Do.concepts(Do.java:344)
at game.rules.play.moves.nonDecision.operators.logical.If.concepts(If.java:204)
at game.rules.play.moves.nonDecision.effect.Then.concepts(Then.java:125)
at game.rules.play.moves.nonDecision.operators.logical.Or.concepts(Or.java:208)
at game.rules.phase.Phase.concepts(Phase.java:225)
...
I discovered an obvious fatal flaw in the goal of Windflowers: a player can force a win simply be passing until the game ends.
Therefore I have changed the goal to a choice of most stones placed (preferred) or optionally, size of largest group. The previous submission for windflowers should be replaced with the below attachment.
The standard tiebreaker remains as having the smaller of the largest groups after removing tied pairs, but the implementation and score numbers are slightly different. This is due to designing a comparison for the case of multiple players:
I found that the game remains finite if the capture condition is properly described for the multiple player case, and so I implemented it at the same time as changing the goal.
More testing will be needed to see if king-making is a problem, but due to the opacity, and the independence of players in choosing relatively stable sites for their pieces, I believe it should not suffer too badly from king-making.
A final note. Although the game compiles and plays correctly, there is an error when it is loaded that doesn't seem to affect anything.
This appears to be coming from
(define "Tied4FirstPlace"
(=
(max 0 (max (sizes Group "ScoreConnection" of:(player))))
(max
(difference
(values Remembered "Scores")
(max 0 (max (sizes Group "ScoreConnection" of:(player)))) // This is causing a non-fatal null pointer exception at compilation
))))
or from the process of expanding the defines.
java.lang.NullPointerException
at game.functions.intArray.math.Difference.concepts(Difference.java:137)
at game.functions.ints.math.Max.concepts(Max.java:95)
at game.functions.booleans.math.Equals.concepts(Equals.java:196)
at game.rules.play.moves.nonDecision.operators.logical.If.concepts(If.java:201)
at game.rules.play.moves.nonDecision.operators.foreach.player.ForEachPlayer.concepts(ForEachPlayer.java:143)
at game.rules.play.moves.nonDecision.effect.requirement.Do.concepts(Do.java:339)
at game.rules.play.moves.nonDecision.effect.requirement.Do.concepts(Do.java:344)
at game.rules.play.moves.nonDecision.operators.logical.If.concepts(If.java:204)
at game.rules.play.moves.nonDecision.effect.Then.concepts(Then.java:125)
at game.rules.play.moves.nonDecision.operators.logical.Or.concepts(Or.java:208)
at game.rules.phase.Phase.concepts(Phase.java:225)
...