aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 7c92f3efbc5caf12316cefb441fafc363d53ad70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 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.