1 const express = require("express");
2 const cors = require("cors");
3 const body_parser = require("body-parser");
11 this.next_player_id = 1;
14 add_player(name, character) {
15 this._players.push({id: this.next_player_id,
20 this.next_player_id++;
24 const index = this._players.findIndex(player => player.id === id);
25 this._players.splice(index, 1);
28 remove_all_players() {
30 this.next_player_id = 1;
33 capture(captor_id, captee_id) {
34 /* TODO: Fix to fail on already-captured players (or to move the
35 * captured player from an old captor to a new—need to clarify in
36 * the API specification which we want here. */
37 let captor = this._players.find(player => player.id === captor_id);
38 captor.captures.push(captee_id);
42 let captor = this._players.find(player => player.captures.includes(captee_id));
43 captor.captures.splice(captor.captures.indexOf(captee_id), 1);
47 for (const player of this._players) {
53 return this._players.map(player => player.character);
57 return this._players.map(player => ({id: player.id, captures: player.captures}));
61 return this._players.map(player => ({id: player.id, name: player.name }));
65 const game = new Game();
67 app.use(body_parser.urlencoded({ extended: false }));
68 app.use(body_parser.json());
70 app.get('/', (request, response) => {
71 response.send('Hello World!');
74 app.post('/register', (request, response) => {
75 game.add_player(request.body.name, request.body.character);
79 app.post('/deregister/:id', (request, response) => {
80 game.remove_player(parseInt(request.params.id));
84 app.post('/reset', (request, response) => {
85 game.remove_all_players();
89 app.post('/capture/:captor/:captee', (request, response) => {
90 game.capture(parseInt(request.params.captor), parseInt(request.params.captee));
94 app.post('/liberate/:id', (request, response) => {
95 game.liberate(parseInt(request.params.id));
99 app.post('/restart', (request, response) => {
100 game.restart(parseInt(request.params.id));
104 app.get('/characters', (request, response) => {
105 response.send(game.characters);
108 app.get('/empires', (request, response) => {
109 response.send(game.empires);
112 app.get('/players', (request, response) => {
113 response.send(game.players);
116 app.listen(3000, function () {
117 console.log('Example app listening on port 3000!');