@@ -20,40 +20,55 @@ Licence CC BY-NC-ND, Thierry Parmentelat
2020
2121# Le snake
2222
23- pour réaliser ce TP localement sur votre ordi, {download}` commencez par télécharger le zip<./ARTEFACTS-snake.zip> `
23+ ```` {admonition} pas besoin de zip
24+ pour faire ce TP, vous avez seulement besoin de cet énoncé en HTML, qui contient le code de démarrage
25+ ````
2426
2527Le but de ce TP est de réaliser un petit jeu en Python. L'objectif est de vous
2628apprendre à concevoir et réaliser un programme complet, et non de réaliser le
2729nouveau best-seller.
2830
29- ** avertissement** ce document n'est pas un notebook (et le code ne va pas
30- marcher dans un notebook non plus); on peut le lire avec jupyter mais c'est
31- sous-optimal, le mieux est le lire avec vs-code, ou en HTML statique.
32-
31+ Gardez en tête que votre objectif est de réaliser un ** programme qui marche** , et
32+ pas un programme parfait.
3333
34+ <!-- #region -->
3435## Objectifs et démarche
3536
36- Gardez en tête que votre objectif est de réaliser un ** programme qui marche** et
37- pas un programme parfait.
38- Aussi on va commencer par se créer un dossier vierge, et l'initialiser ** comme un
39- dépôt ` git ` ** (on fait comment déjà ?)
37+ on va commencer par se créer un dossier vierge
4038
4139``` bash
4240$ mkdir mysnake
4341$ cd mysnake
44- $ # et là on crée un dépôt git avec ??
4542```
4643
47- Et ensuite, on va bien faire attention de ** committer chaque fois** qu'on aura
48- ** une version qui marche**
49- c'est-à-dire dans ce TP très guidé, ** un commit par
50- étape** en gros !
44+ ```` {admonition} un dépôt git
45+
46+ si vous êtes déjà dans un dépôt git (par exemple le dépôt pour rendre vos devoirs), pas de souci;
47+ dans le cas contraire (ou si vous êtes dans un dépôt de cours), il vous faut
48+ initialiser le dossier `mysnake` **comme un dépôt `git`** (on fait comment déjà ?)
49+ ````
50+ <!-- #endregion -->
51+
52+ ## Mode d'emploi
53+
54+ Votre travail se passe exclusivement ** dans un seul fichier ` snake.py ` ** ,
55+ que vous allez d'abord créer avec vs-code - à partir du code de démarrage -
56+ puis modifier (et le moins possible d'ailleurs) à chaque étape
5157
52- Et comme ça quand on aura un bug on pourra se concentrer sur ** ce qui a changé**
53- depuis la version qui marchait
58+ ```` {admonition} pas de Jupyter
59+ :class: warning
60+
61+ le code ne va pas fonctionner dans un notebook Jupyter !
62+ vous êtes invités à travailler directement dans vs-code - et c'est l'occasion d'apprendre à s'en servir un peu mieux
63+ ````
64+
65+ Et ensuite, on va bien faire attention de ** committer chaque fois** qu'on aura ** une version qui marche**
66+ c'est-à-dire dans ce TP très guidé, ** un commit par étape** en gros !
67+
68+ Et comme ça quand on aura un bug on pourra se concentrer sur ** ce qui a changé** depuis la version qui marchait
5469
5570Enfin si vous créez votre dépôt à l'intérieur d'un autre dépôt (de cours par
56- exemple), reportez-vous à la toute dernière section pour comprendre comment `ca
71+ exemple), reportez-vous à la toute dernière section pour comprendre comment ça
5772fonctionne.
5873
5974Mais avant de pouvoir commencer, un peu de préparation...
@@ -69,14 +84,19 @@ Commencez par créer et activer un environnement dédié au TP:
6984``` bash
7085# on commence par créer un environnement "snake"
7186(base) $ conda create -n snake python=3.12
87+
7288# puis on l'active
7389(base) $ conda activate snake
90+
7491# votre terminal doit indiquer le nom d'environnement:
7592(snake) $
7693```
7794
78- ** NOTE** si vous ne voyez pas, comme montré ici, le ` (snake) ` affiché dans le
79- prompt de bash pour vous rappeler en permanence dans quel environnement on se
95+ ```` {admonition} le prompt doit vous montrer l'environnement actif
96+ :class: danger
97+
98+ si vous ne voyez pas, comme montré ici, le `(snake)` affiché dans le
99+ *prompt* de bash pour vous rappeler en permanence dans quel environnement on se
80100trouve, il vous faut taper ceci avant de relancer un terminal
81101
82102```bash
@@ -85,8 +105,9 @@ $ conda init bash
85105
86106Reportez-vous plus bas pour une liste des commandes qui nous permettent de gérer
87107les environnements virtuels conda.
108+ ````
88109
89-
110+ <!-- #region -->
90111## Prérequis
91112
92113Installez ensuite la dernière version du module ` pygame ` avec ` pip ` :
@@ -105,9 +126,10 @@ soyez patient lors du premier lancement, la librairie initialise des tas de chos
105126
106127Sachez aussi que vous pouvez aussi voir la version installée d'une librairie avec
107128
108- ``` bash
109- (snake) pip show snake
110129```
130+ (snake) pip show pygame
131+ ```
132+ <!-- #endregion -->
111133
112134## Code de démarrage (v0)
113135
@@ -191,18 +213,23 @@ disant comment réagir aux clicks sur le clavier ou sur la fenêtre:
191213``` {literalinclude} v1.py
192214```
193215
216+ - lisez bien ce code
217+ - éventuellement regardez la différence avec la v0
218+ - pour cela dans vs-code il y a la fonction * File: Compare active file with ...*
219+ - et faites-le tourner pour voir le changement de comportement
220+
194221et on n'oublie pas de faire un commit...
195222
196223<!-- #region -->
197- ## Le damier
224+ ## Le damier (v2)
198225
199226Nous allons commencer par construire notre plateau de jeu ainsi:
200227
201228- le plateau de jeu est découpé en 30x30 cases
202229- chaque case fait 20 pixels de côté
203230
204- Pour valider le bon fonctionnement de ce plateau de jeu, écrivez un programme
205- qui dessine un grille (vous pouvez ben sûr choisir d'autres couleurs):
231+ pour la v2 vous devez remplacer dans la v1 le code qui affiche (la couleur ranfom)
232+ pour obtenir le damier ci-dessous (vous pouvez bien sûr choisir d'autres couleurs):
206233
207234``` {image} media/damier.png
208235:align: center
@@ -213,22 +240,35 @@ pour cela, vous pouvez utiliser la méthode
213240qui dessine un rectangle:
214241
215242``` python
243+ # une recette pour dessiner un rectangle:
244+
216245# les coordonnées de rectangle que l'on dessine
217- x = 100 # coordonnée x (colonnes) en pixels
218- y = 100 # coordonnée y (lignes) en pixels
219- width = 30 # largeur du rectangle en pixels
220- height = 30 # hauteur du rectangle en pixels
246+ x, y = 100 , 200 # les coordonnées du coin du rectangle (en pixels)
247+
248+ # la taille du rectangle
249+ width, height = 20 , 20 # largeur et hauteur du rectangle, toujours en pixels
250+
251+ # on crée un objet 'Rect'
221252rect = pg.Rect(x, y, width, height)
222- # appel à la méthode draw.rect()
223- color = (255 , 0 , 0 ) # couleur rouge
253+
254+ # la couleur de remplissage
255+ color = (255 , 0 , 0 ) # couleur rouge
256+
257+ # et on le dessine comme ceci dans l'écran virtuel
224258pg.draw.rect(screen, color, rect)
225259```
226260
261+ ```` {admonition} conseils
262+ - il peut être utile d'écrire une fonction qui afficher tout le damier
263+ - il peut être utile de se définir des variables pour le nombre de tuiles et les dimensions des tuiles
264+ ````
265+
227266une fois que ça marche, vous faites quoi ?
267+
228268<!-- #endregion -->
229269
230270<!-- #region -->
231- ## Un serpent fixe
271+ ## Un serpent fixe (v3)
232272
233273À partir de maintenant, on va garder le damier comme fond d'écran (même si les
234274illustrations ne le montrent pas)
@@ -254,17 +294,24 @@ totalement arbitraire et pas du tout imposé) :
254294```
255295<!-- #endregion -->
256296
257- ## Un serpent qui bouge
297+ ## Un serpent qui bouge (v4)
298+
299+ Ensuite, nous allons faire bouger le serpent. C'est en fait très simple:
258300
259- Ensuite, nous allons faire bouger le serpent.
260- C'est en fait très simple:
261301- nous créons un vecteur de "direction"
262302 ``` python
263303 direction = (1 , 0 )
264304 ```
265305- à chaque itération de la boucle, nous pouvons déplacer le serpent dans cette
266306 direction en "ajoutant" ce vecteur à la position de la tête du serpent
267307
308+ dans la v4 donc, le serpent avance vers la droite à chaque itération, mais on ne peut pas encore le controler
309+
310+ n'oubliez pas de * commit*
311+
312+
313+ ## On peut contrôler la direction (v5)
314+
268315Une fois que le serpent bouge, ajouter les commandes pour se déplacer dans les 4
269316directions, en cliquant sur les flèches (par exemple le code renvoyé par la
270317flêche vers le haut est ` pg.K_UP ` )
@@ -278,7 +325,7 @@ Aussi on peut commencer à envisager d'accélérer un peu le jeu à ce stade...
278325```
279326
280327
281- ## Le fruit
328+ ## Le fruit (v6)
282329
283330Il faut maintenant faire manger notre serpent.
284331On va procéder comme suit:
@@ -297,7 +344,7 @@ On va procéder comme suit:
297344```
298345
299346
300- ## Épilogue
347+ ## Épilogue (v7)
301348
302349Il nous reste deux petits changements pour avoir un serpent complètement fonctionnel:
303350
@@ -417,7 +464,7 @@ Voici un très rapide résumé des commandes pour gérer ses environnements virt
417464
418465 ** remarquez** comment il n'y a pas de ` env ` pour ` create ` , mais il en faut un pour ` remove ` ...
419466
420-
467+ <!-- #region -->
421468## Note à propos des dépôts git imbriqués
422469
423470Si vous avez reçu ce TP depuis un dépôt git (celui de votre cours d'info), ce
@@ -434,8 +481,7 @@ trouver le "bon" dépôt, on utilise assez naturellement l'algo suivant:
434481> on regarde si le dossier courant est un dépôt git, si oui on a trouvé, sinon on
435482 regarde dans le dossier parent, et ainsi de suite
436483
437- Donc c'est assez simple, mais surtout au tout début,
438- faites juste attention à ne pas ajouter vos fichiers dans le mauvais dépôt
484+ Donc c'est assez simple, mais faites juste ** attention à ne pas ajouter vos fichiers dans le mauvais dépôt**
439485
440486Dernière astuce pour les * geeks* : si vous voulez savoir où se trouve la racine
441487de votre dépôt courant:
@@ -446,3 +492,4 @@ git config --global alias.root "rev-parse --show-toplevel"
446492
447493après quoi vous pourrez taper n'importe où ` git root ` pour voir s'afficher le
448494(chemin complet du) dossier racine de votre dépôt.
495+ <!-- #endregion -->
0 commit comments