node-console-games/build/spacecraft.js

112 lines
2.2 KiB
JavaScript
Raw Normal View History

2015-12-11 17:49:42 +00:00
'use strict';
2015-12-11 14:17:45 +00:00
2015-12-11 17:49:42 +00:00
var _unit = require('./classes/unit');
2015-12-11 14:17:45 +00:00
2015-12-11 17:49:42 +00:00
var _unit2 = _interopRequireDefault(_unit);
2015-12-11 14:17:45 +00:00
2015-12-11 17:49:42 +00:00
var _interface = require('./classes/interface');
var _interface2 = _interopRequireDefault(_interface);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var FRAME = 20;
var ENEMY_SPAWN_RATE = 400;
var ui = new _interface2.default();
var player = new _unit2.default(ui);
2015-12-11 14:17:45 +00:00
player.go(1, ui.output.rows / 2);
player.shape = '=>';
player.color = '#77d6ff';
player.bold = true;
2015-12-11 17:49:42 +00:00
var explosion = new _unit2.default(ui);
2015-12-11 14:17:45 +00:00
explosion.dead = true;
2015-12-11 17:49:42 +00:00
var missles = [];
var enemies = [];
var score = 0;
setInterval(function () {
2015-12-11 14:17:45 +00:00
ui.clear();
player.draw();
2015-12-11 17:49:42 +00:00
missles.forEach(function (missle, i) {
2015-12-11 14:17:45 +00:00
missle.move(1, 0);
missle.draw();
2015-12-11 17:49:42 +00:00
var enemy = missle.collides(enemies);
2015-12-11 14:17:45 +00:00
if (enemy) {
enemy.killed = 1;
enemy.color = 'red';
enemy.shape = '*';
missle.dead = true;
score++;
}
if (missle.dead) {
missles.splice(i, 1);
}
});
2015-12-11 17:49:42 +00:00
enemies.forEach(function (enemy, i) {
2015-12-11 14:17:45 +00:00
// move with speed
enemy.move();
enemy.draw();
if (enemy.dead) {
enemies.splice(i, 1);
}
if (enemy.killed == 3) enemy.dead = true;
if (enemy.killed < 3) enemy.killed++;
2015-12-11 17:49:42 +00:00
});
2015-12-11 14:17:45 +00:00
2015-12-11 17:49:42 +00:00
ui.cursor.goto(0, 0).yellow().write('Score: ' + score);
2015-12-11 14:17:45 +00:00
ui.cursor.reset();
}, FRAME);
2015-12-11 17:49:42 +00:00
ui.onKey('right', function () {
2015-12-11 14:17:45 +00:00
player.move(1, 0);
});
2015-12-11 17:49:42 +00:00
ui.onKey('down', function () {
2015-12-11 14:17:45 +00:00
player.move(0, 1);
});
2015-12-11 17:49:42 +00:00
ui.onKey('up', function () {
2015-12-11 14:17:45 +00:00
player.move(0, -1);
});
2015-12-11 17:49:42 +00:00
ui.onKey('left', function () {
2015-12-11 14:17:45 +00:00
player.move(-1, 0);
});
2015-12-11 17:49:42 +00:00
ui.onKey('space', function () {
var missle = new _unit2.default(ui);
2015-12-11 14:17:45 +00:00
missle.go(player.x, player.y);
missle.shape = '+';
missle.dieOnExit = true;
missles.push(missle);
});
2015-12-11 17:49:42 +00:00
setInterval(function () {
2015-12-11 14:17:45 +00:00
if (enemies.length > 5) return;
2015-12-11 17:49:42 +00:00
var enemy = new _unit2.default(ui);
2015-12-11 14:17:45 +00:00
enemy.go(Math.random() * ui.output.columns, 0);
enemy.shape = 'o';
enemy.color = '#f7c71e';
enemy.dieOnExit = true;
2015-12-11 17:49:42 +00:00
enemy.speed = function () {
2015-12-11 14:17:45 +00:00
return [Math.random() > 0.9 ? 0.4 : 0, 0.06];
2015-12-11 17:49:42 +00:00
};
2015-12-11 14:17:45 +00:00
enemies.push(enemy);
}, 1000);
2015-12-11 17:49:42 +00:00
process.on('exit', function () {
ui.cursor.horizontalAbsolute(0).eraseLine();
2015-12-11 14:17:45 +00:00
ui.cursor.show();
});