From 64dae6aa8c8c446b7e25cf1c7b9c8cd8802b5cc1 Mon Sep 17 00:00:00 2001 From: Stanley Date: Sun, 7 Dec 2025 23:56:51 +0700 Subject: [PATCH] Stanley's update --- Script.js | 108 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 85 insertions(+), 23 deletions(-) diff --git a/Script.js b/Script.js index 3ada49b..0b7569e 100644 --- a/Script.js +++ b/Script.js @@ -4,6 +4,12 @@ var canvasWidth = 1280; var canvasHeight = 650; var c = undefined; var ctx = undefined; +var gameStarted = false; +var musicMuted = false; +/// 90 FPS (Cause I got motion sickness while playing our game fr) +let lastFrameTime = 0; +const frameInterval = 1000 / 30; // 90 FPS limit +// 90 FPS mark (change the const x/x to what fps you want) var game = { level: 1, @@ -33,14 +39,30 @@ bg1.src = "img/bg_1.png"; var bg2 = new Image(); bg2.src = "img/bg_2.png"; -var enemyImgArray = []; -enemyImgArray.length = 7; var enemy1 = new Image(); enemy1.src = "img/alien_0.png"; + +var enemyImgArray = []; +enemyImgArray.length = 4; + +//Stanley + +for (var i = 0; i < enemyImgArray.length; i++) { + enemyImgArray[i] = new Image(); + enemyImgArray[i].src = 'img/alien_' + [i] + '.png'; +} + + + + var missilesArray = []; + + +var enemyShipArray = []; + var backgroundMusic = document.createElement("audio"); backgroundMusic.src = "music/Muriel-BobbyRichards.mp3"; @@ -91,14 +113,21 @@ function init() { }; } -function gameLoop() { - if (!gameStarted) return; +//Aku ganti function game loop that follows the 90FPS Cap rule +function gameLoop(timestamp) { + if (!gameStarted) return; - clearGame(); - updateGame(); - drawGame(); - requestAnimationFrame(gameLoop); + if (timestamp - lastFrameTime >= frameInterval) { + lastFrameTime = timestamp; + + clearGame(); + updateGame(); + drawGame(); + } + + requestAnimationFrame(gameLoop); } +// End of 90fps mark function keyDownPressed(e) { if (e.keyCode == 87) { @@ -154,6 +183,8 @@ function clearGame() { function updateGame() { addStarField(); + addShips(); + player1.update(); spawnPlanet(); if (currentPlanet) currentPlanet.update(); @@ -161,21 +192,38 @@ function updateGame() { } function drawGame() { - if (currentPlanet) currentPlanet.draw(); // planet sekarang di background + if (currentPlanet) currentPlanet.draw(); - player1.draw(); - enemy.draw(); - enemy.update(); + player1.draw(); - for (var i = 0; i < missilesArray.length; i++) { - var m = missilesArray[i]; - m.draw(); - m.update(); - } + // Enemy ships + for (var i = 0; i < enemyShipArray.length; i++) { + var s = enemyShipArray[i]; + s.draw(); + s.update(); + + if (s.x < -200) { + enemyShipArray.splice(i, 1); + i--; + } + } + + // Missiles + for (var i = 0; i < missilesArray.length; i++) { + var m = missilesArray[i]; + m.draw(); + m.update(); + + if (m.x > canvasWidth) { + missilesArray.splice(i, 1); + i--; + } + } + + drawNewText("Score: " + player1.score, 30, 610, "white"); + drawNewText("Player Lives: " + player1.lives, 1100, 610, "white"); +} - drawNewText("Score: " + player1.score, 30, 610, "white"); - drawNewText("Player Lives: " + player1.lives, 1100, 610, "white"); -} function gameLoop(timestamp) { @@ -319,12 +367,13 @@ class LaserBullet { class EnemyObj { - constructor(x, y, speed) { + constructor(x, y, speed, img) { this.x = x; this.y = y; this.width = 170; this.height = 105; - this.image = enemy1; + //gambar + this.image = img; this.speed = speed; this.health = 100; this.damage = 10; @@ -340,7 +389,7 @@ class EnemyObj { } } -let enemy = new EnemyObj(800, 200, 12); +let enemy = new EnemyObj(800, 200, 12, enemyImgArray[0]); class Planet { constructor(img) { @@ -374,3 +423,16 @@ function spawnPlanet() { currentPlanet = new Planet(randomImg); } } + +function addShips() { + if (game.frames > 200) { + + if (game.frames % 150 == 0) { + var randomY = Math.floor(Math.random() * 500) + 20; + var randomSpeed = Math.floor(Math.random() * 10) + 1; + var randomShip = Math.floor(Math.random() * enemyImgArray.length); + enemyShipArray.push(new EnemyObj(1300, randomY, randomSpeed, enemyImgArray[randomShip])); + } + + } +}