aboutsummaryrefslogtreecommitdiff

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.

$ 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.

/* 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.

$ 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.

/* 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.

/* 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.