5_in_row_server.js
var app = require('http').createServer(handler)
, io = require('/home/bitnami/node_modules/socket.io/lib/socket.io.js').listen(app)
, fs = require('fs')
app.listen(8080);
io.set('log level',1);
function handler (req, res) {
fs.readFile('5_in_row_client.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading file');
}
res.writeHead(200);
res.end(data);
});
}
var status = new Array();
var socket_red = null;
var socket_blue = null;
function reset_game() {
socket_red = null;
socket_blue = null;
status = new Array();
}
function move(col,row,color) {
this.col=col;
this.row=row;
this.color=color;
}
function five_in_row() {
var field = new Array(10);
for (var i=0; i<10; i++) {
field[i] = new Array(10);
}
for (var row=0; row<10; row++) {
for (var col=0; col<10; col++) {
field[col][row]=0;
}
}
for (var i=0; i< status.length; i++) {
field[status[i].col][status[i].row] = status[i].color;
}
for (var row=0; row<10; row++) {
for (col =0; col <6; col++) {
if ((field[row][col] != 0) &&
(field[row][col+1] == field[row][col]) &&
(field[row][col+2] == field[row][col]) &&
(field[row][col+3] == field[row][col]) &&
(field[row][col+4] == field[row][col]))
{ return true; }
}
}
for (var col=0; col<10; col++) {
for (row =0; row <6; row++) {
if ((field[row][col] != 0) &&
(field[row+1][col] == field[row][col]) &&
(field[row+2][col] == field[row][col]) &&
(field[row+3][col] == field[row][col]) &&
(field[row+4][col] == field[row][col]))
{ return true; }
}
}
return false;
}
io.sockets.on('connection', function (socket) {
if (socket_red == null) {
socket_red = socket.id;
io.sockets.socket(socket_red).emit('message',
'waiting for 2nd player');
} else {
if (socket_blue == null) {
socket_blue = socket.id;
io.sockets.socket(socket_red).emit('message','your turn');
io.sockets.socket(socket_blue).emit('message',
'waiting for red');
}
}
io.sockets.emit('status', JSON.stringify(status));
socket.on('disconnect', function() {
if (socket.id == socket_red || socket.id == socket_blue) {
io.sockets.emit('message','game over');
reset_game();
}
});
socket.on('move', function (col,row) {
if (socket.id == socket_red &&
socket_blue != null &&
(status.length % 2 == 0)) {
var myMove = new move(col,row,"#FF0000");
status[status.length]=myMove;
io.sockets.socket(socket_red).emit('message',
'waiting for blue');
io.sockets.socket(socket_blue).emit('message','your turn');
}
if (socket.id == socket_blue &&
socket_red != null &&
(status.length % 2 == 1)) {
var myMove = new move(col,row,"#0000FF");
status[status.length]=myMove;
io.sockets.socket(socket_red).emit('message','your turn');
io.sockets.socket(socket_blue).emit('message',
'waiting for red');
}
io.sockets.emit('status', JSON.stringify(status));
if (five_in_row() == true) {
io.sockets.emit('message','game over');
reset_game();
}
});
});
5_in_row_client.html
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<canvas id="myCanvas" onclick="sendMove(event)" width="400" height="400"></canvas>
<p id="paragraph_1"> </p>
<script>
var p = document.getElementById("paragraph_1");
var c = document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var socket = io.connect("http://" + window.location.host);
drawBoard();
socket.on('status', function (statusStr) {
ctx.clearRect(0, 0, c.width, c.height);
drawBoard();
var status = JSON.parse(statusStr);
for (var i=0; i< status.length; i++) {
ctx.beginPath();
ctx.arc(40*status[i].col+20, 40*status[i].row+20,12,0,2*Math.PI);
ctx.fill[i].color;
ctx.fill();
}
});
socket.on('message', function (data) {
p.innerHTML = data;
});
function sendMove(event) {
var col = Math.floor(event.clientX / 40);
var row = Math.floor(event.clientY / 40);
socket.emit('move', col, row);
}
function drawBoard() {
for (var i=0; i<11; i++) {
ctx.moveTo(i*40,0);
ctx.lineTo(i*40,400);
ctx.stroke();
ctx.moveTo(0,i*40);
ctx.lineTo(400,i*40);
ctx.stroke();
}
}
</script>
</body>
</html>
var app = require('http').createServer(handler)
, io = require('/home/bitnami/node_modules/socket.io/lib/socket.io.js').listen(app)
, fs = require('fs')
app.listen(8080);
io.set('log level',1);
function handler (req, res) {
fs.readFile('5_in_row_client.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading file');
}
res.writeHead(200);
res.end(data);
});
}
var status = new Array();
var socket_red = null;
var socket_blue = null;
function reset_game() {
socket_red = null;
socket_blue = null;
status = new Array();
}
function move(col,row,color) {
this.col=col;
this.row=row;
this.color=color;
}
function five_in_row() {
var field = new Array(10);
for (var i=0; i<10; i++) {
field[i] = new Array(10);
}
for (var row=0; row<10; row++) {
for (var col=0; col<10; col++) {
field[col][row]=0;
}
}
for (var i=0; i< status.length; i++) {
field[status[i].col][status[i].row] = status[i].color;
}
for (var row=0; row<10; row++) {
for (col =0; col <6; col++) {
if ((field[row][col] != 0) &&
(field[row][col+1] == field[row][col]) &&
(field[row][col+2] == field[row][col]) &&
(field[row][col+3] == field[row][col]) &&
(field[row][col+4] == field[row][col]))
{ return true; }
}
}
for (var col=0; col<10; col++) {
for (row =0; row <6; row++) {
if ((field[row][col] != 0) &&
(field[row+1][col] == field[row][col]) &&
(field[row+2][col] == field[row][col]) &&
(field[row+3][col] == field[row][col]) &&
(field[row+4][col] == field[row][col]))
{ return true; }
}
}
return false;
}
io.sockets.on('connection', function (socket) {
if (socket_red == null) {
socket_red = socket.id;
io.sockets.socket(socket_red).emit('message',
'waiting for 2nd player');
} else {
if (socket_blue == null) {
socket_blue = socket.id;
io.sockets.socket(socket_red).emit('message','your turn');
io.sockets.socket(socket_blue).emit('message',
'waiting for red');
}
}
io.sockets.emit('status', JSON.stringify(status));
socket.on('disconnect', function() {
if (socket.id == socket_red || socket.id == socket_blue) {
io.sockets.emit('message','game over');
reset_game();
}
});
socket.on('move', function (col,row) {
if (socket.id == socket_red &&
socket_blue != null &&
(status.length % 2 == 0)) {
var myMove = new move(col,row,"#FF0000");
status[status.length]=myMove;
io.sockets.socket(socket_red).emit('message',
'waiting for blue');
io.sockets.socket(socket_blue).emit('message','your turn');
}
if (socket.id == socket_blue &&
socket_red != null &&
(status.length % 2 == 1)) {
var myMove = new move(col,row,"#0000FF");
status[status.length]=myMove;
io.sockets.socket(socket_red).emit('message','your turn');
io.sockets.socket(socket_blue).emit('message',
'waiting for red');
}
io.sockets.emit('status', JSON.stringify(status));
if (five_in_row() == true) {
io.sockets.emit('message','game over');
reset_game();
}
});
});
5_in_row_client.html
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<canvas id="myCanvas" onclick="sendMove(event)" width="400" height="400"></canvas>
<p id="paragraph_1"> </p>
<script>
var p = document.getElementById("paragraph_1");
var c = document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var socket = io.connect("http://" + window.location.host);
drawBoard();
socket.on('status', function (statusStr) {
ctx.clearRect(0, 0, c.width, c.height);
drawBoard();
var status = JSON.parse(statusStr);
for (var i=0; i< status.length; i++) {
ctx.beginPath();
ctx.arc(40*status[i].col+20, 40*status[i].row+20,12,0,2*Math.PI);
ctx.fill[i].color;
ctx.fill();
}
});
socket.on('message', function (data) {
p.innerHTML = data;
});
function sendMove(event) {
var col = Math.floor(event.clientX / 40);
var row = Math.floor(event.clientY / 40);
socket.emit('move', col, row);
}
function drawBoard() {
for (var i=0; i<11; i++) {
ctx.moveTo(i*40,0);
ctx.lineTo(i*40,400);
ctx.stroke();
ctx.moveTo(0,i*40);
ctx.lineTo(400,i*40);
ctx.stroke();
}
}
</script>
</body>
</html>