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;
}
}
}

