/lib/game.js
JavaScript | 284 lines | 237 code | 36 blank | 11 comment | 52 complexity | a7c8656da135b102c7348786b3b4c840 MD5 | raw file
- /*jshint node:true */
- module.exports = {
-
- game: function game(map, socket, io) {
- "use strict";
- socket.newtroops = 10;
- //przygotowanie danych mapy
-
- map[socket.room] = {na1: {},na2: {},na3: {},na4: {},na5: {},na6: {},na7: {},na8: {},na9: {},na10: {},sa1: {},sa2: {},sa3: {},sa4: {},af1: {},af2: {},af3: {},af4: {},af5: {},eu1: {},eu2: {},eu3: {},eu4: {},eu5: {},eu6: {},as1: {},as2: {},as3: {},as4: {},as5: {},as6: {},as7: {},as8: {},as9: {},as10: {},as11: {},aus1: {},aus2: {},aus3: {}};
- mapIni(map[socket.room]);
-
- //inicjalizajca mapy u klienta
- socket.emit('startGame');
- //inicjalizacja danych u klienta po pod??czeniu drugiej osoby
- if (io.sockets.manager.rooms['/' + socket.room].length === 2) {
- map[socket.room] = mapRandom(map[socket.room], io, socket);
-
-
- for (var i in io.sockets.manager.rooms['/' + socket.room]) {
-
-
- if (io.sockets.manager.rooms['/' + socket.room][i] === socket.id) {
- io.sockets.sockets[io.sockets.manager.rooms['/' + socket.room][i]].emit('startMap', map[socket.room], io.sockets.manager.rooms['/' + socket.room][(i + 1) % 2], socket.newtroops);
- io.sockets.sockets[socket.oponent].oponent = socket.id;
- }
- else {
- socket.oponent = io.sockets.manager.rooms['/' + socket.room][i];
- io.sockets.sockets[io.sockets.manager.rooms['/' + socket.room][i]].emit('startMap', map[socket.room], io.sockets.manager.rooms['/' + socket.room][(i + 1) % 2], socket.newtroops);
- }
-
- }
- }
- },
-
- socket: function socket(map, socket, io) {
- "use strict";
-
- //dodawanie jednostki do pola
- socket.on('addTroop', function (area) {
- console.log(socket.id + ' ' + map[socket.room][area].owner + ' ' + area);
- if (socket.id === map[socket.room][area].owner && socket.newtroops !== 0) {
-
- map[socket.room][area].army.soldier[0] = map[socket.room][area].army.soldier[0] + 1;
- socket.newtroops = socket.newtroops - 1;
- io.sockets.to(socket.room).emit('updateTroops', area, map[socket.room][area].army.soldier[0]);
- socket.emit('troopsLeft', socket.newtroops);
- if (socket.newtroops === 0 && io.sockets.sockets[socket.oponent].newtroops === 0) {
- socket.stopinterval = 0;
- io.sockets.to(socket.room).emit('endTroops');
- io.sockets.to(socket.room).emit('updateChat', 'SERVER', 'Start Game');
- }
- }
- });
-
-
- //generowanie ilo?ci bonusowych wojsk
- socket.on('bonus', function () {
- var newtroops = setInterval(bonusTroops, 7000);
-
- function bonusTroops() {
- if (socket.stopinterval === 1) {
- clearInterval(newtroops);
- return 0;
- }
-
- var key, bonus = 0,
- na = 0,
- sa = 0,
- eu = 0,
- af = 0,
- aus = 0,
- as = 0;
- for (key in map[socket.room]) {
- if (map[socket.room][key].owner === socket.id) {
-
- if (key.match(/na/)) {
- na = na + 1;
- }
- else if (key.match(/sa/)) {
- sa = sa + 1;
- }
- else if (key.match(/eu/)) {
- eu = eu + 1;
- }
- else if (key.match(/af/)) {
- af = af + 1;
- }
- else if (key.match(/aus/)) {
- aus = aus + 1;
- }
- else if (key.match(/as/)) {
- as = as + 1;
- }
- }
- }
- if (na === 10) {
- bonus = bonus + 6;
- }
- if (sa === 4) {
- bonus = bonus + 2;
- }
- if (eu === 6) {
- bonus = bonus + 4;
- }
- if (af === 5) {
- bonus = bonus + 3;
- }
- if (as === 11) {
- bonus = bonus + 7;
- }
- if (aus === 3) {
- bonus = bonus + 1;
- }
-
- socket.newtroops = socket.newtroops + bonus + 1;
- socket.emit('bonusTroops', socket.newtroops);
-
- }
- });
-
- //atakowanie
- socket.on('attack', function (from, to, number) {
- number = parseInt(number, 10);
- if (!isNaN(number) && socket.id === map[socket.room][from].owner && socket.oponent === map[socket.room][to].owner) {
- if (map[socket.room][from].army.soldier[0] < number) {
- number = map[socket.room][from].army.soldier[0];
- }
-
- var attack = setInterval(function () {
- attackMove();
- }, 3000);
- }
-
- function attackMove() {
- if (number === 0) {
- clearInterval(attack);
-
-
- }
- else if (map[socket.room][to].army.soldier[0] === 0) {
- clearInterval(attack);
- map[socket.room][to].owner = socket.id;
- map[socket.room][to].army.soldier[0] = number;
- map[socket.room][from].army.soldier[0] = map[socket.room][from].army.soldier[0] - number;
- io.sockets.to(socket.room).emit('updateOwner', to, map[socket.room][to].owner);
- io.sockets.to(socket.room).emit('updateTroops', from, map[socket.room][from].army.soldier[0]);
- io.sockets.to(socket.room).emit('updateTroops', to, map[socket.room][to].army.soldier[0]);
- if (winCheck(map, socket) === 1) {
- io.sockets.to(socket.room).emit('winGame', socket.username);
- socket.emit('backToLobby');
-
- }
-
- }
- else {
- if (Math.floor((Math.random() * 1000) + 1) < 600) {
- map[socket.room][from].army.soldier[0] = map[socket.room][from].army.soldier[0] - 1;
- number = number - 1;
- io.sockets.to(socket.room).emit('updateTroops', from, map[socket.room][from].army.soldier[0]);
- }
- else {
- map[socket.room][to].army.soldier[0] = map[socket.room][to].army.soldier[0] - 1;
- io.sockets.to(socket.room).emit('updateTroops', to, map[socket.room][to].army.soldier[0]);
- }
- }
- }
-
- });
-
- //przemieszczanie jednostek
- socket.on('move', function (from, to, number) {
- number = parseInt(number, 10);
-
- if (!isNaN(number) && socket.id === map[socket.room][from].owner && socket.id === map[socket.room][to].owner) {
- if (map[socket.room][from].army.soldier[0] < number) {
- number = map[socket.room][from].army.soldier[0];
- }
- map[socket.room][from].army.soldier[0] = map[socket.room][from].army.soldier[0] - number;
- io.sockets.to(socket.room).emit('updateTroops', from, map[socket.room][from].army.soldier[0]);
- socket.emit('moveTimer');
-
- setTimeout(fn, 3000);
-
- }
-
- function fn() {
- if (map[socket.room][to].owner === socket.id) {
- map[socket.room][to].army.soldier[0] = map[socket.room][to].army.soldier[0] + parseInt(number, 10);
- io.sockets.to(socket.room).emit('updateTroops', to, map[socket.room][to].army.soldier[0]);
- }
- else if (map[socket.room][from].owner === socket.id) {
- map[socket.room][from].army.soldier[0] = map[socket.room][from].army.soldier[0] + parseInt(number, 10);
- io.sockets.to(socket.room).emit('updateTroops', from, map[socket.room][from].army.soldier[0]);
- }
- }
- });
-
- }
- };
- //sprawdzenie czy wygra?
- function winCheck(map, socket) {
- "use strict";
- for (var key in map[socket.room]) {
- if (map[socket.room][key].owner !== socket.id) {
- return 0;
- }
-
- }
- return 1;
- }
-
- //podstawowe dane mapy
- function mapIni(map) {
- "use strict";
- for (var key in map) {
- map[key] = {
- owner: null,
- army: {
- soldier: [0, 0]
- },
- buildings: {
- wall: 0
- },
- connections: []
- };
- }
- map.na1.connections = ["na2", "na4", "as9"];
- map.na2.connections = ["na1", "na3", "na4", "na5"];
- map.na3.connections = ["na2", "na5", "na7", "na6"];
- map.na4.connections = ["na1", "na2", "na5", "na8"];
- map.na5.connections = ["na4", "na2", "na3", "na7", "na8", "na10"];
- map.na6.connections = ["na3", "na7", "eu1", "eu3"];
- map.na7.connections = ["na3", "na6", "na5", "na10"];
- map.na8.connections = ["na5", "na4", "na10", "na9"];
- map.na9.connections = ["na8", "na10", "sa1"];
- map.na10.connections = ["na8", "na5", "na7", "na9"];
- map.sa1.connections = ["na9", "sa2", "sa4"];
- map.sa2.connections = ["sa1", "sa3", "sa4"];
- map.sa3.connections = ["sa2", "sa4"];
- map.sa4.connections = ["sa1", "sa2", "sa3", "af1"];
- map.af1.connections = ["sa4", "eu2", "af2", "af5", "af3"];
- map.af2.connections = ["af1", "af5", "as1"];
- map.af3.connections = ["af1", "af5", "af4"];
- map.af4.connections = ["af3", "af5"];
- map.af5.connections = ["af1", "af2", "af3", "af4"];
- map.eu1.connections = ["eu2", "eu3", "eu4", "na6"];
- map.eu2.connections = ["eu1", "eu4", "eu6", "af1"];
- map.eu3.connections = ["eu1", "eu4", "eu5", "na6"];
- map.eu4.connections = ["eu1", "eu2", "eu3", "eu6", "eu5"];
- map.eu5.connections = ["eu3", "eu4", "eu6", "as3", "as2", "as1"];
- map.eu6.connections = ["eu2", "eu4", "eu5", "as1"];
- map.as1.connections = ["eu6", "eu5", "as2", "as10", "af2"];
- map.as2.connections = ["as1", "as10", "as4", "as3", "eu5"];
- map.as3.connections = ["as2", "as5", "as4", "eu5"];
- map.as4.connections = ["as2", "as3", "as5", "as8", "as10", "as11"];
- map.as5.connections = ["as3", "as4", "as6", "as7", "as8"];
- map.as6.connections = ["as5", "as7", "as9"];
- map.as7.connections = ["as5", "as6", "as8", "as9"];
- map.as8.connections = ["as5", "as7", "as9", "as4"];
- map.as9.connections = ["as6", "as7", "as8"];
- map.as10.connections = ["as1", "as2", "as4", "as11"];
- map.as11.connections = ["as10", "as4", "aus1"];
- map.aus1.connections = ["aus2", "aus3", "as11"];
- map.aus2.connections = ["aus1", "aus3"];
- map.aus3.connections = ["aus1", "aus2"];
- }
-
- //losowanie pól
-
- function mapRandom(map, io, socket) {
- "use strict";
- var random = ['na1', 'na2', 'na3', 'na4', 'na5', 'na6', 'na7', 'na8', 'na9', 'na10', 'sa1', 'sa2', 'sa3', 'sa4', 'af1', 'af2', 'af3', 'af4', 'af5', 'eu1', 'eu2', 'eu3', 'eu4', 'eu5', 'eu6', 'as1', 'as2', 'as3', 'as4', 'as5', 'as6', 'as7', 'as8', 'as9', 'as10', 'as11', 'aus1', 'aus2', 'aus3'];
- for (var i = 0; i < 39; i = i + 1) {
- var rand = Math.floor(Math.random() * random.length);
- if (i % 2 === 0) {
- map[random[rand]].owner = io.sockets.sockets[io.sockets.manager.rooms['/' + socket.room][0]].id;
- }
- else {
- map[random[rand]].owner = io.sockets.sockets[io.sockets.manager.rooms['/' + socket.room][1]].id;
- }
- random.splice(rand, 1);
- }
- return map;
- }