Skip to content

Commit d526b52

Browse files
committed
reworded snake - no more artefacts, copy the starter code from HTML
1 parent 574ea1f commit d526b52

File tree

13 files changed

+87
-96
lines changed

13 files changed

+87
-96
lines changed

notebooks/tps/snake/.teacher/media

Lines changed: 0 additions & 1 deletion
This file was deleted.

notebooks/tps/snake/.teacher/v0.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

notebooks/tps/snake/.teacher/v1.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

notebooks/tps/snake/.teacher/v2-obso.py

Lines changed: 0 additions & 49 deletions
This file was deleted.

notebooks/tps/snake/ARTEFACTS

Lines changed: 0 additions & 4 deletions
This file was deleted.
-572 KB
Binary file not shown.

notebooks/tps/snake/README-snake-nb.md

Lines changed: 87 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2527
Le but de ce TP est de réaliser un petit jeu en Python. L'objectif est de vous
2628
apprendre à concevoir et réaliser un programme complet, et non de réaliser le
2729
nouveau 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

5570
Enfin 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
5772
fonctionne.
5873

5974
Mais 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
80100
trouve, il vous faut taper ceci avant de relancer un terminal
81101
82102
```bash
@@ -85,8 +105,9 @@ $ conda init bash
85105
86106
Reportez-vous plus bas pour une liste des commandes qui nous permettent de gérer
87107
les environnements virtuels conda.
108+
````
88109

89-
110+
<!-- #region -->
90111
## Prérequis
91112

92113
Installez 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

106127
Sachez 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+
194221
et on n'oublie pas de faire un commit...
195222

196223
<!-- #region -->
197-
## Le damier
224+
## Le damier (v2)
198225

199226
Nous 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
213240
qui 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'
221252
rect = 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
224258
pg.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+
227266
une 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
234274
illustrations 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+
268315
Une fois que le serpent bouge, ajouter les commandes pour se déplacer dans les 4
269316
directions, en cliquant sur les flèches (par exemple le code renvoyé par la
270317
flê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

283330
Il faut maintenant faire manger notre serpent.
284331
On va procéder comme suit:
@@ -297,7 +344,7 @@ On va procéder comme suit:
297344
```
298345

299346

300-
## Épilogue
347+
## Épilogue (v7)
301348

302349
Il 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

423470
Si 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

440486
Dernière astuce pour les *geeks*: si vous voulez savoir où se trouve la racine
441487
de votre dépôt courant:
@@ -446,3 +492,4 @@ git config --global alias.root "rev-parse --show-toplevel"
446492

447493
aprè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

Comments
 (0)