Fixes : Game of Chaos refactor and fix
@@ -87,38 +87,33 @@ class GameOfChaosEffect extends OneShotEffect {
Player targetOpponent = game.getPlayer(getTargetPointer().getFirst(game, source));
if (you != null && targetOpponent != null) {
+
boolean continueFlipping = true;
- boolean youWinFlip = you.flipCoin(game); // controller flips first
+ boolean youWonFlip = you.flipCoin(game); // controller flips first
boolean youWonLastFlip = false; // tracks if you won the flip last, negation of it means opponent won last
- int lifeAmount = 1; // starts with 1 life
+ int lifeAmount = 1; // starts stakes with 1 life
while (continueFlipping) {
-
- if (youWinFlip) { // flipper of coin wins, flipper gain 1 and non-flipper loses 1
+ if (youWonFlip) { // flipper of coin wins, flipper gain 1 and non-flipper loses 1
handleLifeChangesFromFlip(game, you, targetOpponent, lifeAmount);
- if (targetOpponent.canRespond() && you.canRespond()) {
- continueFlipping = you.chooseUse(outcome, "Flip again?", source, game);
+ if (!cannotContinueFlipping(you, targetOpponent)) {
+ continueFlipping = you.chooseUse(outcome, "You gained " + lifeAmount + " life! Flip again for double the life stakes?", source, game);
youWonLastFlip = true;
}
} else { // non-flipper wins, flipper lose 1 and non-flipper gains 1
handleLifeChangesFromFlip(game, targetOpponent, you, lifeAmount);
- if (targetOpponent.canRespond() && you.canRespond()) {
- continueFlipping = targetOpponent.chooseUse(outcome, "Flip again?", source, game);
+ if (!cannotContinueFlipping(you, targetOpponent)) {
+ continueFlipping = targetOpponent.chooseUse(outcome, "You gained " + lifeAmount + " life! Flip again for double the life stakes?", source, game);
youWonLastFlip = false;
}
}
- if (!targetOpponent.canRespond() || !you.canRespond()) {
+ if (cannotContinueFlipping(you, targetOpponent))
continueFlipping = false;
- }
if (continueFlipping) {
lifeAmount *= 2; // double the life each time
- if (youWonLastFlip) {
- youWinFlip = you.flipCoin(game);
- } else {
- youWinFlip = !targetOpponent.flipCoin(game); // negate the results for proper evaluation above
- }
+ youWonFlip = youWonLastFlip ? you.flipCoin(game) : !targetOpponent.flipCoin(game); // negate the opponent's results for proper evaluation of if you won in next iteration
}
}
@@ -131,4 +126,8 @@ class GameOfChaosEffect extends OneShotEffect {
playerGainingLife.gainLife(lifeAmount, game);
playerLosingLife.loseLife(lifeAmount, game, false);
}
+
+ private boolean cannotContinueFlipping(Player you, Player opponent) {
+ return (!you.canRespond() || !opponent.canRespond() || (you.canLoseByZeroOrLessLife() && you.getLife() <= 0) || (opponent.canLoseByZeroOrLessLife() && opponent.getLife() <= 0));
+ }
}
\ No newline at end of file
