X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=tictactoe.js;h=da55c9f48e42c663f3e4016acaf6f4f083f15061;hb=ee64666099c0401afdc1e51fe378359f943d3f69;hp=18fe3428806bee30c2c533182b15e02fee36993b;hpb=d04124365041fb3d9606a0aa56b49a2147565038;p=empires-server diff --git a/tictactoe.js b/tictactoe.js index 18fe342..da55c9f 100644 --- a/tictactoe.js +++ b/tictactoe.js @@ -1,26 +1,39 @@ 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.state = { + moves: [], + board: Array(9).fill(""), + next_player: "X", + }; + } + + /* Returns true if move was legal and added, false otherwise. */ + add_move(square) { + /* Cannot move to an occupied square. */ + if (this.state.board[square]) + return { legal: false, message: "Square is already occupied" }; + + this.state.board[square] = this.state.next_player; + this.state.moves.push(square); + + if (this.state.next_player === "X") + this.state.next_player = "O"; + else + this.state.next_player = "X"; + + return { legal: true }; + } +} + +TicTacToe.router = express.Router(); + +TicTacToe.meta = { + name: "Tic Tac Toe", + identifier: "tictactoe" +}; + +exports.Game = TicTacToe;