X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=tictactoe.js;h=a7e6cfae290af760a9fedcef349b5a2f58136c44;hb=bf51534cfe9f8f1d90fd6df4ae590fdecdc2825e;hp=18fe3428806bee30c2c533182b15e02fee36993b;hpb=d04124365041fb3d9606a0aa56b49a2147565038;p=empires-server diff --git a/tictactoe.js b/tictactoe.js index 18fe342..a7e6cfa 100644 --- a/tictactoe.js +++ b/tictactoe.js @@ -1,26 +1,63 @@ const express = require("express"); -const cors = require("cors"); -const body_parser = require("body-parser"); -const path = require("path"); -const nunjucks = require("nunjucks"); - -const app = express(); -app.use(cors()); -app.use(body_parser.urlencoded({ extended: false })); -app.use(body_parser.json()); - -nunjucks.configure("templates", { - autoescape: true, - express: app -}); - -app.get('/', (request, response) => { - const game = request.game; - - if (! request.session.nickname) - response.render('choose-nickname.html', { game_name: "Tic Tac Toe" }); - else - response.render('tictactoe-game.html'); -}); - -exports.app = app; +const Game = require("./game.js"); + +class TicTacToe extends Game { + constructor(id) { + super(id); + this.teams = [ + { + id: 0, + name: "X" + }, + { + id: 1, + name: "O" + }]; + this.state = { + moves: [], + board: Array(9).fill(""), + team_to_play: this.teams[0], + }; + } + + /* Returns true if move was legal and added, false otherwise. */ + add_move(player, square) { + + const state = this.state; + const result = super.add_move(player, square); + + /* If the generic Game class can reject this move, then we don't + * need to look at it any further. */ + if (! result.legal) + return result; + + /* Cannot move to an occupied square. */ + if (state.board[square]) + { + return { legal: false, + message: "Square is already occupied" }; + } + + state.board[square] = state.team_to_play; + state.moves.push(square); + + if (state.team_to_play.id === 0) + state.team_to_play = this.teams[1]; + else + state.team_to_play = this.teams[0]; + + return { legal: true }; + } +} + +TicTacToe.router = express.Router(); + +TicTacToe.meta = { + name: "Tic Tac Toe", + identifier: "tictactoe", + options: { + allow_guest: true + } +}; + +exports.Game = TicTacToe;