SDL en C bajo GNU/Linux 001 – Hola mundo

Antes de comenzar a hablar de SDL es bueno tener claros unos pocos conceptos.
 

Digamos que la finalidad de esta serie de articulos es saber como montar el tinglado para poder programar en C algo que podamos ver en ventana grafica y mostrar algunos graficos y escuchar sonidos. Podriamos decir que para llegar a eso antes es bueno saber como compilar algo usando gcc y como crear un makefile.
  
El cometido de esta primera entrada es para ver que vamos a ir necesitando y hacer un hola mundo de ejemplo y un makefile.
 
Instalar un compilador: gcc
  
En debian se puede instalar así:
  

# apt-get install gcc

  

Necesitaremos también un editor de textos. Nano, vim, emacs, joe, … da igual cual quieras usar. Pero necesitarás uno. También se puede usar un editor como geany pero para mayor compatibilidad (si por ejemplo intentas seguir los pasos de este tutorial en una maquina sin entorno gráfico o en una sesión ssh en una maquina remota) yo recomiendo usar uno de los mencionados (el que más te guste).
  
Lo primero es escribir un programa en c llamado hola.c con el siguiente contenido:
  

/*
        Hola mundo
        Un programa de ejemplo
*/

#include 

int main(int argn,char **argv)
{
        printf("Hola mundo!\n");
        return 0;
}

  

Si no se ve bien prueba aquí leñes: https://pastebin.com/raw/imkg08Yp
  
Si lo analizamos estamos usando la función main y hemos incluido la biblioteca standard de entrada y salida stdio.h (nos permitirá usar funciones para imprimir texto en pantalla, abrir archivos, escribir en archivos, …).
  
Algunas de las funciones que nos permitirá usar incluir stdio.h son: printf(), scanf(), getc(), gets(), getchar(), puts(), putchar(), clearerr(), f open(), f close(), getw(), putw(), f getc(), putc(), f putc(), f gets(), f puts(), f eof(), f getchar, f getc(), f printf(), f scanf(), f getchar, f putchar, f seek(), f tell(), rewind(), putc(), sprint(), sscanf(), remove(), fflush(), …
  
Simplemente para nuestro hola mundo hemos necesitado usar la función printf() para mostrar un texto en pantalla.
  
Compilar el programa con gcc:
 
Una forma normal de compilar algo como lo que tenemos es:
  

$ gcc hola.c -o hola

  
Si deseamos mostrar avisos de error (todo el mundo comete errores) podemo compilar así:
  

$ gcc -Wall hola.c -o hola

  
Con -o estamos indicando el parametro de salida e indicando que el binario generado será hola.
  
Para ejecutar hola:
  

$ ./hola

  
Nos mostrará un “hola mundo en pantalla”.
  

  

Creando un makefile:
  
Antes de nada instalaremos make. Por ejemplo así en debian:
  

$ apt-get install make

  
Make es una herramienta de gestión de dependencias, típicamente, las que existen entre los archivos que componen el código fuente de un programa.
  
Crearemos en el mismo directorio en el que hemos creado hola.c un archivo llamado: makefile
  
Un contenido de ejemplo es este:
  

CC := gcc
CFLAGS := -Wall

test:
        make clean
        make build

build:
        $(CC) $(CFLAGS) hola.c -o hola

run:
        ./hola

clean:
        -rm hola

  
Una vez guardado vamos a ejecutar make en el directorio en el que se encuentra makefile.
  

$ make clean
$ make build
$ make run

  
Si lo ejecutamos así lo primero que intentará es borrar el archivo binario (clean) hola si es que existe. Lo segundo será construir el binario (build) y lo tercero será ejecutarlo (run)
 
Si nos fijamos hemos metido una zona llamada test. Esa será la que make leerá en el caso de que lo ejecutemos sin parámetros.
 
Con esto es suficiente para entender que será importante crear un makefile para los futuros proyectos que vamos a ir haciendo en este tutorial. Por el momento creo que esto es lo más importante a tener en cuenta y lo más básico.
  
Ya tenemos nuestro primer programa que simplemente muestra por pantalla un texto pero … que es fácilmente compilable con solo ejecutar make. Se podría añadir una sección install: en el que instalemos en /bin/ el binario hola (lo copiamos) pero no importa ahora mismo ya que esto es una tontería de programa.
  
En futuras entradas empezaremos ya a meternos en materia con SDL y veremos que se pueden hacer muchas cosas interesantes desde C puro con SDL.

Saludos cordiales.

5 comentarios

MD 4 mayo, 2017 Contestar

No quiero que me pegues, pero mi critica es:

salvo para gente que le guste abrir el capo del coche para ver el motor y las distintas piezas sucias, SDL ya no es necesario para hacer videojuegos en GNU/Linux incluso lo contra-recomiendo…y eso que yo era un fan (me hice un solitario hace puff años y años https://github.com/mdtrooper/solosolitaire y un tetris que a ver si lo retomo para que compile y ejecute y si eso lo subo).

Hay alternativas que no te hacen meterte tan a bajo nivel y tener que levantar toda la catedral tu solo o por medio de librerías, como http://pygame.org/ o https://godotengine.org/ .

Pero bueno te admiro, y estoy disfrutando con los artículos…además que yo me quede en las libSDL1.x y las 2.x todavía no las domino.

mierda 4 mayo, 2017 Contestar

pues las capturas de pantalla de tu solitario molan :).

puppet 9 mayo, 2017 Contestar

MD estoy con fanta, no se a lo mejor es que somos mu raros, pero no me hago con el editores de juegos gui y eso que lo he intentando con varios incluso con blender GE, y aunque es cierto que SDL no es necesario para hacer juegos hoy en dia si creo que es importante conocer como funciona, porque por ejemplo las pygame estan basadas en SDL, y si algun dia necesitas usar algo muy especifico que no se encuentra en las librerias, podras crearte la tuya propia con SDL. Tambien recuerdo que estaba muy bien allegro.cc que incorporaba todo lo basico, colisiones,controles,eventos,marcadores,etc.. pero anda bastante desactualizada.

Por cierto mola el solitario 😉
Un saludo

mierda 4 mayo, 2017 Contestar

Si. Yo usé las libSDL1.x también. Incluso en AmigaOS.4 que las portaron.

Godotengine a mi me cuesta hacerme con ello ya que me cuesta que todo esté realizado supongo. Tienen hasta un kit para crear aventuras graficas en el que supuestamente poca cosa tienes que programar y si darle mucho a clic aquí y allás. Es potente, lo he visto funcionando y en la brecha hemos tenido alguna sesión sobre godotengine. Pero me cuesta más entenderlo que con SDL que simplemente programas y usas funciones de la libreria (librerias).

Lo cierto es que estaba compilando https://urho3d.github.io/ (un motor inspirado en ogre3d y horde3d) y recordé que con SDL se podían hacer muchas cosas, no solamente juegos. De modo que para entretenerse está bien y … bueno, tampoco es bajar a bajo nivel. Son funciones que te hacen todo como por arte de magia casi :).

caca 29 junio, 2018 Contestar

Tiempos después…

Menos mal que hay sitios web como mierda.tv con gente que publica códigos de C, SDL y otras cosas del GNU, para los que nos gusta aprender a hacer y no solo usar lo que otros ya han masticado con las limitaciones que eso conlleva.

Deja un comentario