summaryrefslogtreecommitdiff
path: root/centipede/js/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'centipede/js/main.js')
-rw-r--r--centipede/js/main.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/centipede/js/main.js b/centipede/js/main.js
new file mode 100644
index 0000000..f4c954d
--- /dev/null
+++ b/centipede/js/main.js
@@ -0,0 +1,75 @@
+let handleInput;
+const initialize = () => {
+ game.level = 1;
+ game.score = 0;
+ game.totalTime = 0;
+
+ game.keyboard = game.input.Keyboard();
+ handleInput = game.keyboard.update;
+
+ game.lastTimeStamp = performance.now();
+
+ game.player = game.Player({x: game.width/2 - 20, y: game.height-40, width: 40, height: 40, sprite: game.sprites.ship});
+
+ game.resetObjects();
+};
+
+const update = (elapsedTime) => {
+ game.totalTime += elapsedTime;
+
+ game.mushrooms.map((mushroom) => game.getMushroomCollidableObjects().filter((object) => object.intersects(mushroom))).map((objects, i) => {
+ objects.map((object => object.onMushroomCollision ? object.onMushroomCollision(game.mushrooms[i]) : null));
+ });
+ game.bullets.map((bullet) => game.getBulletCollidableObjects().filter((object) => object.intersects(bullet))).map((objects, i) => {
+ objects.map((object) => object.onBulletCollision ? object.onBulletCollision(game.bullets[i]) : null)
+ })
+ game.getPlayerCollidableObjects().map((object) => object.intersects(game.player) ? object.onPlayerCollision(game.player) : null);
+
+ game.bullets = game.bullets.filter((bullet) => bullet.alive);
+ game.spiders = game.spiders.filter((spider) => spider.alive);
+ game.explosions = game.explosions.filter((explosion) => explosion.alive);
+ game.mushrooms = game.mushrooms.filter((mushroom) => mushroom.state > 0);
+ game.scorpions = game.scorpions.filter((scorpion) => scorpion.x >= 0 && scorpion.x <= game.width - scorpion.width && scorpion.alive);
+ game.fleas = game.fleas.filter((flea) => flea.y < game.height - flea.height && flea.alive);
+ game.getObjects().map((object) => object.update(elapsedTime));
+
+ if (Math.random() < 0.002 * game.level && game.spiders.length < game.level) {
+ game.spiders.push(game.Spider({x: game.width/2, y: 0, width: 80, height: 40, rot: 0, dx: -0.2, dy: 0, sprite: game.sprites.spider}));
+ }
+ if (Math.random() < 0.001 * game.level && game.fleas.length < game.level) {
+ game.fleas.push(game.Flea({x: Math.floor(Math.random() * game.width / game.mushroomDims.width) * game.mushroomDims.width, y: 0, width: 40, height: 40, rot: 0, dx: 0, dy: 0.2, sprite: game.sprites.flea}));
+ }
+ if (Math.random() < 0.001 * game.level && game.scorpions.length < game.level) {
+ game.scorpions.push(game.Scorpion({y: Math.floor(Math.random() * game.height / game.mushroomDims.height) * game.mushroomDims.height, x: 0, width: 80, height: 40, rot: 0, dx: 0.2, dy: 0, sprite: game.sprites.scorpion}));
+ }
+
+ if (!game.centipede.alive()) {
+ game.resetObjects();
+ game.level++;
+ game.score += game.level*400;
+ }
+};
+
+const render = (elapsedTime) => {
+ game.graphics.clear();
+ game.getObjects().map((object) => object.draw(elapsedTime));
+
+ document.getElementById("hud").innerHTML = `Level: ${game.level} Lives: ${game.player.lives} Score: ${game.score} ${game.player.poisoned ? "<span style='color:green'>POISONED<span>" : ""}`;
+};
+
+const gameLoop = (time) => {
+ const elapsedTime = time - game.lastTimeStamp;
+ game.lastTimeStamp = time;
+
+ handleInput(elapsedTime);
+ update(elapsedTime);
+ render(elapsedTime);
+
+ if (!game.stopped) {
+ requestAnimationFrame(gameLoop);
+ }
+};
+
+initialize();
+menu.reRegisterKeys();
+requestAnimationFrame(gameLoop); \ No newline at end of file