import Unit from './classes/unit'; import Interface from './classes/interface'; const FRAME = 20; const ENEMY_SPAWN_RATE = 400; let ui = new Interface(); let player = new Unit(ui); player.go(1, ui.output.rows / 2); player.shape = '=>'; player.color = '#77d6ff'; player.bold = true; let explosion = new Unit(ui); explosion.dead = true; let missles = []; let enemies = []; let score = 0; setInterval(() => { ui.clear(); player.draw(); missles.forEach((missle, i) => { missle.move(1, 0); missle.draw(); let enemy = missle.collides(enemies) if (enemy) { enemy.killed = 1; enemy.color = 'red'; enemy.shape = '*'; missle.dead = true; score++; } if (missle.dead) { missles.splice(i, 1); } }); enemies.forEach((enemy, i) => { // 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++; }) ui.cursor.goto(0, 0).yellow().write(`Score: ${score}`); ui.cursor.reset(); }, FRAME); ui.onKey('right', () => { player.move(1, 0); }); ui.onKey('down', () => { player.move(0, 1); }); ui.onKey('up', () => { player.move(0, -1); }); ui.onKey('left', () => { player.move(-1, 0); }); ui.onKey('space', () => { let missle = new Unit(ui); missle.go(player.x, player.y); missle.shape = '+'; missle.dieOnExit = true; missles.push(missle); }); setInterval(() => { if (enemies.length > 5) return; let enemy = new Unit(ui); enemy.go(Math.random() * ui.output.columns, 0); enemy.shape = 'o'; enemy.color = '#f7c71e'; enemy.dieOnExit = true; enemy.speed = () => { return [Math.random() > 0.9 ? 0.4 : 0, 0.06]; } enemies.push(enemy); }, 1000); process.on('exit', function() { ui.cursor.horizontalAbsolute(0).eraseLine() ui.cursor.show(); });