/ SDL

Crear un juego – Parte V (Clase Games)

El día de ayer estaba creando un mini juego para los tutoriales que estoy haciendo, pero después de terminar me di cuenta era algo complejo meter todo en un solo archivo, es decir, que en el archivo main.cpp y sobre todo meter todo en la función main, era muy laborioso y sobre todo muy confuso, incluso yo me confundí varias veces, así que mejor opte por separar todo y crear clases en C++.

La primera clase en crear seria la base de todo y lo llamamos Games. Tengo la costumbre de separar la cabecera en una carpeta llamada header y el código en si meterla en una carpeta llamada source, no es necesario, pero para buenas practicas deben separar todo.

La cabecera quedaría así.

ifndef ANATOMIA_GAMES_H #define ANATOMIA_GAMES_H #include <SDL2/SDL.h> class Games{ public: void Start(); void Initiation(); void GamesLoop(); void Ending(); void pollinput(); void update(); void draw(); private: int screen_width = 480, screen_height = 360; bool quit; SDL_Window *window; SDL_Renderer *render; SDL_Event event; }; #endif //ANATOMIA_GAMES_H

Y ahora el código.

include #include <SDL2/SDL_image.h> #include "../header/Games.h" void Games::Start(){ this->Initiation(); this->GamesLoop(); this->Ending(); } void Games::Initiation(){ this->quit = false; SDL_Init(SDL_INIT_EVERYTHING); IMG_Init(IMG_INIT_PNG); SDL_CreateWindowAndRenderer(this->screen_width, this->screen_height, 0, &this->window, &this->render); SDL_SetWindowTitle(this->window, "SDL - Curso de video juego"); this->event = SDL_Event(); } void Games::GamesLoop(){ while(!this->quit){ this->pollinput(); this->update(); this->draw(); } } void Games::Ending(){ SDL_DestroyRenderer(this->render); SDL_DestroyWindow(this->window); IMG_Quit(); SDL_Quit(); } void Games::pollinput(){ if(SDL_PollEvent(&this->event) != 0){ if(this->event.type == SDL_KEYDOWN){ if(event.key.keysym.scancode == SDL_SCANCODE_ESCAPE){ this->quit = true; } }else if(this->event.type == SDL_KEYUP){ } } } void Games::update(){ } void Games::draw(){ SDL_RenderClear(this->render); SDL_RenderPresent(this->render); }

Verán que en la clase Games conservo la anatomía del juego para que no se pierdan y sobre todo porque si empiezan a leer otros códigos para estudiarlos verán que cada autor es diferente para armar la estructura de su juego, pero al final verán que es el mismo patrón de la anatomía del videojuego.

En el archivo main.cpp solo tenemos lo siguiente.

include <SDL2/SDL.h> #include "header/Games.h" int main(int argc, char *argv[]){ SDL_SetHint(SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING, "1"); Games juego; juego.Start(); return 0; }

Una cosa que debo explicar es que si ven tanto el código anterior como este nuevo, verán que al principio declaro SDL_SetHint(SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING, “1”);, esto es debido que al momento de hacer un debug el Clion utiliza el GDB y como SDL utiliza un manager de Thread es incompatible y marcara error incluso tronara el programa, así con esto le estoy indicando a SDL que desactive el nombramiento de Thread y así ya podemos debugear.

Bueno los siguientes tutoriales será Events, Sprite y Animaciones, el primero será de uno solo, el segundo y tercero serán de varios ya que es un tema algo largo.

ilich

Programador Mexicano con 14 años de experiencia, ha incursionado en diferentes áreas ampliando su experiencia. Aprendí programación por que quería hacer mi propio video juego aun que he toca

Read More