aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-02-22 15:58:13 +0100
committerkdx <kikoodx@paranoici.org>2023-02-22 16:00:36 +0100
commit0454fe8ac77530a2ad0efb40b151e9b353ff4560 (patch)
tree11240b255834c700bed97dc815f49a4e8908e233 /README.md
parent65966aabfd25413c92a569fe01809a0e979b82c8 (diff)
downloadtzr-0454fe8ac77530a2ad0efb40b151e9b353ff4560.tar.gz
rewrite README
Diffstat (limited to 'README.md')
-rw-r--r--README.md133
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.