Programmation en C
Principe de la théorie des tuiles
Cette théorie permet de programmer des cartes d'un terrain très facilement. La carte d'un terrain sera lu à partir d'un simple fichier texte de type ASCII. On décide qu'à chaque type de terrain correspond une lettre de l'alphabet. Par exemple la lettre 'a' correspond à une plaine, la lettre 'b' à de l'eau et la lettre 'c' à une montagne.
Il est ainsi extrêmement facile de créer de nouvelles cartes. Par exemple sous la forme suivante:
Fichier : map.txt
aabb
abcc
aaac
bcaa
Puis à chaque code ASCII d'une lettre, on assignera un fichier image spécifique à ce code (mais cela nous le verrons plus tard).
Lecture d'un fichier
Dans un premier temps nous allons voir comment lire un fichier texte lettre par lettre et comment afficher le code ASCII de la lettre correspondante.
Nous commençons à déclarer le prototype de cette fonction dans un fichier que nous nommerons map.h. Nous passons en argument de cette fonction le nom du fichier à charger (ici une chaîne de 20 caractères).
Fichier : map.hvoid display_map(char name_map[20]) ;
Puis dans un deuxième fichier map.c nous définissons le code de cette fonction.
Fichier : map.c#include <stdio.h> #include <string.h> #include "map.h" void display_map(char name_map[20]) { char tile; printf("Affichage de la carte\n"); FILE *file_map; file_map = fopen(name_map, "r"); while ( (tile=getc(file_map)) != EOF ) { printf("%c", tile); } file_map = fopen(name_map, "r"); while ( (tile=getc(file_map)) != EOF ) { if ( tile!='\n') { printf("%i ", tile); } else { printf("%i\n", tile); } } fclose(file_map); }
Enfin nous appelons notre fonction dans le main.
Fichier : main.c#include "map.h" int main() { display_map("map.txt"); return 0; }
Compilation séparée avec un Makefile
Comme nos sources sont réparties dans trois fichiers distincts, nous utilisons un Makefile pour pouvoir compiler notre programme.
Celui-ci va créer deux fichiers binaires (main.o et map.o) et va ensuite lier ces deux fichiers entre eux pour produire un unique binaire (tuile).
Fichier : Makefileall: tuile tuile: main.o map.o gcc -o tuile main.c map.c main.o: main.c map.c map.h gcc -c main.c map.o: map.c map.h gcc -c map.c
Pour exécuter le Makefile, on tape dans un terminal
make
un exécutable appelé tuile devrait-être crée. Pour l'exécuter on tape:
./tuile
Affichage du résultat
Affichage de la carte
aabb
abcc
aaac
bcaa
97 97 98 98 10
97 98 99 99 10
97 97 97 99 10
98 99 97 97 10
Dans les sessions suivantes, nous verrons comment on associe le code ASCII d'une lettre à une image en s'appuyant sur la bibliothèque SDL2.