Skip to content

Commit

Permalink
base app
Browse files Browse the repository at this point in the history
  • Loading branch information
mikanoz committed Dec 14, 2014
1 parent 6e05c69 commit bf95b34
Show file tree
Hide file tree
Showing 14 changed files with 1,074 additions and 69 deletions.
54 changes: 52 additions & 2 deletions client/client-01.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,84 @@
var orientation = require('./helpers/orientation.js');
var memory = require('./helpers/memory.js');
global.SERVER_URL = 'http://localhost:8080/';

var units = [];
var DIR_TOP = 'top';
var DIR_LEFT = 'left';
var DIR_RIGHT = 'right';
var DIR_DOWN = 'down';
var MOD_ATTACK = 'attack';
var MOD_DEF = 'defence';

var client = require('./client.js')({

name: 'mikanoz',
memory: undefined,

/**
* начало игры, данные юнитов
* @param units
*/
start: function (units) {
console.log('units: ' + JSON.stringify(units));
this.memory = new memory(units);
},

/**
* юнит готов к следующему ходу
* @param id
* @param position
* @param hold
* @param move
*/
ready: function (id, position) {
ready: function (id, position, move, hold) {

console.log('ready unit [' + id + '] on ' + JSON.stringify(position));

// оперативная память движений юнита
this.memory.set(id, position);

// помощник по ориентированию в закрытом пространстве
var orient = new orientation(position);

// если не задана стратегия движения
if (!this.memory.getMoveStrategy(id)) {

// определим свободные направления
var possible = orient.getFreeDirections();
if (possible.length > 0) {

// и побежим куда нибудь
var rand = Math.floor(Math.random() * possible.length);
this.memory.setMoveStrategy(id, possible[rand]);

}

}

var direction = this.memory.getDirectByMoveStrategy(id);
if (!direction) {

// запутались, постоим на месте
hold(id, MOD_DEF);

} else {

// осторожно бежим
move(id, direction, MOD_DEF);

}

},

/**
* появился новый юнит!
* @param id
* @param position
* @param hold
* @param move
*/
create: function (id, position) {
create: function (id, position, move, hold) {
console.log('create unit [' + id + '] on ' + JSON.stringify(position));
},

Expand Down
54 changes: 52 additions & 2 deletions client/client-02.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,84 @@
var orientation = require('./helpers/orientation.js');
var memory = require('./helpers/memory.js');
global.SERVER_URL = 'http://localhost:8080/';

var units = [];
var DIR_TOP = 'top';
var DIR_LEFT = 'left';
var DIR_RIGHT = 'right';
var DIR_DOWN = 'down';
var MOD_ATTACK = 'attack';
var MOD_DEF = 'defence';

var client = require('./client.js')({

name: 'batman',
memory: undefined,

/**
* начало игры, данные юнитов
* @param units
*/
start: function (units) {
console.log('units: ' + JSON.stringify(units));
this.memory = new memory(units);
},

/**
* юнит готов к следующему ходу
* @param id
* @param position
* @param hold
* @param move
*/
ready: function (id, position) {
ready: function (id, position, move, hold) {

console.log('ready unit [' + id + '] on ' + JSON.stringify(position));

// оперативная память движений юнита
this.memory.set(id, position);

// помощник по ориентированию в закрытом пространстве
var orient = new orientation(position);

// если не задана стратегия движения
if (!this.memory.getMoveStrategy(id)) {

// определим свободные направления
var possible = orient.getFreeDirections();
if (possible.length > 0) {

// и побежим куда нибудь
var rand = Math.floor(Math.random() * possible.length);
this.memory.setMoveStrategy(id, possible[rand]);

}

}

var direction = this.memory.getDirectByMoveStrategy(id);
if (!direction) {

// запутались, постоим на месте
hold(id, MOD_DEF);

} else {

// осторожно бежим
move(id, direction, MOD_DEF);

}

},

/**
* появился новый юнит!
* @param id
* @param position
* @param hold
* @param move
*/
create: function (id, position) {
create: function (id, position, move, hold) {
console.log('create unit [' + id + '] on ' + JSON.stringify(position));
},

Expand Down
9 changes: 6 additions & 3 deletions client/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ var options = {};
module.exports = connect;
function connect(opt) {

var $this = this;

options = opt;

// сервер сообщает о начале игры и передает данные юнитов
Expand All @@ -15,7 +17,7 @@ function connect(opt) {
// сервер сообщает что юнит готов к следующему ходу
socket.on('ready', function (data) {
// id юнита и его обстановка
options.ready(data.id, data.position);
options.ready(data.id, data.position, $this.move, $this.hold);
});

// сервер сообщает что юнит был уничтожен
Expand All @@ -26,7 +28,7 @@ function connect(opt) {
// сервер сообщает что был создан новый юнит
socket.on('create', function (data) {
// id юнита и его обстановка
options.create(data.id, data.position);
options.create(data.id, data.position, $this.move, $this.hold);
});

/**
Expand All @@ -48,6 +50,7 @@ function connect(opt) {
direction: direction,
mode: mode
});
console.log('player [' + options.name + '] unit [' + id + '] command [move] direction[' + direction + '] mode [' + mode + ']');

};

Expand Down Expand Up @@ -86,7 +89,7 @@ socket.on('handshake', function () {
*/
socket.emit('name', data);

console.log('data received: ' + JSON.stringify(data));
console.log('data sent: ' + JSON.stringify(data));

});

Expand Down
91 changes: 91 additions & 0 deletions client/helpers/memory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
module.exports = memory;

function memory(units) {

/**
* установить новые данные юнита
* @param id
* @param unit
*/
this.set = function (id, unit) {
index[id] = unit;
};

var index = {};
var solutions = {};

for (var i = 0, qnt = units.length; i < qnt; i++) {
this.set(units[i].id, units[i]);
solutions[units[i].id] = {};
}

/**
* приказать двигаться в направлении
*
* 7 8 9
*
* 4 6
*
* 1 2 3
*
* @param id
* @param direction
*/
this.setMoveStrategy = function (id, direction) {
solutions[id].moveStrategy = {
direct: direction, // куда двигаться
last: null // куда был предыдущий шаг
};
};

/**
* новые координаты согласно стратегрии движения
* @param id
*/
this.getDirectByMoveStrategy = function (id) {

var sol = this.getMoveStrategy(id);
if (false === sol) {
return null;
}

switch (sol.direct) {
case 8:
return 'top';
break;
case 6:
return 'right';
break;
case 2:
return 'down';
break;
case 4:
return 'left';
break;
case 7:
return Math.random() * 10 > 5 ? 'left' : 'top';
break;
case 9:
return Math.random() * 10 > 5 ? 'right' : 'top';
break;
case 3:
return Math.random() * 10 > 5 ? 'right' : 'down';
break;
case 1:
return Math.random() * 10 > 5 ? 'left' : 'down';
break;
default:
break;
}

};

this.getMoveStrategy = function (id) {
return this.getSolution(id, 'moveStrategy');
};

this.getSolution = function (id, name) {
return solutions[id][name] || false;
};

}
Loading

0 comments on commit bf95b34

Please sign in to comment.