class Continent { constructor(name) { this.name = name; this.yield = 0; } } const REGIONS = {}; class Region { constructor(name, continent) { this.name = name; this.owner = null; this.strength = 0; this.neighbours = new Set(); this.continent = continent; REGIONS[name] = this; } static setNeighbours(region1, region2) { region1.neighbours.add(region2); region2.neighbours.add(region1); } static getRegion(name) { return REGIONS[name]; } /** * Test if all regions are claimed or not. * * @returns {boolean} */ static allClaimed() { return Object.values(REGIONS).find((r) => r.owner === null) === null; } claim(player) { this.owner = player; this.strength = 1; } reinforce(amount) { this.strength += amount; } } const EUROPE = new Continent("Europe"); const ASIA = new Continent("Asia"); const AUSTRALASIA = new Continent("Australasia"); const AFRICA = new Continent("Africa"); const SOUTH_AMERICA = new Continent("South America"); const NORTH_AMERICA = new Continent("North America"); const BRITISH_ISLES = new Region("British Isles", EUROPE); const SPAIN = new Region("Spain", EUROPE); const MEDITERRANEAN = new Region("Mediterranean", EUROPE); const GERMANIC = new Region("Germanic States", EUROPE); const WESTERN_SOVIET = new Region("USSR - West", EUROPE); const SCANDINAVIA = new Region("Scandinavia", EUROPE); const ICELAND = new Region("Iceland", EUROPE); const GREENLAND = new Region("Greenland", NORTH_AMERICA); const NEWFOUNDLAND = new Region("Newfoundland", NORTH_AMERICA); const EAST_COAST = new Region("USA - East Coast", NORTH_AMERICA); const CENTRAL_AMERICA = new Region("Mexico", NORTH_AMERICA); const WEST_COAST = new Region("USA - West Coast", NORTH_AMERICA); const ALASKA = new Region("USA - Alaskan", NORTH_AMERICA); const WEST_CANADA = new Region("Canada - West", NORTH_AMERICA); const NORTH_CANADA = new Region("Canada - North", NORTH_AMERICA); const CENTRAL_CANADA = new Region("Canada - Central", NORTH_AMERICA); const MIDDLE_EAST = new Region("Middle East", ASIA); const INDIA = new Region("India", ASIA); const SOUTH_EAST_ASIA = new Region("South East Asia", ASIA); const SOUTH_CHINA = new Region("China - South", ASIA); const NORTH_CHINA = new Region("China - North", ASIA); const JAPAN = new Region("Japan", ASIA); const ALASKAN_SOVIET = new Region("USSR - Alaskan", ASIA); const EAST_NORTH_SOVIET = new Region("USSR - Far East/North", ASIA); const EAST_SOUTH_SOVIET = new Region("USSR - Far East/South", ASIA); const EASTERN_SOVIET = new Region("USSR - East", ASIA); const CENTRAL_SOVIET = new Region("USSR - Central", ASIA); const ISLAMIC_EMIRATE = new Region("Islamic Emirate States", ASIA); const NORTH_AFRICA = new Region("Egypt", AFRICA); const EAST_AFRICA = new Region("Somalia", AFRICA); const SOUTH_AFRICA = new Region("Southern Africa", AFRICA); const CENTRAL_AFRICA = new Region("Central Africa", AFRICA); const WEST_AFRICA = new Region("Saharan Africa", AFRICA); const MADAGASCAR = new Region("Madagascar", AFRICA); const EAST_AUSTRALIA = new Region("Australia - Eastern", AUSTRALASIA); const WEST_AUSTRALIA = new Region("Australia - Western", AUSTRALASIA); const EAST_INDONESIA = new Region("East Indonesia", AUSTRALASIA); const WEST_INDONESIA = new Region("West Indonesia", AUSTRALASIA); const NORTH_SOUTH_AMERICA = new Region("Northern South America", SOUTH_AMERICA); const EAST_SOUTH_AMERICA = new Region("Brazil", SOUTH_AMERICA); const SOUTH_SOUTH_AMERICA = new Region("Argentina", SOUTH_AMERICA); const WEST_SOUTH_AMERICA = new Region("Peru", SOUTH_AMERICA); Region.setNeighbours(BRITISH_ISLES, ICELAND); Region.setNeighbours(BRITISH_ISLES, SCANDINAVIA); Region.setNeighbours(BRITISH_ISLES, GERMANIC); Region.setNeighbours(BRITISH_ISLES, SPAIN); Region.setNeighbours(SPAIN, BRITISH_ISLES); Region.setNeighbours(SPAIN, GERMANIC); Region.setNeighbours(SPAIN, MEDITERRANEAN); Region.setNeighbours(SPAIN, WEST_AFRICA); Region.setNeighbours(GERMANIC, SCANDINAVIA); Region.setNeighbours(GERMANIC, WESTERN_SOVIET); Region.setNeighbours(GERMANIC, MEDITERRANEAN); Region.setNeighbours(GERMANIC, BRITISH_ISLES); Region.setNeighbours(MEDITERRANEAN, GERMANIC); Region.setNeighbours(MEDITERRANEAN, SPAIN); Region.setNeighbours(MEDITERRANEAN, NORTH_AFRICA); Region.setNeighbours(MEDITERRANEAN, WEST_AFRICA); Region.setNeighbours(MEDITERRANEAN, MIDDLE_EAST); Region.setNeighbours(MEDITERRANEAN, WESTERN_SOVIET); Region.setNeighbours(ICELAND, GREENLAND); Region.setNeighbours(ICELAND, SCANDINAVIA); Region.setNeighbours(ICELAND, BRITISH_ISLES); Region.setNeighbours(SCANDINAVIA, WESTERN_SOVIET); Region.setNeighbours(SCANDINAVIA, ICELAND); Region.setNeighbours(SCANDINAVIA, GERMANIC); Region.setNeighbours(SCANDINAVIA, BRITISH_ISLES); Region.setNeighbours(WESTERN_SOVIET, CENTRAL_SOVIET); Region.setNeighbours(WESTERN_SOVIET, ISLAMIC_EMIRATE); Region.setNeighbours(WESTERN_SOVIET, MIDDLE_EAST); Region.setNeighbours(WESTERN_SOVIET, MEDITERRANEAN); Region.setNeighbours(WESTERN_SOVIET, GERMANIC); Region.setNeighbours(WESTERN_SOVIET, SCANDINAVIA);