En un intento de seguir los pasos de un pdf, he terminado haciendo un breve código como iniciación al SDL, librería gráfica que usaré para el juego que estoy programando.
Hay código redundante y se podría mejorar, pero lo he dejado así ya que me parece mejor a la hora de entenderlo y ver cómo funciona. Como único detalle, la ruta de la fuente es la mía personal, hay que cambiarla para que funcione. En general, la fuente se dejaría junto al código fuente, pero paso de hacerlo tan estricto.
Comienzos gráficos SDL: Pulsa para ver/ocultar el código
/* * File: main.cpp * Author: dorian * * Created on 25 de agosto de 2013, 11:20 */ #include <iostream> #include <SDL/SDL.h> #include <SDL/SDL_ttf.h> using namespace std; void waitKey(); /* * */ int main() { //creamos un lienzo donde pintar SDL_Surface *screen; //inicializamos el "video" (la pantalla). -1 indica error if (SDL_Init(SDL_INIT_VIDEO) < 0) { cout << "No se ha podido iniciar SDL: %s\n" << SDL_GetError(); exit(1); } else { //cuando el programa se cierre, ejecuta la función SDL_Quit //que libera la inicialización atexit(SDL_Quit); } //mismo procedimiento para el módulo de la escritura if (TTF_Init() < 0) { cout << "No se puedo inicializar SDL_ttf\n"; exit(1); } else { atexit(TTF_Quit); } //establezco pantalla de 640x480 a 32 bits de profundidad y que use la //memoria de vídeo y una estrategia de doble buffer para repintado screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE| SDL_DOUBLEBUF); if (screen == NULL) { cout << "No se ha podido establecer el modo de vídeo: %s\n" << SDL_GetError(); exit(1); } //titulo para la ventana SDL_WM_SetCaption("¡¡Hola Mundos del Videojuego!!", NULL); //abro una fuente del sistema TTF_Font *fuente=TTF_OpenFont( "/usr/share/fonts/TTF/VeraMono.ttf", 22 ); if(fuente == NULL){ cout << "error!!!!"; } //creo un color SDL_Color blanco; blanco.r=255; blanco.g=255; blanco.b=255; SDL_Color negro={0,0,0}; //creo una imagen para el texto SDL_Surface *texto; //escribo el texto con la fuente pasada, el texto, el color del texto y el del fondo texto = TTF_RenderText_Shaded(fuente, "^^ Bienvenido a los mundos del videojuego ^^", blanco, negro); //texto //establezco unas coordenadas donde empezar a escribir SDL_Rect coordenadas; coordenadas.x=10; coordenadas.y=100; //copio la imagen del texto a la principal SDL_BlitSurface(texto, NULL, screen, &coordenadas); //actualiza la imagen SDL_Flip (screen); waitKey(); texto = TTF_RenderText_Shaded(fuente, "Preparados... listos...", blanco, negro); //texto //establezco unas coordenadas donde empezar a escribir coordenadas; coordenadas.x=50; coordenadas.y=200; //copio la imagen del texto a la principal SDL_BlitSurface(texto, NULL, screen, &coordenadas); //actualiza la imagen SDL_Flip (screen); waitKey(); //limpio la pantalla SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0,0,0)); texto = TTF_RenderText_Shaded(fuente, "Que gane el mejor!", blanco, negro); //texto SDL_BlitSurface(texto, NULL, screen, &coordenadas); SDL_Flip(screen); waitKey(); return 0; } void waitKey(){ //creo un evento SDL_Event event; int done=0; //mientras no haya pulsado tecla... while (done == 0) { //espero por un evento while (SDL_PollEvent(&event)) { //si es una pulsación de tecla... if (event.type == SDL_KEYDOWN) done = 1; } } }