# introduction à TZR TZR est un moteur de jeu minimaliste écrit en C99 avec support de C23, conçu pour être une abstration simple et puissante à des concepts avancés de la SDL. ## création de projet Clonez ce dépot sur votre station de travail, puis lancez `make` pour créer les fichiers `TZR.c` et `TZR.h` que vous utiliserez dans votre projet. ```sh $ git clone https://kdx.re/cgit/tzr ~/tzr && cd ~/tzr $ make $ mkdir ~/tzr_project $ cp TZR.c TZR.h ~/tzr_project $ cd ~/tzr_project ``` Créons maintenant un `main.c` appelant `TZR_Init` et `TZR_Quit`. ```c /* main.c */ #include "TZR.h" int main(int argc, char **argv) { (void)argc, (void)argv; if (TZR_Init(.width=256, .height=256, .title="intro") < 0) return 1; TZR_Quit(); return 0; } ``` Ce `if` englobant `TZR_Init` est nécessaire pour gérer toute erreur éventuelle. Nous pouvons maintenant compiler et lancer ce projet. ```sh $ gcc -o game main.c TZR.c -lSDL2 -lSDL2_mixer ``` L'exécutable `game` devrait apparaitre. ## boucle principale Le code précédent compile et s'exécute correctement, mais rien de visuel n'arrive car nous ne gardons pas la fenêtre ouverte. Pour cela, nous utilisons `TZR_ShouldQuit` comme condition de sortie et `TZR_CycleEvents` pour récupérer tous les événements en fond. Nous avons aussi besoin de dessiner dans la fenêtre pour qu'elle apparaisse. Tous les appels graphiques dans TZR doivent se faire entre `TZR_DrawBegin` et `TZR_DrawEnd`. ```c /* main.c */ #include "TZR.h" int main(int argc, char **argv) { (void)argc, (void)argv; if (TZR_Init(.width=256, .height=256, .title="intro") < 0) return 1; while (!TZR_ShouldQuit()) { TZR_CycleEvents(); TZR_DrawBegin(); TZR_DrawSetColor(1.0f, 0.0f, 1.0f); TZR_DrawClear(); TZR_DrawEnd(); } TZR_Quit(); return 0; } ``` Recompilez, lancez et vous devriez obtenir un magnifique carré violet. ## gestion des ressources TZR permet de charger des images au format .bmp et les afficher. Toutes les ressources sont déchargées automatiquement par TZR dans `TZR_Quit`. ```c /* main.c */ #include "TZR.h" int main(int argc, char **argv) { (void)argc, (void)argv; if (TZR_Init(.width=256, .height=256, .title="intro") < 0) return 1; const TZR_Uint id = TZR_LoadResource("res.bmp"); if (id == 0) { TZR_Quit(); return 1; } while (!TZR_ShouldQuit()) { TZR_CycleEvents(); TZR_DrawBegin(); TZR_DrawSetColor(1.0f, 0.0f, 1.0f); TZR_DrawClear(); TZR_DrawSetColor(1.0f, 1.0f, 1.0f); TZR_DrawImage(id, 0, 0); TZR_DrawEnd(); } TZR_Quit(); return 0; } ``` Recompilez, lancez et `res.bmp` devrait être dessiné en haut à gauche de la fenêtre. ## suite et fin Je vous redirige vers le `TZR.h` généré pour trouver les prototypes des fonctions non traitées dans cette introduction (il y en a beaucoup). Le `main.c` de ce dépot est également une bonne ressource d'apprentissage.