<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ランダムに降るオブジェクト</title> <style> body { margin: 0; overflow: hidden; font-family: 'Arial', sans-serif; } #key-object { position: absolute; width: 100px; height: 100px; top: 90%; left: 50%; transform: translateX(-50%); } #score { position: absolute; top: 5px; left: 5px; font-size: 16px; color: #fff; display: none; /* 最初は非表示 */ } /* 落ちてくるオブジェクトのスタイル */ .falling-object { position: absolute; width: 50px; height: 50px; } /* グリーンのオブジェクトのスタイル */ .green { background-color: transparent; /* 透明な背景色 */ content: url('rapi.png'); /* グリーンのオブジェクトの画像パスを指定 */ } /* オレンジのオブジェクトのスタイル */ .orange { background-color: transparent; /* 透明な背景色 */ content: url('Ruby.png'); /* オレンジのオブジェクトの画像パスを指定 */ } </style> </head> <body> <img id="key-object" src="toruhito.png"> <h1>物取り</h1> <h3><div id="score">スコア: <span id="score-value">0</span></div></h3> <script> const keyObject = document.getElementById("key-object"); const scoreValue = document.getElementById("score-value"); const scoreContainer = document.getElementById("score"); let keyObjectPositionX = window.innerWidth / 2; let score = 0; const moveSpeed = 40; function moveKeyObject() { keyObject.style.left = keyObjectPositionX + "px"; requestAnimationFrame(moveKeyObject); } document.addEventListener("keydown", (event) => { if (event.code === "ArrowLeft" && keyObjectPositionX > 0) { keyObjectPositionX -= moveSpeed; } else if (event.code === "ArrowRight" && keyObjectPositionX < window.innerWidth - keyObject.clientWidth) { keyObjectPositionX += moveSpeed; } }); moveKeyObject(); function createFallingObject() { const fallingObject = document.createElement("div"); fallingObject.className = "falling-object"; // ランダムにグリーンまたはオレンジのオブジェクトを選択 fallingObject.classList.add(Math.random() < 0.5 ? "green" : "orange"); fallingObject.style.left = Math.random() * (window.innerWidth - 50) + "px"; fallingObject.style.top = -50 + "px"; document.body.appendChild(fallingObject); function moveFallingObject() { const speed = 2; const positionY = parseFloat(fallingObject.style.top) + speed; fallingObject.style.top = positionY + "px"; if (isColliding(fallingObject, keyObject)) { score++; scoreValue.textContent = score; scoreContainer.style.display = "block"; fallingObject.remove(); } if (positionY >= window.innerHeight) { fallingObject.remove(); } else { requestAnimationFrame(moveFallingObject); } } moveFallingObject(); } function isColliding(obj1, obj2) { const rect1 = obj1.getBoundingClientRect(); const rect2 = obj2.getBoundingClientRect(); return ( rect1.top < rect2.bottom && rect1.bottom > rect2.top && rect1.left < rect2.right && rect1.right > rect2.left ); } setInterval(createFallingObject, 2000); </script> </body> </html>