Zs / script.js
Reaperxxxx's picture
Update script.js
4cc8092 verified
Raw
History Blame Contribute Delete
1.95 kB
const squares = [
{ id: "yellow-square", dx: 2, dy: 2 },
{ id: "blue-square", dx: -2, dy: 2 },
{ id: "red-square", dx: 2, dy: -2 },
{ id: "green-square", dx: -2, dy: -2 },
];
const gameArea = document.getElementById("game-area");
const finishLine = document.getElementById("finish-line");
const playButton = document.getElementById("play-button");
const obstacles = document.querySelectorAll(".obstacle");
let interval;
playButton.addEventListener("click", startGame);
function startGame() {
playButton.disabled = true;
interval = setInterval(updateGame, 20);
}
function updateGame() {
squares.forEach((square) => {
const element = document.getElementById(square.id);
const rect = element.getBoundingClientRect();
const gameRect = gameArea.getBoundingClientRect();
// Move square
let newX = rect.x + square.dx;
let newY = rect.y + square.dy;
// Check for collision with walls
if (newX <= gameRect.left || newX + rect.width >= gameRect.right) {
square.dx *= -1;
}
if (newY <= gameRect.top || newY + rect.height >= gameRect.bottom) {
square.dy *= -1;
}
// Check for collision with obstacles
obstacles.forEach((obstacle) => {
const obstacleRect = obstacle.getBoundingClientRect();
if (isColliding(rect, obstacleRect)) {
square.dx *= -1;
square.dy *= -1;
}
});
// Check for reaching finish line
const finishRect = finishLine.getBoundingClientRect();
if (isColliding(rect, finishRect)) {
alert(`${square.id.replace("-square", "").toUpperCase()} WINS!`);
clearInterval(interval);
}
// Apply new position
element.style.left = `${newX - gameRect.left}px`;
element.style.top = `${newY - gameRect.top}px`;
});
}
function isColliding(rect1, rect2) {
return !(
rect1.right < rect2.left ||
rect1.left > rect2.right ||
rect1.bottom < rect2.top ||
rect1.top > rect2.bottom
);
}