diff --git a/games/tic-tac-toe-js/css/screen.css b/games/tic-tac-toe-js/css/screen.css
new file mode 100644
index 0000000..d31c57d
--- /dev/null
+++ b/games/tic-tac-toe-js/css/screen.css
@@ -0,0 +1,27 @@
+body {
+ text-align: center;
+}
+
+table {
+ border-collapse: collapse;
+ margin: auto;
+}
+
+td {
+ width: 50px;
+ height: 50px;
+ font-size: 20px;
+ vertical-align: middle;
+ text-align: center;
+ cursor: pointer;
+ border-left: 1px solid gray;
+ border-top: 1px solid gray;
+}
+
+tr:first-child td {
+ border-top: none;
+}
+
+td:first-child {
+ border-left: none;
+}
diff --git a/games/tic-tac-toe-js/index.html b/games/tic-tac-toe-js/index.html
new file mode 100644
index 0000000..bb008f9
--- /dev/null
+++ b/games/tic-tac-toe-js/index.html
@@ -0,0 +1,12 @@
+
+
+
+ Tic Tac Toe
+
+
+
+
+
+ New game
+
+
\ No newline at end of file
diff --git a/games/tic-tac-toe-js/js/game.js b/games/tic-tac-toe-js/js/game.js
new file mode 100644
index 0000000..fdb9c4c
--- /dev/null
+++ b/games/tic-tac-toe-js/js/game.js
@@ -0,0 +1,38 @@
+// This first version doesn't take networking into account yet.
+
+function TicTacToe(container_id) {
+ this.player_turn = 1;
+ this.rows = 3;
+
+ this.container = document.getElementById(container_id);
+ var table = document.createElement("table");
+ var tr = document.createElement("tr");
+ var td = document.createElement("td");
+
+ for(var i=0; i < this.rows; i++) {
+ var atr = tr.cloneNode();
+
+ for(var j=0; j < this.rows; j++) {
+
+
+ var atd = td.cloneNode();
+ var self = this;
+ atd.onclick = function(e) {
+ if (e.target.innerHTML == "") {
+ if (self.player_turn == 1) {
+ e.target.innerHTML = "X";
+ self.player_turn = 2;
+ } else {
+ e.target.innerHTML = "O";
+ self.player_turn = 1;
+ }
+ }
+ }
+ atr.appendChild(atd);
+ }
+ table.appendChild(atr);
+ }
+
+ this.container.innerHTML = "";
+ this.container.appendChild(table)
+}
diff --git a/games/tic-tac-toe-js/js/server.js b/games/tic-tac-toe-js/js/server.js
new file mode 100644
index 0000000..e51de29
--- /dev/null
+++ b/games/tic-tac-toe-js/js/server.js
@@ -0,0 +1,63 @@
+function TicTacToeServer(rows) {}
+
+TicTacToeServer.prototype.init = function() {
+
+}
+
+TicTacToeServer.newGame = function() {
+ this.rows = 3;
+
+ // Initiate game with empty rows and columns
+ this.gameBoard = [];
+ for (var i=0; i < this.rows; i++) {
+ this.gameBoard[i] = [];
+ for (var j=0; i < this.rows; i++) {
+ this.gameBoard[i][j] = '';
+ }
+ }
+}
+
+TicTacToeServer.prototype.checkIfWon = function(player) {
+
+ for (i = 0; i < this.rows; ++i) {
+ for (j = 0; j < this.rows; ++j) {
+ if (this.gameBoard[i][j] != 'X') {
+ break;
+ }
+ }
+ if (j == this.rows) {
+ return true;
+ }
+
+ for (j = 0; j < this.rows; ++j) {
+ if (this.gameBoard[j][i] != 'X') {
+ break;
+ }
+ }
+ if (j == this.rows) {
+ return true;
+ }
+ }
+
+ // Now check diagnols
+ for (i = 0; i < this.rows; ++i) {
+ if (this.gameBoard[i][i] != 'X') {
+ break;
+ }
+ }
+
+ if (i == this.rows) {
+ return true;
+ }
+
+ for (i = 0; i < this.rows; ++i) {
+ if (this.gameBoard[i][this.rows - i - 1] != 'X') {
+ break;
+ }
+ }
+ if (i == this.rows) {
+ return true;
+ }
+
+ return false;
+}
\ No newline at end of file