Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@ npm i -g node-games
node-games
```

language
--------

In order to select another language you can specify it from the command line:

```
node-games <game_name> <language>
```

Available languages: es, en.

spacecraft
----------
![spacecraft](https://raw.githubusercontent.com/mdibaiee/node-games/master/spacecraft.gif)
Expand Down
28 changes: 15 additions & 13 deletions build/classes/interface.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict';

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _ansi = require('ansi');

var _ansi2 = _interopRequireDefault(_ansi);
Expand All @@ -14,28 +14,29 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var _process = process;
var stdout = _process.stdout;
var stdin = _process.stdin;
var _process = process,
stdout = _process.stdout,
stdin = _process.stdin;


var listeners = [];

var prefix = '\u001b';
var prefix = '\x1B';
var keys = {
right: prefix + '[C',
up: prefix + '[A',
left: prefix + '[D',
down: prefix + '[B',
exit: '\u0003',
exit: '\x03',
space: ' '
};

var Interface = (function () {
var Interface = function () {
function Interface() {
var _this = this;

var output = arguments.length <= 0 || arguments[0] === undefined ? stdout : arguments[0];
var input = arguments.length <= 1 || arguments[1] === undefined ? stdin : arguments[1];
var output = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : stdout;
var input = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : stdin;

_classCallCheck(this, Interface);

Expand All @@ -61,7 +62,7 @@ var Interface = (function () {
});

if (key === 'exit') {
_this.output.write('\u001b[2J\u001b[0;0H');
_this.output.write('\x1B[2J\x1B[0;0H');
process.exit();
}

Expand All @@ -78,7 +79,7 @@ var Interface = (function () {
_createClass(Interface, [{
key: 'clear',
value: function clear() {
this.output.write('\u001b[2J\u001b[0;0H');
this.output.write('\x1B[2J\x1B[0;0H');
}
}, {
key: 'write',
Expand Down Expand Up @@ -110,6 +111,7 @@ var Interface = (function () {

var y = from.y;


for (var x = from.x; x < to.x; x++) {
this.cursor.goto(x, y);
this.write('.');
Expand Down Expand Up @@ -145,6 +147,6 @@ var Interface = (function () {
}]);

return Interface;
})();
}();

exports.default = Interface;
22 changes: 11 additions & 11 deletions build/classes/tank.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
'use strict';

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Bullet = undefined;

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _unit = require('./unit');

var _unit2 = _interopRequireDefault(_unit);
Expand All @@ -21,13 +21,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"

var BULLET_SPEED = 10;

var Tank = (function (_Unit) {
var Tank = function (_Unit) {
_inherits(Tank, _Unit);

function Tank(ui) {
_classCallCheck(this, Tank);

var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Tank).call(this, ui));
var _this = _possibleConstructorReturn(this, (Tank.__proto__ || Object.getPrototypeOf(Tank)).call(this, ui));

_this._angle = 0;
_this.bullets = [];
Expand All @@ -51,8 +51,8 @@ var Tank = (function (_Unit) {
value: function draw() {
if (this.dead) return;

var x = this.x;
var y = this.y;
var x = this.x,
y = this.y;

if (this.color && this.color[0] === '#') {
this.output.cursor.hex(this.color);
Expand All @@ -64,7 +64,7 @@ var Tank = (function (_Unit) {
x = Math.round(x) + 2;
y = Math.round(y) - 2;

var cannon = undefined;
var cannon = void 0;
if (this.angle < 35) cannon = '_';else if (this.angle < 70) cannon = '/';else if (this.angle < 115) cannon = '|';else if (this.angle < 160) cannon = '\\';else cannon = '_';

this.output.cursor.goto(x + 2, y - 2);
Expand Down Expand Up @@ -104,17 +104,17 @@ var Tank = (function (_Unit) {
}]);

return Tank;
})(_unit2.default);
}(_unit2.default);

exports.default = Tank;

var Bullet = exports.Bullet = (function (_Unit2) {
var Bullet = exports.Bullet = function (_Unit2) {
_inherits(Bullet, _Unit2);

function Bullet(ui) {
_classCallCheck(this, Bullet);

var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(Bullet).call(this, ui));
var _this2 = _possibleConstructorReturn(this, (Bullet.__proto__ || Object.getPrototypeOf(Bullet)).call(this, ui));

_this2.velocity = [0, 0];

Expand Down Expand Up @@ -151,7 +151,7 @@ var Bullet = exports.Bullet = (function (_Unit2) {
}]);

return Bullet;
})(_unit2.default);
}(_unit2.default);

function _radian(deg) {
return deg * Math.PI / 180;
Expand Down
14 changes: 7 additions & 7 deletions build/classes/unit.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
'use strict';

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Unit = (function () {
var Unit = function () {
function Unit(output) {
_classCallCheck(this, Unit);

Expand All @@ -33,9 +33,9 @@ var Unit = (function () {
value: function draw() {
if (this.dead) return;

var x = this.x;
var y = this.y;
var shape = this.shape;
var x = this.x,
y = this.y,
shape = this.shape;

if (this.color && this.color[0] === '#') {
this.output.cursor.hex(this.color);
Expand Down Expand Up @@ -123,6 +123,6 @@ var Unit = (function () {
}]);

return Unit;
})();
}();

exports.default = Unit;
22 changes: 10 additions & 12 deletions build/snake.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })();
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

var _unit = require('./classes/unit');

Expand Down Expand Up @@ -60,7 +60,7 @@ function loop() {
gameover();
}

ui.cursor.goto(0, 0).yellow().write('Score: ' + score);
ui.cursor.goto(0, 0).yellow().write(i18n.__('Score') + ': ' + score);
ui.cursor.reset();

setTimeout(loop, FRAME);
Expand Down Expand Up @@ -107,7 +107,7 @@ function createPart() {
var part = new _unit2.default(ui);
var last = snake[snake.length - 1];

var direction = undefined;
var direction = void 0;
if (!last) {
direction = UP;
} else {
Expand All @@ -132,7 +132,7 @@ function createPart() {
};

part.speed = function () {
var multiplier = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];
var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
var direction = part.direction;

var x = direction == LEFT ? -1 : direction == RIGHT ? 1 : 0;
Expand All @@ -141,12 +141,10 @@ function createPart() {
return [x * multiplier, y * multiplier];
};

var _part$speed = part.speed();

var _part$speed2 = _slicedToArray(_part$speed, 2);

var dX = _part$speed2[0];
var dY = _part$speed2[1];
var _part$speed = part.speed(),
_part$speed2 = _slicedToArray(_part$speed, 2),
dX = _part$speed2[0],
dY = _part$speed2[1];

dX *= -1;
dY *= -1;
Expand All @@ -161,15 +159,15 @@ function createPart() {
}

function gameover() {
var MSG = 'Game Over!';
var MSG = i18n.__('Game Over');
ui.cursor.goto(ui.center.x - MSG.length / 2, ui.center.y);
ui.cursor.red();
ui.cursor.bold();
ui.write(MSG);

ui.cursor.reset();
ui.cursor.hex('#f65590');
var RETRY = 'Press any key to play again';
var RETRY = i18n.__('Press any key to play again');
ui.cursor.goto(ui.center.x - RETRY.length / 2, ui.center.y + 2);
ui.write(RETRY);

Expand Down
2 changes: 1 addition & 1 deletion build/spacecraft.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ setInterval(function () {
if (enemy.killed < 3) enemy.killed++;
});

ui.cursor.goto(0, 0).yellow().write('Score: ' + score);
ui.cursor.goto(0, 0).yellow().write(i18n.__('Score') + ': ' + score);
ui.cursor.reset();
}, FRAME);

Expand Down
15 changes: 7 additions & 8 deletions build/tanks.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function loop() {

if (one.dead || two.dead) {
var num = one.dead ? '2' : '1';
var msg = 'Player ' + num + ' won!';
var msg = i18n.__('Player %s won!', num);
ui.cursor.red();
ui.cursor.bold();

Expand Down Expand Up @@ -62,12 +62,12 @@ function loop() {

ui.cursor.goto(0, 1);
if (turn() === one) ui.cursor.hex('#54ffff');
ui.write('Player 1');
ui.write(i18n.__('Player') + ' 1');
ui.cursor.reset();
ui.cursor.goto(0, 2);
ui.write('Health: ' + one.health);
ui.write(i18n.__('Health') + ': ' + one.health);
ui.cursor.goto(0, 3);
ui.write('Angle: ' + parseInt(one.angle));
ui.write(i18n.__('Angle') + ': ' + parseInt(one.angle));

two.draw();
two.bullets.forEach(function (bullet, i) {
Expand All @@ -87,13 +87,12 @@ function loop() {

ui.cursor.goto(ui.output.columns - 10, 1);
if (turn() === two) ui.cursor.hex('#54ffff');
ui.write('Player 2');
ui.write(i18n.__('Player') + ' 2');
ui.cursor.reset();
ui.cursor.goto(ui.output.columns - 10, 2);
ui.write('Health: ' + two.health);
ui.write(i18n.__('Health') + ': ' + two.health);
ui.cursor.goto(ui.output.columns - 10, 3);
ui.write('Angle: ' + parseInt(two.angle));

ui.write(i18n.__('Angle') + ': ' + parseInt(two.angle));
setTimeout(loop, FRAME);
}

Expand Down
14 changes: 12 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
#!/usr/bin/env node

var game = process.argv[2];
i18n = require('i18n');
path = require('path');
language = process.argv[3]

i18n.configure({
directory: path.join(__dirname, '/locales')
});

i18n.setLocale(language || 'en');

game = process.argv[2];

if (!game) {
console.log('usage: node-games <game>');
console.log('');
console.log('Games');
console.log(i18n.__('Games'));
console.log('- spacecraft');
console.log('- snake');
console.log('- tanks');
Expand Down
10 changes: 10 additions & 0 deletions locales/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"Score": "Score",
"Game Over": "Game Over!",
"Press any key to play again": "Press any key to play again",
"Angle": "Angle",
"Health": "Health",
"Player": "Player",
"Games": "Games",
"Player %s won!": "Player %s won!"
}
10 changes: 10 additions & 0 deletions locales/es.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"Score": "Puntaje",
"Game Over": "Juego terminado!",
"Press any key to play again": "Pulsa cualquier tecla para volver a jugar",
"Angle": "Ángulo",
"Health": "Salud",
"Player": "Jugador",
"Games": "Juegos",
"Player %s won!": "El jugador %s ganó!"
}
Loading