@@ -6,37 +6,17 @@ license: "[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)"
66layout : ../layouts/MDXLayout.astro
77---
88
9- ---
10-
11- 🙏 Projet original par Aurélien Noce ([ @ushu ] ( https://github.com/ushu ) ).
9+ import Admonition from ' /src/components/Admonition.astro' ;
10+ import { Image } from ' astro:assets' ;
1211
13- ---
1412
15- ## Sandbox
13+ import snake from " /src/assets/snake.jpg " ;
1614
17- import Admonition from ' /src/components/Admonition.astro '
15+ < Image src = { snake } alt = " Boa constrictor by Jan Kopřiva " />
1816
19- <Admonition type = " note" >
20- Hey dude! I can see you now!
21- ``` python
22- import pyxel
17+ Projet original par Aurélien Noce (aka [ @ushu ] ( https://github.com/ushu ) ).
2318
24- def update ():
25- if pyxel.btnp(pyxel.KEY_Q ):
26- pyxel.quit()
27-
28- def draw ():
29- pyxel.cls(0 )
30- pyxel.text(56 , 54 , " Hello, Snake!" , pyxel.frame_count % 16 )
31-
32- pyxel.init(160 , 120 , title = " Hello Pyxel" )
33- pyxel.run(update, draw)
34- ```
35- </Admonition >
36-
37- <Admonition type = " warning" label = " 🐺 Attention les p'tits loups !" >
38- Nan rien, c'est un test ...
39- </Admonition >
19+ { /* ## Table des matières */ }
4020
4121## Introduction
4222
@@ -46,7 +26,7 @@ d'un programme complet.
4626
4727Son sujet est un standard du jeu vidéo, le 🐍 [ snake] .
4828
49- ! [[ 🎮 Snake!] ( https://kitao.github.io/pyxel/wasm/examples/07_snake.html ) ;
29+ [[ 🎮 Snake!] ( https://kitao.github.io/pyxel/wasm/examples/07_snake.html ) ;
5030une version classique du snake, réalisée avec la plate-forme de retro-gaming
5131Python [ Pyxel] ( https://github.com/kitao/pyxel ) .] ( images/snake-pyxel.jpg )
5232
@@ -85,29 +65,70 @@ pyxel.run(update, draw)
8565
8666## Comment ça marche ?
8767
88- - 🗔 ** Fenêtre.** Agrandissez la fenêtre du jeu -- initialement 300x300 --
89- pour adopter une taille de votre choix.
68+ ** TODO:**
69+
70+ - couleurs: faire le tour des possibles, renvoyer sur la "doc"?
9071
91- - ⏲️ ** Horloge.** Dans l'appel à la fonction ` clock.tick ` ,
72+ - Text: comprendre la taille (fixe) de chaque caractère,
73+ display d'une "grille" de caractères., comprendre comment est
74+ placé le "Hello world!", ajuster le programme pour que le texte
75+ soit toujours centré (même si plusieurs lignes ?).
9276
93- - remplacez l'argument ` 1 ` par ` 2 ` (puis exécutez le programme),
77+ ## Nombre d'images par seconde
9478
95- - procédez de même avec ` 5 ` ,
79+ La fonction ` time.time ` de la bibliothèque standard Python renvoie le temps
80+ écoulé en secondes depuis le 1er janvier 1970 à midi.
9681
97- - puis supprimez (ou commentez) l'appel à ` clock.tick ` .
82+ ```
83+ >>> import time
84+ >>> time.time()
85+ 1692980870.0990813
86+ >>> time.time()
87+ 1692980871.2445116
88+ >>> time.time()
89+ 1692980872.3245282
90+ ```
91+ Utilisez-là pour mesurer le temps qui s'écoule entre deux appels à la fonction
92+ ` draw ` de Pyxel. Puis, affichez le nombre d'images par seconde
93+ (ou FPS pour * frames per second* ) dans le coin en haut à gauche de la fenêtre.
94+
95+ <video controls width = " 768" >
96+ <source src = " /videos/fps.webm" type = " video/webm" />
97+ </video >
9898
99- Que se passe-t'il dans chaque cas ?
100- A votre avis, quel est le rôle de la fonction ` clock.tick `
101- et de son argument ?
10299
103- - 🖌️ ** Affichage.**
104- Que se passe-t'il si l'on commente la ligne ` pygame.display.update() ` ?
105- Savez-vous expliquer ce phénomène ?
100+ <Admonition type = " solution" open = { false } >
101+ ``` python
102+ import math
103+ import time
104+ import pyxel
105+
106+ def update ():
107+ if pyxel.btnp(pyxel.KEY_Q ):
108+ pyxel.quit()
109+
110+ def draw ():
111+ global t
112+ t_new = time.time()
113+ dt = t_new - t
114+ t = t_new
115+ fps = 1.0 / dt
116+ pyxel.cls(0 )
117+ pyxel.text(0 , 0 , f " fps: { int (round (fps))} " , 7 )
118+
119+ pyxel.init(160 , 120 , title = " 🐍 Snake" )
120+ t = time.time()
121+ pyxel.run(update, draw)
122+ ```
123+ </Admonition >
124+
125+ ## Evènements
106126
107- - 🎨 ** Couleurs. ** Faites en sorte que les couleurs qui s'affichent
108- soient toujours aléatoires, mais uniquement parmi des nuances de bleu .
127+ - évènement claviers: détecter les flèches, afficher les symboles,
128+ avec ceux qui sont pressés d'une couleur différente (plus vive) .
109129
110- 🗝️ On pourra consulter l'annexe [ "Codes RGB"] ( #annexe--codes-rgb ) .
130+ - éventuellement: "P" pour pause ? Plus rien n'est mis à jour ?
131+ (sauf la détection de la touche "P")
111132
112133## Événements
113134
@@ -162,7 +183,7 @@ Nous allons commencer par construire notre plateau de jeu ainsi :
162183Pour vérifier la validité de ce plateau de jeu,
163184écrivez un programme qui dessine un damier :
164185
165- ![ ] ( images/damier.png )
186+ { /*  */ }
166187
167188🗝️ Vous pouvez utiliser la méthode [ ` pygame.draw.rect ` ] ( https://www.pygame.org/docs/ref/draw.html#pygame.draw.rect ) :
168189
@@ -199,7 +220,7 @@ pour obtenir un schéma comme suit ;
199220disons pour fixer les idées que dans ce cas de figure ` [10, 15] ` est la queue
200221et ` [12, 15] ` est la tête :
201222
202- ![ ] ( images/serpent.png )
223+ { /*  */ }
203224
204225<details >
205226<summary >
@@ -253,7 +274,7 @@ Ensuite, nous allons faire bouger le serpent :
253274- à chaque itération de la boucle, nous pouvons déplacer le serpent dans
254275 cette direction en "ajoutant" ce vecteur à la position de la tête du serpent
255276
256- ![ ] ( images/serpent-bouge.gif )
277+ { /*  */ }
257278
258279Une fois que le serpent bouge, ajouter les commandes pour se déplacer dans
259280les 4 directions, en appuyant sur les touches de direction du clavier.
@@ -333,7 +354,7 @@ On va procéder comme suit:
333354 on place un nouveau fruit à une position aléatoire
334355 et on allonge le serpent d'une case
335356
336- ![ ] ( images/manger.gif )
357+ { /*  */ }
337358
338359<details >
339360<summary >
0 commit comments