본문 바로가기
JavaScript

[JavaScript] 비행기 슈팅 게임 만들기 - (1) 비행기 그리기

by teamnova 2024. 9. 15.
728x90

안녕하세요.

자바스크립트로 간단한 비행기 슈팅 게임을 만들어보겠습니다.

오늘은 먼저 다음 영상처럼 화면에 비행기를 그리고 키보드 입력에 따라 좌우로 움직이도록 해보겠습니다.

 

 

 

index.html

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- 브라우저에서 문서가 UTF-8로 인코딩되도록 설정 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 모바일 기기에서도 웹페이지가 올바르게 표시되도록 설정 -->
    <title>비행기 슈팅 게임</title>
    <!-- 웹페이지의 제목을 설정 -->
    <link rel="stylesheet" href="style.css">
    <!-- 외부 스타일 시트(CSS) 파일 연결 -->
</head>
<body>
    <!-- 캔버스 태그는 게임 화면을 표시할 공간입니다 -->
    <canvas id="gameCanvas"></canvas>
    <!-- 자바스크립트 파일을 연결 -->
    <script src="script.js"></script>
</body>
</html>

 

style.css
/* 전체 화면의 기본 설정 */
body {
    margin: 0; /* 여백 제거 */
    display: flex; /* 화면을 중앙으로 정렬하기 위한 flexbox 사용 */
    justify-content: center; /* 수평 중앙 정렬 */
    align-items: center; /* 수직 중앙 정렬 */
    height: 100vh; /* 화면 전체 높이 설정 */
    background-color: #000; /* 배경색을 검정색으로 설정 */
}

/* 캔버스 스타일 */
canvas {
    background-color: #111; /* 캔버스 배경색을 어두운 회색으로 설정 */
    border: 2px solid #fff; /* 캔버스 테두리를 흰색으로 설정 */
}

 

script.js
// 1. 캔버스와 2D 렌더링 컨텍스트 가져오기
const canvas = document.getElementById('gameCanvas'); // HTML에서 캔버스를 가져옵니다.
const ctx = canvas.getContext('2d'); // 캔버스에서 2D 그리기 기능을 사용할 수 있게 합니다.

// 2. 캔버스 크기 설정
canvas.width = 400; // 캔버스의 너비를 400px로 설정
canvas.height = 600; // 캔버스의 높이를 600px로 설정

// 3. 비행기 객체 설정
const plane = {
    x: canvas.width / 2 - 20, // 비행기의 초기 x 위치를 캔버스 중앙에 설정
    y: canvas.height - 60, // 비행기의 초기 y 위치를 캔버스 하단에 설정
    width: 40, // 비행기의 너비
    height: 40, // 비행기의 높이
    speed: 5, // 비행기의 이동 속도
    moveLeft: false, // 왼쪽으로 이동 중인지 여부
    moveRight: false, // 오른쪽으로 이동 중인지 여부
};

// 4. 비행기 그리기 함수
function drawPlane() {
    ctx.fillStyle = 'white'; // 비행기의 색상을 흰색으로 설정
    ctx.fillRect(plane.x, plane.y, plane.width, plane.height); // 비행기를 직사각형으로 그립니다.
}

// 5. 비행기 위치 업데이트 함수
function update() {
    if (plane.moveLeft && plane.x > 0) { // 왼쪽으로 이동 중이고 캔버스를 벗어나지 않았을 때
        plane.x -= plane.speed; // 왼쪽으로 이동
    }
    if (plane.moveRight && plane.x + plane.width < canvas.width) { // 오른쪽으로 이동 중이고 캔버스를 벗어나지 않았을 때
        plane.x += plane.speed; // 오른쪽으로 이동
    }
}

// 6. 키보드 입력 처리: 키를 눌렀을 때
window.addEventListener('keydown', function(e) {
    if (e.code === 'ArrowLeft') { // 왼쪽 화살표 키가 눌렸을 때
        plane.moveLeft = true; // 왼쪽 이동을 시작
    }
    if (e.code === 'ArrowRight') { // 오른쪽 화살표 키가 눌렸을 때
        plane.moveRight = true; // 오른쪽 이동을 시작
    }
});

// 7. 키보드 입력 처리: 키를 뗐을 때
window.addEventListener('keyup', function(e) {
    if (e.code === 'ArrowLeft') { // 왼쪽 화살표 키를 뗐을 때
        plane.moveLeft = false; // 왼쪽 이동을 멈춤
    }
    if (e.code === 'ArrowRight') { // 오른쪽 화살표 키를 뗐을 때
        plane.moveRight = false; // 오른쪽 이동을 멈춤
    }
});

// 8. 게임 루프 함수: 게임의 각 프레임을 업데이트하고 렌더링하는 함수
function gameLoop() {
    ctx.clearRect(0, 0, canvas.width, canvas.height); // 캔버스 전체를 지워서 이전 프레임의 그림을 지움
    drawPlane(); // 비행기를 캔버스에 그립니다.
    update(); // 비행기의 위치를 업데이트합니다.
    requestAnimationFrame(gameLoop); // 다음 프레임에서 gameLoop 함수를 다시 호출
}

gameLoop(); // 게임 시작

 

 

이렇게 게임 화면을 생성하고, 키보드 입력에 따라 비행기를 움직여보았습니다.

다음 시간에는 화면에 적을 만들고, 총알을 발사할 수 있도록 구현해보겠습니다.