Skip to content

Commit 6ad8d66

Browse files
authored
Merge pull request #296 from mcdemarco/develop
Frogger: fix win condition
2 parents 4676356 + c1cc6f6 commit 6ad8d66

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/games/frogger.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -394,13 +394,15 @@ export class FroggerGame extends GameBase {
394394
return ( suits.indexOf(suit) === -1 )
395395
}
396396

397-
private countColumnFrogs(home?: boolean): number {
397+
private countColumnFrogs(home?: boolean, player?: playerid): number {
398398
//Returns number of currplayer's frogs in the start (false/undefined) or home (true) column.
399+
if (player === undefined)
400+
player = this.currplayer;
399401
let col = 0;
400402
if (home)
401403
col = this.columns - 1;
402404

403-
const cell = this.coords2algebraic(col, this.currplayer as number);
405+
const cell = this.coords2algebraic(col, player as number);
404406
if (!this.board.has(cell))
405407
return 0;
406408
const piece = this.board.get(cell)!;
@@ -1786,9 +1788,15 @@ export class FroggerGame extends GameBase {
17861788
}
17871789

17881790
protected checkEOG(): FroggerGame {
1789-
if ( this.countColumnFrogs(true) === 6 ) {
1791+
//You can only win on your own turn.
1792+
let prevplayer = this.currplayer - 1;
1793+
if (prevplayer < 1) {
1794+
prevplayer = this.numplayers;
1795+
}
1796+
1797+
if ( this.countColumnFrogs(true, prevplayer as playerid) === 6 ) {
17901798
this.gameover = true;
1791-
this.winner.push(this.currplayer);
1799+
this.winner.push(prevplayer as playerid);
17921800
}
17931801

17941802
if (this.gameover) {

test/games/frogger.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,4 +470,13 @@ describe("Frogger", () => {
470470

471471
});
472472

473+
it ("Declares the winner", () => {
474+
//Trimmed a game down to the last move for testing purposes.
475+
const g = new FroggerGame(`{"game":"frogger","numplayers":2,"variants":["refills","advanced","courts","freeswim"],"gameover":false,"winner":[],"stack":[{"_version":"20251229","_results":[{"type":"move","from":"a3","to":"c2","what":"2VL","how":"forward"}],"_timestamp":"2026-01-11T15:35:08.026Z","currplayer":2,"lastmove":"2VL:a3-c2/","board":{"dataType":"Map","value":[["b4","PMYK"],["c4","PSVK"],["d4","NM"],["e4","PMSL"],["f4","5SV"],["g4","NY"],["h4","3SK"],["i4","PVLY"],["j4","8MS"],["k4","5ML"],["a3","X1-4"],["l3","X1-1"],["l2","X2-5"],["i1","X2"],["c2","X1"]]},"closedhands":[[],[]],"hands":[[],["NL","9LK"]],"market":["1S"],"discards":["6SY","TSLK","TMLY","TSVY","8VL","5YK","2VL"],"nummoves":3}]}`);
476+
477+
expect(g.validateMove("9LK:i1-k2/NL:k2-l2/")).to.have.deep.property("valid", true);
478+
g.move("9LK:i1-k2/NL:k2-l2/");
479+
expect(g.gameover).eq(true);
480+
});
481+
473482
});

0 commit comments

Comments
 (0)