본문 바로가기
Coding/JavaScript

[JavaScript] 자바스크립트로 초간단 미사일 피하기 게임 만들기 !!

by 포스트it 2023. 3. 11.
728x90
반응형

 

[JavaScript] 자바스크립트로 초간단 미사일 피하기 게임 만들기 !!

아주 심플한 마우스로 미사일 피하기 게임 코드 입니다 ! 한번 만들어 보세요 ㅎ

예제코드
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>미사일 피하기 게임</title>
    <style>
      canvas {
        border: 1px solid black;
      }
    </style>
  </head>
  <body>
    <canvas id="gameCanvas" width="800" height="600"></canvas>
    <script src="game.js"></script>
  </body>
</html>
<script>
  // 캔버스 요소 가져오기
const canvas = document.getElementById('gameCanvas');
const context = canvas.getContext('2d');

// 게임 상태 변수
let gameOver = false;
let score = 0;
let time = 0;
let player = {
  x: canvas.width / 2,
  y: canvas.height - 50,
  radius: 20
};
let missiles = [];

// 키 이벤트 핸들러 등록
document.addEventListener('keydown', function(event) {
  if (event.code === 'Escape') {
    gameOver = true;
  }
});

// 마우스 이벤트 핸들러 등록
canvas.addEventListener('mousemove', function(event) {
  if (!gameOver) {
    player.x = event.clientX - canvas.offsetLeft;
  }
});

// 게임 루프 함수
function gameLoop() {
  // 게임 종료 시 게임 루프 중지
  if (gameOver) {
    return;
  }

  // 게임 상태 업데이트
  time++;
  if (time % 50 === 0) {
    missiles.push({
      x: Math.random() * canvas.width,
      y: 0,
      radius: 10,
      speed: 5 + time / 500
    });
  }
  for (let i = 0; i < missiles.length; i++) {
    missiles[i].y += missiles[i].speed;
    if (missiles[i].y > canvas.height) {
      missiles.splice(i, 1);
      i--;
    } else {
      let distance = Math.sqrt(Math.pow(player.x - missiles[i].x, 2) + Math.pow(player.y - missiles[i].y, 2));
      // 충돌 검사
      if (distance < player.radius + missiles[i].radius) {
        gameOver = true;
      }
    }
  }
  score++;

  // 게임 화면 그리기
  context.clearRect(0, 0, canvas.width, canvas.height);
  context.beginPath();
  context.arc(player.x, player.y, player.radius, 0, 2 * Math.PI);
  context.fillStyle = 'blue';
  context.fill();
  for (let i = 0; i < missiles.length; i++) {
    context.beginPath();
    context.arc(missiles[i].x, missiles[i].y, missiles[i].radius, 0, 2 * Math.PI);
    context.fillStyle = 'red';
    context.fill();
  }
  context.fillStyle = 'black';
  context.font = '24px Arial';
  context.fillText('Score: ' + score, 10, 30);

  // 다음 프레임 실행
  requestAnimationFrame(gameLoop);
}

// 게임 루프 시작
requestAnimationFrame(gameLoop);

</script>

결과값

 

728x90
반응형

댓글