본문 바로가기
-----ETC-----/C++ 게임 개발 시리즈

[C++ 게임 개발 시리즈] Day 4: 첫 번째 게임 프로젝트: 간단한 2D 게임 만들기 (1)

by cogito21_cpp 2024. 8. 1.
반응형

간단한 2D 게임 만들기

오늘부터 3일에 걸쳐 간단한 2D 게임을 만들어보겠습니다. 이 프로젝트를 통해 2D 게임 개발의 기본적인 흐름을 이해하고, 게임 루프, 그래픽, 입력 처리 등을 다룰 것입니다. 이 게임은 플레이어가 움직이는 사각형 캐릭터를 조작하여 적을 피하는 간단한 게임입니다.

프로젝트 준비

프로젝트 설정

  1. Visual Studio에서 프로젝트 생성:
    • Visual Studio를 열고, 새 C++ 빈 프로젝트를 생성합니다.
    • 프로젝트 이름을 Simple2DGame으로 지정합니다.
  2. SFML 설정:
    • SFML 라이브러리를 설치하고 프로젝트에 포함시킵니다. 이전 날 설정한 SFML 설치 및 설정을 참조하세요.
    • 프로젝트 속성에서 Additional Include Directories에 SFML의 include 디렉토리를 추가하고, Additional Library Directories에 SFML의 lib 디렉토리를 추가합니다.
    • Additional Dependenciessfml-graphics.lib, sfml-window.lib, sfml-system.lib을 추가합니다.

게임 루프와 기본 구조

게임 루프는 게임이 실행되는 동안 지속적으로 반복되는 코드 블록입니다. 게임 루프에서는 입력 처리, 게임 로직 업데이트, 그래픽 렌더링 등이 수행됩니다.

 

main.cpp 파일 작성

  1. 헤더 파일 포함:
  2. #include <SFML/Graphics.hpp> #include <SFML/Window.hpp> #include <SFML/System.hpp>
  3. 메인 함수와 게임 루프:
  4. int main() { // 창 생성 sf::RenderWindow window(sf::VideoMode(800, 600), "Simple 2D Game"); // 게임 루프 while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } // 게임 로직 업데이트 // 화면 지우기 window.clear(); // 그래픽 렌더링 // 화면에 그리기 window.display(); } return 0; }

플레이어 캐릭터 추가

플레이어 캐릭터는 사각형 모양으로 만들어 이동할 수 있도록 합니다.

  1. 플레이어 캐릭터 정의:
  2. // 메인 함수 내부에 추가 sf::RectangleShape player(sf::Vector2f(50.0f, 50.0f)); player.setFillColor(sf::Color::Green); player.setPosition(375.0f, 275.0f); // 창 중앙에 위치
  3. 플레이어 캐릭터 이동:
  4. // 메인 함수의 게임 루프 내에 추가 const float playerSpeed = 200.0f; sf::Vector2f movement(0.0f, 0.0f); if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { movement.y -= playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { movement.y += playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { movement.x -= playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { movement.x += playerSpeed * deltaTime; } player.move(movement);
  5. 그래픽 렌더링에 플레이어 캐릭터 추가:
  6. // 메인 함수의 게임 루프 내에 추가 window.draw(player);

 

완성된 main.cpp 파일

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>

int main() {
    // 창 생성
    sf::RenderWindow window(sf::VideoMode(800, 600), "Simple 2D Game");

    // 플레이어 캐릭터 생성
    sf::RectangleShape player(sf::Vector2f(50.0f, 50.0f));
    player.setFillColor(sf::Color::Green);
    player.setPosition(375.0f, 275.0f); // 창 중앙에 위치

    // 게임 루프
    sf::Clock clock;
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        // deltaTime 계산
        float deltaTime = clock.restart().asSeconds();

        // 플레이어 이동
        const float playerSpeed = 200.0f;
        sf::Vector2f movement(0.0f, 0.0f);

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {
            movement.y -= playerSpeed * deltaTime;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {
            movement.y += playerSpeed * deltaTime;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {
            movement.x -= playerSpeed * deltaTime;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {
            movement.x += playerSpeed * deltaTime;
        }

        player.move(movement);

        // 화면 지우기
        window.clear();

        // 그래픽 렌더링
        window.draw(player);

        // 화면에 그리기
        window.display();
    }

    return 0;
}

 

결론

첫 번째 게임 프로젝트의 첫 번째 단계를 완료했습니다. 게임 루프를 설정하고, 플레이어 캐릭터를 추가하여 움직일 수 있게 만들었습니다. 질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "Day 5: 첫 번째 게임 프로젝트: 간단한 2D 게임 만들기 (2)"에 대해 학습하겠습니다.

반응형