diff options
author | kdx <kikoodx@paranoici.org> | 2023-02-22 15:58:13 +0100 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-02-22 16:00:36 +0100 |
commit | 0454fe8ac77530a2ad0efb40b151e9b353ff4560 (patch) | |
tree | 11240b255834c700bed97dc815f49a4e8908e233 /README.md | |
parent | 65966aabfd25413c92a569fe01809a0e979b82c8 (diff) | |
download | tzr-0454fe8ac77530a2ad0efb40b151e9b353ff4560.tar.gz |
rewrite README
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..186c566 --- /dev/null +++ b/README.md @@ -0,0 +1,133 @@ +# introduction à TZR + +TZR est un moteur de jeu minimaliste écrit en C99, 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 +``` + +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. |