<html>
<head>
<title>JavaScript</title>
<style>
.plane {
position: absolute;
top: 100px;
left: 50px;
width: 80px;
height: 40px;
background-image: url(plane.png);
background-size: cover;
}
.hide {
display: none;
}
.gameMessage {
position: absolute;
top: 10%;
left: 20%;
width: 60%;
text-align: center;
background-color: aliceblue;
font-size: 2em;
}
.score {
background-color: black;
height: 70px;
text-align: center;
color: white;
font-size: 1.5em;
font-family: fantasy;
}
.base {
position: absolute;
bottom: 0px;
width: 50px;
height: 100px;
color: white;
background-color: black;
text-align: center;
font-size: 1em;
}
.bomb {
position: absolute;
left: 0px;
top: 0px;
width: 35px;
height: 35px;
border-radius: 50%;
color: white;
background-color: black;
text-align: center;
font-size: 1.5em;
}
</style>
</head>
<body> <span class="gameMessage">Press here to Start Game</span>
<div class="score">0</div>
<div class="game">
<div class="gameArea"></div>
</div>
<script>
const score = document.querySelector(".score");
const gameArea = document.querySelector(".gameArea");
const gameMessage = document.querySelector(".gameMessage");
document.addEventListener("keydown", pressOn);
document.addEventListener("keyup", pressOff);
document.addEventListener("click", start);
let player = {
score: 0
, speed: 2
, inplay: false
};
let keys = {
space: false
}
function start() {
gameMessage.classList.add("hide");
if (!player.inplay) {
gameArea.innerHTML = "";
player.level = 10;
makeEnemy();
player.inplay = true;
player.score = 2000;
player.totalBombs = 6;
player.ready = true;
player.activeBomb = 0;
player.bombScore = 0;
player.plane = document.createElement("div");
player.plane.setAttribute("class", "plane");
gameArea.appendChild(player.plane);
window.requestAnimationFrame(playGame);
player.x = player.plane.offsetLeft;
player.y = player.plane.offsetTop;
}
}
function endGame() {
player.inplay = false;
gameMessage.classList.remove("hide");
}
function makeEnemy() {
player.level--;
if (player.level < 0) {
endGame();
}
else {
player.base = document.createElement("div");
player.base.setAttribute("class", "base");
player.base.style.width = Math.floor(Math.random() * 200) + 10 + "px";
player.base.style.height = Math.floor(Math.random() * 100) + 100 + "px";
player.base.style.left = Math.floor(Math.random() * (gameArea.offsetWidth - 200)) + 100 + "px";
gameArea.appendChild(player.base);
}
}
function makeBomb() {
if (player.ready && (player.activeBomb < player.totalBombs)) {
player.score -= 300;
player.bombScore++;
player.activeBomb++;
let bomb = document.createElement("div");
bomb.classList.add("bomb");
bomb.innerHTML = player.bombScore;
bomb.y = player.y;
bomb.x = player.x;
bomb.style.left = bomb.x + "px";
bomb.style.top = bomb.y + "px";
gameArea.appendChild(bomb);
player.ready = false;
setTimeout(function () {
player.ready = true;
}, 500);
}
}
function moveBomb() {
let bombs = document.querySelectorAll(".bomb");
bombs.forEach(function (item) {
item.y += 5;
item.style.top = item.y + "px";
if (item.y > 1000) {
player.activeBomb--;
item.parentElement.removeChild(item);
}
if (isCollide(item, player.base)) {
player.score += 2000;
player.activeBomb--;
player.base.parentElement.removeChild(player.base);
item.parentElement.removeChild(item);
makeEnemy();
}
})
}
function isCollide(a, b) {
let aRect = a.getBoundingClientRect();
let bRect = b.getBoundingClientRect();
return !(
(aRect.bottom < bRect.top) || (aRect.top > bRect.bottom) || (aRect.right < bRect.left) || (aRect.left > bRect.right))
}
function playGame() {
if (player.inplay) {
moveBomb();
if (keys.space) {
makeBomb();
}
if (keys.ArrowUp && player.y > 80) {
player.y -= player.speed;
}
if (keys.ArrowDown && player.y < 200) {
player.y += player.speed;
}
if (keys.ArrowLeft && player.x > 0) {
player.x -= player.speed;
}
if (keys.ArrowRight && player.x < (gameArea.offsetWidth - 50)) {
player.x += player.speed;
}
player.x += (player.speed * 2);
if (player.x > gameArea.offsetWidth) {
player.x = 0;
player.score -= 100;
}
player.score--;
if (player.score < 0) {
player.score = 0;
}
player.plane.style.left = player.x + "px";
player.plane.style.top = player.y + "px";
window.requestAnimationFrame(playGame);
score.innerHTML = "Score: " + player.score;
}
}
function pressOn(e) {
e.preventDefault();
let tempKey = (e.key == " ") ? "space" : e.key;
keys[tempKey] = true;
}
function pressOff(e) {
e.preventDefault();
let tempKey = (e.key == " ") ? "space" : e.key;
keys[tempKey] = false;
}
</script>
</body>
</html>