2. Game Class

文章目录

Game Class

根据上面那个简单框架结构, 将代码包装到一个Game类里

// Game.h
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED

#include <SDL.h>

class Game
{
public:
    bool init(const char* title,
              int xpos = SDL_WINDOWPOS_CENTERED,
              int ypos = SDL_WINDOWPOS_CENTERED,
              int width = 640, int height = 480,
              int flags = SDL_WINDOW_SHOWN);
    void render();
    void update();
    void handleEvents();
    void clean();

    bool running() { return m_bRunning; }

private:
    SDL_Window* m_pWindow;
    SDL_Renderer* m_pRenderer;

    bool m_bRunning;
};

#endif // GAME_H_INCLUDED
// Game.cpp
#include "Game.h"
#include <iostream>

bool Game::init(const char* title, int xpos, int ypos, int width, int height, int flags)
{
    bool success = true;
    if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
        std::cout << "SDL init success\n";
        m_pWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
        if (m_pWindow) {
            std::cout << "window creation success\n";
            m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
            if (m_pRenderer) {
                std::cout << "render creation success\n";
                SDL_SetRenderDrawColor(m_pRenderer, 255, 255, 255, 255);
            }
            else {
                std::cout << "render creation fail\n";
                success = false;
            }
        }
        else {
            std::cout << "window creation fail\n";
            success = false;
        }
    }
    else {
        std::cout << "SDL init fail\n";
        success = false;
    }

    std::cout << "init success\n";
    m_bRunning = true;

    return success;
}

void Game::render()
{
    SDL_RenderClear(m_pRenderer);

    SDL_RenderPresent(m_pRenderer);
}

void Game::update()
{

}

void Game::clean()
{
    std::cout << "cleaning game\n";
    SDL_DestroyRenderer(m_pRenderer);
    m_pRenderer = nullptr;
    SDL_DestroyWindow(m_pWindow);
    m_pWindow = nullptr;

    SDL_Quit();
}

void Game::handleEvents()
{
    SDL_Event event;

    if (SDL_PollEvent(&event)) {
        switch (event.type) {
        case SDL_QUIT:
            m_bRunning = false;
            break;

        default:
            break;
        }
    }
}
// main.cpp
#include "Game.h"

using namespace std;

Game* g_game = NULL;

int main(int argc, char* argv[])
{
    g_game = new Game();

    g_game->init("WM brother");

    while (g_game->running()) {
        g_game->handleEvents();
        g_game->update();
        g_game->render();
    }

    g_game->clean();

    return 0;
}

将文件放入对应位置, 编译运行就可.

猜你喜欢

转载自blog.csdn.net/creambean/article/details/88572266
2.
今日推荐