From 2bf90178e73a6efcb5011c90b437de7bcac425c2 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 13:12:33 +0100 Subject: [PATCH 1/6] added score additions and removal from game logic --- scripts/enemy.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/enemy.js b/scripts/enemy.js index 88283b1..1d44773 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -1,6 +1,7 @@ /* enemy spawning logic */ var aliens = []; var bombs = []; +var score = 0; /*Spawns Enemies*/ function spawnEnemy() { @@ -48,6 +49,8 @@ function fall() { setTimeout(() => {element.remove()}, 3000); bombs.splice(bombs.indexOf(element),1); console.log("Bomb Despawned"); + score += 1; + } } } @@ -59,6 +62,7 @@ function checkExplosion() { var elemRect = element.getBoundingClientRect(); var playerRect = document.getElementById("player").getBoundingClientRect(); if (elemRect.bottom >= playerRect.top && elemRect.right >= playerRect.left && elemRect.left <= playerRect.right && elemRect.top-40 <= playerRect.bottom) { + score -= 1; if (lives <= 1) { document.getElementById("player").className = "character dead"; endGame(); From a2b257596f1d9647342df10cfc23f3c2f11cedc4 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 13:12:46 +0100 Subject: [PATCH 2/6] added storage and retrieval for scores --- scripts/launch.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/scripts/launch.js b/scripts/launch.js index e69e55e..8b9b036 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -57,4 +57,35 @@ function endGame() { text.style.display = "block"; } +function setScore() { + let name = prompt("Input your initials (e.g. JFK)", "AAA"); + localStorage.setItem(name, score); +} + +function getScores() { + var values = []; + var keys = Object.keys(localStorage); + + for (let i of keys) { + values.push([localStorage.getItem(i), i]); + } + return values; +} + +function scoreBoard() { + var board = document.createElement("table"); + var scores = getScores(); + for (let i in scores) { + var row = document.createElement("tr"); + var col1 = document.createElement("td"); + var col2 = document.createElement("td"); + col1.innerHTML = scores[i][0]; + col2.innerHTML = scores[i][1]; + row.appendChild(col1); + row.appendChild(col2); + board.appendChild(row); + } + document.body.appendChild(board); +} + document.addEventListener("DOMContentLoaded", load); From 0a1176ea920c7a5ea1a7585cb422c7838305a072 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 13:32:40 +0100 Subject: [PATCH 3/6] formatted scoreboard --- scripts/launch.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/scripts/launch.js b/scripts/launch.js index 8b9b036..1ab41aa 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -19,6 +19,9 @@ function load() { /*Starts game functionality*/ function startGame() { + if (document.body.contains(document.getElementById("scoreBoard"))) { + document.getElementById("scoreBoard").remove(); + } document.getElementById("player").className = "character"; lives = 3; showDisplay("block"); @@ -55,6 +58,8 @@ function endGame() { showDisplay("none"); button.style.display = "block"; text.style.display = "block"; + setScore(); + scoreBoard(); } function setScore() { @@ -75,6 +80,7 @@ function getScores() { function scoreBoard() { var board = document.createElement("table"); var scores = getScores(); + scores.sort(twoDimensionalSort); for (let i in scores) { var row = document.createElement("tr"); var col1 = document.createElement("td"); @@ -85,7 +91,21 @@ function scoreBoard() { row.appendChild(col2); board.appendChild(row); } + board.id = "scoreBoard"; + board.style.marginTop = "250px"; + board.style.marginLeft = "auto"; + board.style.marginRight = "auto"; + board.style.display = "table"; document.body.appendChild(board); } +function twoDimensionalSort(a, b) { + if (a[0] === b[0]) { + return 0; + } + else { + return (a[0] > b[0]) ? -1 : 1; + } +} + document.addEventListener("DOMContentLoaded", load); From 808c914faa6c81b53272b5604d8c634c410fc8d8 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 13:32:59 +0100 Subject: [PATCH 4/6] added random spawn freq for bombs --- scripts/enemy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/enemy.js b/scripts/enemy.js index 1d44773..0aea72a 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -13,7 +13,7 @@ function spawnEnemy() { alien.style.left = Math.floor(Math.random() * document.body.offsetWidth) + "px"; if (document.elementFromPoint(alien.offsetLeft, alien.offsetTop).classList.contains("alien") == false) { document.body.appendChild(alien); - alienLogic = setInterval(spawnBomb, 3000); + alienLogic = setInterval(spawnBomb, Math.floor(Math.random() * 3000)); aliens.push([alien, alienLogic]); console.log("Alien Spawned") break; From 8c039a28884fe7c8c65e03d5732683d2f621af3f Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 13:52:28 +0100 Subject: [PATCH 5/6] fixed scoreboard ordering --- scripts/launch.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/scripts/launch.js b/scripts/launch.js index 1ab41aa..3085281 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -100,12 +100,7 @@ function scoreBoard() { } function twoDimensionalSort(a, b) { - if (a[0] === b[0]) { - return 0; - } - else { - return (a[0] > b[0]) ? -1 : 1; - } + return b[0] - a[0]; } document.addEventListener("DOMContentLoaded", load); From 11bcf9c438a2c8abed3b8c8a3aa8c032eeee9776 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Sun, 29 May 2022 14:07:12 +0100 Subject: [PATCH 6/6] added 45 degree firing to aliens --- scripts/enemy.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/scripts/enemy.js b/scripts/enemy.js index 0aea72a..ef9c9de 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -13,7 +13,7 @@ function spawnEnemy() { alien.style.left = Math.floor(Math.random() * document.body.offsetWidth) + "px"; if (document.elementFromPoint(alien.offsetLeft, alien.offsetTop).classList.contains("alien") == false) { document.body.appendChild(alien); - alienLogic = setInterval(spawnBomb, Math.floor(Math.random() * 3000)); + alienLogic = setInterval(spawnBomb, Math.floor(Math.random() * 3000-1000) + 1000); aliens.push([alien, alienLogic]); console.log("Alien Spawned") break; @@ -30,6 +30,12 @@ function spawnBomb() { bomb.style.top = "70px"; bomb.style.zIndex = "1"; bomb.style.display = "absolute"; + if (Math.floor(Math.random() * 4) < 2) { + bomb.style.transform = "rotate(45deg)"; + } + else if (Math.floor(Math.random() * 4) > 2) { + bomb.style.transform = "rotate(135deg)"; + } alien[0].appendChild(bomb); bombs.push(bomb); console.log("Bomb Spawned") @@ -38,6 +44,14 @@ function spawnBomb() { /*Makes a random bomb fall a set amount and explodes if colliding with the floor*/ function fall() { for (let element of bombs) { + if (element.style.transform === "rotate(45deg)") { + element.style.top = (element.offsetTop + 10) + "px"; + element.style.left = (element.offsetLeft + 10) + "px"; + } + else if (element.style.transform === "rotate(135deg)") { + element.style.top = (element.offsetTop + 10) + "px"; + element.style.left = (element.offsetLeft - 10) + "px"; + } element.style.top = (element.offsetTop + 10) + "px"; var elemRect = element.getBoundingClientRect(); var bodyRect = document.body.getBoundingClientRect();