diff --git a/src/games/frogger.ts b/src/games/frogger.ts index f96efe6d..63e7870c 100644 --- a/src/games/frogger.ts +++ b/src/games/frogger.ts @@ -1320,10 +1320,16 @@ export class FroggerGame extends GameBase { result.valid = false; result.message = i18next.t("apgames:validation.frogger.INVALID_MARKET_CARD"); return result; + } else { + // If we have a card, a move back is complete. + complete = true; } } else if (subIFM.card) { // When backing up to start you can pick any market card. // We already checked it was in the market. + + // If we have a card, a move back is complete. + complete = true; } else if (!complete && cloned.market.length > 0) { // No card. May be a partial move, or can back up without a card. result.valid = true; @@ -1374,7 +1380,7 @@ export class FroggerGame extends GameBase { //Really really done. result.valid = true; - result.complete = allcomplete ? 1 : 0; + result.complete = (allcomplete && moves.length === this.nummoves) ? 1 : 0; result.message = i18next.t("apgames:validation._general.VALID_MOVE"); return result; } diff --git a/test/games/frogger.test.ts b/test/games/frogger.test.ts index d3520001..ca389ce7 100644 --- a/test/games/frogger.test.ts +++ b/test/games/frogger.test.ts @@ -127,11 +127,14 @@ describe("Frogger", () => { expect(g.validateMove("8YK:a3-c2/c2-b2,1S!/b2-a3,7SK/")).to.have.deep.property("valid", false); //Can't refill. expect(g.validateMove("8YK:a3-c2/c2-b2,1S/b2-a3,7SK/")).to.have.deep.property("valid", true); //A legal sequence. expect(g.validateMove("8YK:a3-c2/c2-b2,1S/b2-a3,7SK/")).to.have.deep.property("complete", 1); //A legal sequence, for completeness. + expect(g.validateMove("8YK:a3-c2/c2-b2,1S/b2-a3,7SK")).to.have.deep.property("complete", 1); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2/c2-b2,1S/b2-a3")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2/c2-b2,1S/b2-")).to.have.deep.property("complete", -1); //A legal sequence, for completeness. + expect(g.validateMove("8YK:a3-c2/c2-b2,1S/")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2/c2-b2,1S")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2/c2-b2")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2/c2-")).to.have.deep.property("complete", -1); //A legal sequence, for completeness. + expect(g.validateMove("8YK:a3-c2/")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-c2")).to.have.deep.property("complete", 0); //A legal sequence, for completeness. expect(g.validateMove("8YK:a3-")).to.have.deep.property("complete", -1); //A legal sequence, for completeness. expect(g.validateMove("8YK:")).to.have.deep.property("complete", -1); //A legal sequence, for completeness. @@ -187,6 +190,9 @@ describe("Frogger", () => { expect(g.validateMove("1V//")).to.have.deep.property("valid", true); //A legal sequence (market card). expect(g.validateMove("1V/")).to.have.deep.property("valid", true); //A legal sequence (market card). expect(g.validateMove("1V")).to.have.deep.property("valid", true); //A legal sequence (market card). + expect(g.validateMove("1V//")).to.have.deep.property("complete", 1); //A legal sequence (market card). + expect(g.validateMove("1V/")).to.have.deep.property("complete", 1); //A legal sequence (market card). + expect(g.validateMove("1V")).to.have.deep.property("complete", 1); //A legal sequence (market card). g.move("1V"); expect(g.validateMove("3MV//")).to.have.deep.property("valid", false); //Player 2 isn't blocked.