Checkers rebuilt for a hex board and up to six armies at once. Every player is seated at one of the board’s six edges, everyone is everyone else’s enemy, and the only square that promotes is the single hex at the dead center — which means the whole table is fighting over one cell.
Built on the hex-grid base layer: that module supplies the coordinates, the layout math and the polygons; this creation adds the seats, the sectors, and the law.
Rules
- Board: a radius-5 hexagon, 91 cells. Each player owns the two rows in front of their edge — 7 pieces — except the cells where two seats’ rows meet, which start empty as seams. Six players put 42 pieces on the board.
- Movement: one cell in any of the four directions that don’t lead back toward your own edge (two inward, two lateral). You can never retreat until you promote.
- Captures: short jump over an adjacent enemy into the empty cell beyond, in those same four directions. Capturing is compulsory — if a jump exists, nothing else is legal, though you choose which jump. Once a piece jumps it must keep jumping while jumps remain.
- Promotion: land on the exact center hex and the piece is promoted, and the turn ends there — even mid-chain. A promoted piece moves and jumps one cell in all six directions. The center is an ordinary cell otherwise: the piece standing on it can be captured like any other, and the next piece to land there promotes too.
- Elimination: lose your last piece and you’re out. Having pieces but no legal move only skips your turn — someone else’s move can free you.
- Victory: last player with pieces on the board. There is no draw rule; a game where nobody can force anything just continues (the demo does call a draw if literally every survivor is frozen).
Two consequences worth knowing before you play: compulsory captures plus mandatory chains mean an opponent can walk you into a chain that hands the board to a third player — that’s the multiplayer tax on classic checkers law. And with no draw rule, two kings shuffling in the endgame is settled by agreement, not by the rules.
Reuse
src/hex-checkers.js is a headless, framework-free ES module — no DOM, no
rendering, just the law:
createGame({ players, radius })→ a live game:board(Map of"q,r"→{seat, king}),seats,current,chainFrom,winner,draw.legalMoves()applies the turn-level rules (compulsory capture, chain lock) and returns{from, to, capture, promotes}objects;movesFrom(hex)filters to one piece.apply(move)mutates and returns what happened:{captured, promoted, chaining, eliminated, skipped, winner}. It re-validates the move, so a bad one is rejected rather than corrupting the board.snapshot()/restore()are a string round-trip — the demo’s undo stack is just an array of snapshots.FACES,facingDirections(face),homeCells(faceIndex, radius)andseatFaces(players)expose the board sectioning if you want a different seating or army layout.
Swap the rules and the geometry still holds: radius is a parameter, seats are
derived from the six faces, and nothing in the engine assumes six players.
Gotchas
- Seats are placed by
Math.round(i * 6 / players), so 4 and 5 players sit at slightly uneven spacings (there’s no even split of six edges into four). - The engine mutates in place and hands you the same
moveobjects it generated; snapshot before applying if you need history. src/bundles its own copy ofhex-grid.js, anddemo/bundles copies of both (self-contained by contract, ADR-0002). Re-copy after editing either.- The center hex confers no protection. A king that stops there is the most exposed piece on the board — which is the point.