Logic for the Risk board game.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Conquête - The Risk board game in JavaScript

npm version Build Status Coverage Status Dependency Status devDependency Status

This JavaScript module contains the logic for the Risk board game. Current features are:

  • 3 to 6 players. (No 2 player game, since no neutral player has been implemented yet)
  • Classic risk map
  • Option to use a custom map
  • Cards have a fixed bonus (combination and bonus can be configured)
  • Event based (make it easy to work with sockets for example)

The module includes a simple cli to run the game (npm run cli).;


npm install --save conquete

Node version 5.x.x is required and currently you have to run with the --es_staging flag.


A game is initialized with an options object. This options object includes the map, game rules, an array of players and a listener. The listener options is an EventEmitter that will listener to game events. Each player also has a listener, which is an EventEmitter that listens to events targeted at that player. Optionally a state can be passed in to resume a game from a given state.

const conquete = require('conquete');
const EventEmitter = require('events');

const gameEvents = new EventEmitter();
const playerOneEvents = new EventEmitter();
const playerTwoEvents = new EventEmitter();
const playerThreeEvents = new EventEmitter();

const options = {
    map: conquete.maps.classic(), // Map to use
    debug: false, // Debug mode (shows logs)
    listener: gameEvents, // Listener for game events
    startUnits: { // Number of starting units  for the given amount of players
        2: 40,
        3: 35,
        4: 30,
        5: 25,
        6: 20
    players: [ // Players
            id: 'p1',
            listener: playerOneEvents // EventEmitter that listens to events for this player
            id: 'c2',
            listener: playerTwoEvents
        }, {
            id: 'c3',
            listener: playerThreeEvents
    jokerCards: 2, // number of joker cards (default: 2)
    cardBonus: [ // valid card combinations and their bonuses
            cards: ['cavalry', 'artillery', 'infantry'],
            bonus: 10
            cards: ['artillery', 'artillery', 'artillery'],
            bonus: 8,
            cards: ['cavalry', 'cavalry', 'cavalry'],
            bonus: 6,
            cards: ['infantry', 'infantry', 'infantry'],
            bonus: 4,

const game = conquete.Game(options);


Errors that the game can thrown can be found here:

Game events

The game is can emit the following events:

  • Game events: Events that are emitted to all players.
  • Player events: Events that are emitted to only the relevant player.

Save and load a state

You can get the current game state by reading the state property on the game object. You could save this state and load it into the game.

// Read the state from a game
const state = game.state;

const newGame = conquete.Game(options, state);