사용자 도구

사이트 도구


flappy_bird_만들기
flappy bird 만들기

문서의 이전 판입니다!


기본 템플릿을 통해 플래피 버드를 만들기로 하자.

아래 템프릿을 다운받아서 VS CODE를 열자

템플릿 파일

중력에 의해 내려오는 새 만들기

1. 개념

새가 내려오게 할 것이다. 중력 가속도에 따라 내려오게 할 것이다.

매 프레임마다 속도는 중력에 따라 변화할 것이므로, 가속도를 먼저 설정해주고 매프레임마다 가속도를 더하게 하면 될 것이다.

2. bird.h

다음과 같이 기본 선언을 하였다. 내려오는 속도는 매 프레임마다 가속도를 더해주는 것이므로 맨 처음에는 0이다.

그리고 새의 위치는 raylib에서 기본으로 제공해주는 vector2를 이용하였다.

bird.h
#include "raylib.h"
 
#define GRAVITY 0.2f;  // 중력 값 : 가속도의 값이다.  한 프레임당 가속도이다. 
 
class Bird {
    public: 
 
    void Init();
    void Update();
    void Jump();
    void Draw();
 
    private:
    Vector2 pos; 
    float downSpeed = 0;
    float jumpSpeed = 40; 
    float halfLength = 20; 
 
    void CheckCollision();
};

2. bird.cpp

다음과 같이 기본 각 선언된 함수를 정의하였다. 여기까지는 코드만 보고도 이해하는데 어려움이 업을 것이다.

bird.cpp
#include "bird.h"
 
void Bird::Init()
{
    pos = {40, float(GetScreenHeight()) / 2} ;
}
 
void Bird::Update()
{
    downSpeed += GRAVITY;
    pos.y += downSpeed;
 
    CheckCollision();
}
 
void Bird::CheckCollision()
{
    if (pos.y - halfLength <= 0) pos.y = halfLength; 
 
    if (pos.y + halfLength >= GetScreenHeight()) pos.y = GetScreenHeight() - halfLength;
}
 
void Bird::Jump()
{
    downSpeed = 0; 
    pos.y -= jumpSpeed;
}
 
void Bird::Draw()
{
    DrawRectangle(pos.x - halfLength, pos.y - halfLength, halfLength * 2, halfLength * 2, DARKGREEN);
}

3. game.cpp

이제 이것을 game.cpp에 각 구현을 하자. 다음 코드만으로 충분히 이해가 갈 것이다.

다만 Game클래스가 선언되고 나서 전체 스크린의 값을 알 수 있으므로, Game클래스가 생성되고 나서 bird.Init()를 호출해야 한다는 것을 확인하자.

game.cpp
#include "game.h"
#include "bird.h"
 
Bird bird;
 
Game::Game(int width, int height, std::string title) 
{
    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    InitWindow(width, height, title.c_str()); 
 
    bird.Init();
}
 
Game::~Game()
{
    CloseWindow();                  // Close window and OpenGL context
} 
 
bool Game::GameShouldClose() const
{
    return WindowShouldClose();
}
 
void Game::Tick()
{
    BeginDrawing();
    Update();
    Draw();
    EndDrawing();
}
 
void Game::Update()
{
    // Update
    //----------------------------------------------------------------------------------
    // TODO: Update your variables here
    //---------------------------------------------------------------------------------- 
    bird.Update();
 
    if (IsKeyPressed(KEY_UP)) bird.Jump(); 
}
 
void Game::Draw()
{ 
    // Draw
    //----------------------------------------------------------------------------------
 
        ClearBackground(BLACK);
        bird.Draw();
 
    //----------------------------------------------------------------------------------
}

기존과 달리, IsKeyDown()함수가 아니라 IsKeyPressed()함수를 이용하였다. IsKeyDown()함수는 키가 눌려지고 있는 상태면 계속 점프 함수를 호출하므로 게임이 너무 쉬워진다. 따라서 키를 누른 상태에서는 점프가 한번만 되게 바꿨다.

로그인하면 댓글을 남길 수 있습니다.

flappy_bird_만들기.1696273339.txt.gz · 마지막으로 수정됨: 2023/10/03 04:02 (바깥 편집)