From 4c744b826907f58d98b5162fa5cc85786f361452 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 29 Apr 2022 11:11:54 +0100 Subject: [PATCH 1/5] added sprite deletion at end game, deth animation --- scripts/agent.js | 1 - scripts/control.js | 37 ++++++++++++++++++++----------------- scripts/enemy.js | 3 ++- scripts/launch.js | 26 +++++++++++++++++++++++--- scripts/player.js | 1 - scripts/projectile.js | 2 -- 6 files changed, 45 insertions(+), 25 deletions(-) delete mode 100644 scripts/agent.js delete mode 100644 scripts/player.js delete mode 100644 scripts/projectile.js diff --git a/scripts/agent.js b/scripts/agent.js deleted file mode 100644 index 1c73809..0000000 --- a/scripts/agent.js +++ /dev/null @@ -1 +0,0 @@ -/* logic for enemy movement and firing */ \ No newline at end of file diff --git a/scripts/control.js b/scripts/control.js index dfdaf67..15e52c3 100644 --- a/scripts/control.js +++ b/scripts/control.js @@ -94,23 +94,26 @@ function stop(event) { else if (event.keyCode == lastKey) { lastKey = 0; } - switch(event.keyCode) { - case 38: /*Up*/ - case 87: /*W*/ - player.className = "character stand up"; - break; - case 40: /*Down*/ - case 83: /*S*/ - player.className = "character stand down"; - break; - case 37: /*Left*/ - case 65: /*A*/ - player.className = "character stand left"; - break; - case 39: /*Right*/ - case 68: /*D*/ - player.className = "character stand right"; - break; + if (!player.classList.contains("dead")) { + switch(event.keyCode) { + case 38: /*Up*/ + case 87: /*W*/ + player.className = "character stand up"; + break; + case 40: /*Down*/ + case 83: /*S*/ + player.className = "character stand down"; + break; + case 37: /*Left*/ + case 65: /*A*/ + player.className = "character stand left"; + break; + case 39: /*Right*/ + case 68: /*D*/ + player.className = "character stand right"; + break; + + } } } \ No newline at end of file diff --git a/scripts/enemy.js b/scripts/enemy.js index 599f758..3beb76f 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -61,7 +61,8 @@ 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 <= playerRect.bottom) { - document.getElementById("player").style.display = "none"; + document.getElementById("player").className = "character dead"; + endGame(); } } } \ No newline at end of file diff --git a/scripts/launch.js b/scripts/launch.js index 5908283..3369e07 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -1,4 +1,5 @@ /*Add events to webpage*/ +var intervals = [] function showDisplay(mode) { for (let element of document.body.getElementsByTagName("*")) { @@ -10,7 +11,7 @@ function showDisplay(mode) { function load() { document.addEventListener("keydown", getKey) document.addEventListener("keyup", stop) - setInterval(move, 10); + intervals.push(setInterval(move, 10)); document.getElementById("start").addEventListener("click", startGame) showDisplay("none"); @@ -22,8 +23,27 @@ function startGame() { showDisplay("block"); document.getElementById("start").style.display = "none"; document.getElementsByClassName("weapon")[0].style.display = "none"; - setInterval(spawnEnemy, 2500); - setInterval(checkExplosion, 10); + intervals.push(setInterval(spawnEnemy, 2500)); + intervals.push(setInterval(checkExplosion, 10)); +} + +function endGame() { + for (let item of intervals) { + clearInterval(item); + } + + for (let item of document.getElementsByClassName("bomb")) { + item.remove(); + } + + for (let item of document.getElementsByClassName("explosions")) { + item.remove(); + } + + for (let alien of aliens) { + clearInterval(alien[1]); + alien[0].remove(); + } } document.addEventListener("DOMContentLoaded", load); diff --git a/scripts/player.js b/scripts/player.js deleted file mode 100644 index 47eeaa5..0000000 --- a/scripts/player.js +++ /dev/null @@ -1 +0,0 @@ -/*Logic for player lives and firing ability */ \ No newline at end of file diff --git a/scripts/projectile.js b/scripts/projectile.js deleted file mode 100644 index 4a0d746..0000000 --- a/scripts/projectile.js +++ /dev/null @@ -1,2 +0,0 @@ -/* logic for bombs */ - From 729056c2007008f1742228295fe62b34d2ce9dd8 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 29 Apr 2022 11:44:48 +0100 Subject: [PATCH 2/5] random height to bombs, adjusted death trigger --- scripts/enemy.js | 20 ++++++++------------ scripts/launch.js | 3 ++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/scripts/enemy.js b/scripts/enemy.js index 3beb76f..8759e1c 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -30,28 +30,24 @@ function spawnBomb() { bomb.style.zIndex = "1"; bomb.style.display = "absolute"; alien[0].appendChild(bomb); - bombLogic = setInterval(fall, 100); - bombs.push([bomb, bombLogic]); + bombs.push(bomb); console.log("Bomb Spawned") } /*Makes a random bomb fall a set amount and explodes if colliding with the floor*/ function fall() { - var bomb = bombs[Math.floor(Math.random() * bombs.length)]; - bomb[0].style.top = (bomb[0].offsetTop + 10) + "px"; - for (let element of bombs) { - var closestElement = document.elementFromPoint(element[0].offsetLeft, element[0].offsetTop+10); + element.style.top = (element.offsetTop + 10) + "px"; + var closestElement = document.elementFromPoint(element.offsetLeft, element.offsetTop+10); if (!closestElement.classList.contains("sky") && !closestElement.classList.contains("alien") && !closestElement.classList.contains("bomb") && !closestElement.classList.contains("explosion")) { - if(Math.floor(Math.random() * 2) == 1) { - clearInterval(element[1]); - element[0].className = "explosion"; + if(Math.floor(Math.random() * 100) < 10 || element.bottom >= document.body.bottom) { + element.className = "explosion"; console.log("Explosion") - setTimeout(() => {element[0].remove()}, 3000); + setTimeout(() => {element.remove()}, 3000); bombs.splice(bombs.indexOf(element),1); console.log("Bomb Despawned"); } - } + } } } @@ -60,7 +56,7 @@ function checkExplosion() { for (let element of document.getElementsByClassName("explosion")) { 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 <= playerRect.bottom) { + if (elemRect.bottom >= playerRect.top && elemRect.right >= playerRect.left && elemRect.left <= playerRect.right && elemRect.top-40 <= playerRect.bottom) { document.getElementById("player").className = "character dead"; endGame(); } diff --git a/scripts/launch.js b/scripts/launch.js index 3369e07..98ce956 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -24,7 +24,8 @@ function startGame() { document.getElementById("start").style.display = "none"; document.getElementsByClassName("weapon")[0].style.display = "none"; intervals.push(setInterval(spawnEnemy, 2500)); - intervals.push(setInterval(checkExplosion, 10)); + setTimeout(intervals.push(setInterval(fall, 50)), 2500); + intervals.push(setInterval(checkExplosion, 1)); } function endGame() { From f3e613810be63bf01187013c00cb3ce43098c5b7 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:10:37 +0100 Subject: [PATCH 3/5] added restart functionality --- game.html | 2 +- scripts/enemy.js | 2 +- scripts/launch.js | 11 ++++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/game.html b/game.html index 78bafb6..0512622 100644 --- a/game.html +++ b/game.html @@ -19,7 +19,7 @@
- Start + Click to Play
diff --git a/scripts/enemy.js b/scripts/enemy.js index 8759e1c..78bc4f5 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -40,7 +40,7 @@ function fall() { element.style.top = (element.offsetTop + 10) + "px"; var closestElement = document.elementFromPoint(element.offsetLeft, element.offsetTop+10); if (!closestElement.classList.contains("sky") && !closestElement.classList.contains("alien") && !closestElement.classList.contains("bomb") && !closestElement.classList.contains("explosion")) { - if(Math.floor(Math.random() * 100) < 10 || element.bottom >= document.body.bottom) { + if(Math.floor(Math.random() * 100) < 10 || element.bottom >= document.body.bottom || closestElement.classList.contains("character")) { element.className = "explosion"; console.log("Explosion") setTimeout(() => {element.remove()}, 3000); diff --git a/scripts/launch.js b/scripts/launch.js index 98ce956..b7d64c0 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -11,7 +11,6 @@ function showDisplay(mode) { function load() { document.addEventListener("keydown", getKey) document.addEventListener("keyup", stop) - intervals.push(setInterval(move, 10)); document.getElementById("start").addEventListener("click", startGame) showDisplay("none"); @@ -20,9 +19,11 @@ function load() { /*Starts game functionality*/ function startGame() { + document.getElementById("player").className = "character"; showDisplay("block"); document.getElementById("start").style.display = "none"; document.getElementsByClassName("weapon")[0].style.display = "none"; + intervals.push(setInterval(move, 10)); intervals.push(setInterval(spawnEnemy, 2500)); setTimeout(intervals.push(setInterval(fall, 50)), 2500); intervals.push(setInterval(checkExplosion, 1)); @@ -45,6 +46,14 @@ function endGame() { clearInterval(alien[1]); alien[0].remove(); } + + var button = document.getElementById("start"); + var text = document.createElement("p"); + text.innerHTML = "GAME OVER"; + button.appendChild(text); + showDisplay("none"); + button.style.display = "block"; + text.style.display = "block"; } document.addEventListener("DOMContentLoaded", load); From dcd194e9f43c71329cd9f9277994a39c637d30c1 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:20:27 +0100 Subject: [PATCH 4/5] added lives functionality --- scripts/control.js | 5 +++-- scripts/enemy.js | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/control.js b/scripts/control.js index 15e52c3..d4db50f 100644 --- a/scripts/control.js +++ b/scripts/control.js @@ -1,6 +1,7 @@ /* player movement logic */ -currentKey = 0; -lastKey = 0; +var currentKey = 0; +var lastKey = 0; +var lives = 3; function setVars() { let player = document.getElementById("player"); diff --git a/scripts/enemy.js b/scripts/enemy.js index 78bc4f5..11a7094 100644 --- a/scripts/enemy.js +++ b/scripts/enemy.js @@ -57,8 +57,15 @@ 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) { - document.getElementById("player").className = "character dead"; - endGame(); + if (lives <= 1) { + document.getElementById("player").className = "character dead"; + endGame(); + } + else { + element.remove(); + document.getElementsByTagName("li")[lives-1].style.display = "none"; + lives -= 1; + } } } } \ No newline at end of file From a6546dfb9e519843c21bccb017852a4bc2c058bf Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:29:54 +0100 Subject: [PATCH 5/5] fixed bug --- scripts/launch.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/launch.js b/scripts/launch.js index b7d64c0..e69e55e 100644 --- a/scripts/launch.js +++ b/scripts/launch.js @@ -20,6 +20,7 @@ function load() { /*Starts game functionality*/ function startGame() { document.getElementById("player").className = "character"; + lives = 3; showDisplay("block"); document.getElementById("start").style.display = "none"; document.getElementsByClassName("weapon")[0].style.display = "none";