Q X Innovation
  • Home
  • Contact
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>

Powered by Create your own unique website with customizable templates.