B1 · Episode 28 · 5:11
Creating a Spaceship with Pyxel
This episode teaches how to create a movable spaceship using Python and the Pyxel library: defining position variables (xv, yv), splitting logic into dedicated update_vaisseau and draw_vaisseau functions, and drawing a 10×10 yellow rectangle as the ship.
Source:jmbarbier / peertube.solidev.net · License:CC BY-SA 4.0
Transcript
Donc si je reviens vers le code,
So, if I go back to the code,
on va pouvoir maintenant personnaliser un petit peu ces choses- là.
we can now customize these elements a bit.
Donc là, je veux plus de mon rectangle.
Here, I want a larger rectangle.
Et le kit, on peut le garder, mais il sert pas à grand chose ici.
We can keep this toolkit, but it’s not very useful here.
Nous ce qu'on va vouloir faire, c'est d'avoir des personnages,
What we actually want is to add characters,
donc on va vouloir un vaisseau spatial qui va se déplacer sur l'écran.
specifically, a spaceship that moves across the screen.
Donc pour ça. J'ai besoin d'avoir les positions
For this, I need the positions
de mon vaisseau spatial.
of my spaceship.
Je vais créer des variables x.
I’ll create variables x and y.
v est égal alors au début je vais le mettre à peu près au milieu donc si je veux le
v starts at
mettre à peu près au milieu en x on va dire cent soixante
roughly the horizontal center—so 160 divided by 2,
divisé par deux ça nous fait dans les
which gives us about
quatre- vingts et yv,
80; for yv,
on va le mettre plutôt en bas, donc plutôt en bas,
we’ll place it lower down,
on va dire plutôt dans les 100. Et
say around 100.
ici, cette variable va contenir
This variable will store
la position en X et en Y de mon vaisseau.
the spaceship’s position on the X and Y axes.
Et maintenant, il va falloir que dans les fonctions update et dans les fonctions
Next, inside the update and draw functions,
draw, je m'occupe de dessiner un vaisseau spatial.
I’ll need to handle drawing the spaceship.
Alors je vais pas tout faire dans une énorme fonction update et une énorme fonction
I won’t put everything into one huge update function
draw. On va justement couper le programme en petits morceaux.
and one huge draw function—instead, I’ll break the program into smaller pieces.
C'est plus facile à modifier, c'est plus facile à tester.
This makes it easier to modify and test.
On va par exemple faire une fonction def.
For example, let’s define a function:
Dro vaisseau. Et pour l'instant je mets rien dedans.
draw_ship, and leave it empty for now.
Alors quand je veux faire une fonction sans rien mettre dedans mais que la syntaxe
When we want to define an empty function while keeping correct syntax,
reste bonne, je dis pass.
we write 'pass'.
Pass ça veut dire tu fais rien mais juste il y a une ligne qui est présente.
'Pass' means 'you do nothing,' but a line appears on screen.
Def et on va faire aussi un update
Let's define it, and we'll also update the spaceship.
vaisseau. pass donc là
So here,
je vais plutôt le refaire comme dans l'énoncé le faire dans les update et vaisseau
I'll rewrite it as specified: placing the relevant code inside the update and vaisseau functions.
donc là on a une fonction qui va devoir mettre à jour la position du vaisseau en
Now we have a function that
fonction des touches qu'on va
must update the spaceship's position based on which keys
à voir au clavier, et ensuite le draw vaisseau qui va devoir dessiner le vaisseau
are pressed on the keyboard; then there's the draw-ship function, which draws the spaceship.
spatial. Et on va ici, à l'intérieur de la fonction principale Update,
Next, inside the main update function,
appeler la fonction.
we'll call this function.
UpdateVaisseau, donc je fais un appel.
Update the spacecraft, so I make a call.
à la fonction update vaisseau, et là dans draw, après avoir effacé l'écran,
call the spaceship update function, and then in the draw function, after clearing the screen,
je vais faire un update,
I’ll perform an update,
pardon un draw.
sorry, a draw.
Et dans ce cas- là, vous avez ici la fonction draw, la fonction update.
In this case, you have here the draw function and the update function.
Imaginez par exemple que vous voulez déboguer quelque chose,
For example, imagine you want to debug something,
vous ne voulez plus de l'affichage du vaisseau, vous avez juste à commenter.
you no longer need the spaceship display—you just comment it out.
le update vaisseau et le draw vaisseau,
the update spaceship and draw spaceship functions,
et vous n'avez plus de vaisseau dans le jeu. C'est plus facile que de devoir
and you no longer have a spaceship in the game. It's easier than having to
commenter toutes les lignes de code qui s'occupent du vaisseau.
comment out all the lines of code that handle the spaceship.
Donc là, on veut avoir un vaisseau, donc on va décommenter,
So here, we want a spaceship, so we’ll uncomment,
mais le fait de couper les fonctionnalités en plein de petites fonctions qui chacune
but splitting features into many small functions,
font une chose précisément permet d'avoir du code qui est plus facile à déboguer,
each doing one specific thing, makes the code easier to debug,
qui est plus facile à utiliser, etc.
easier to use, and so on.
Donc, alors, drawvaisseau,
So then, spaceship,
drawvaisseau, vous remarquerez que les variables x
spaceship—you’ll notice the x variable
vaisseau et y vaisseau sont là dans le programme principal.
spaceship and y spaceship are in the main program.
Et la fonction draw vaisseau.
And the draw_vessel function.
n'est pas directement enfin elle est dans le programme principal mais ces variables
is not directly defined inside the function—actually, it’s in the main program, but these variables
là sont en dehors de la fonction drawvessel mais je vous avais dit que le python
here are outside the draw_vessel function. However, I previously explained that Python
quand on utilisait une variable dans une fonction et que cette variable n'était pas
when uses a variable inside a function, and that variable is not
une variable qui avait été
explicitly declared as local to that function, Python kindly
Conçu comme étant local pour la fonction, le Python était gentil,
go look for it outside.
il allait la chercher dehors.
Here’s a typical example of when Python uses this feature.
Voilà un exemple typique de moment où le Python va utiliser cette fonctionnalité.
Python will be asked to draw a rectangle with coordinates xv and yv;
Le Python, on va lui demander d'aller dessiner un rectangle avec comme coordonnées
since Python doesn’t find local variables named xv and yv inside the function,
xv et yv, et comme le Python ne voit pas de variable locale de la fonction.
it will go search for that information outside, in the main program.
xv yv, il va aller chercher l'information à l'extérieur dans le programme principal.
So, to draw my spaceship, I’ll draw a single pixel.
Donc là, pour aller faire mon vaisseau, je vais faire un pixel.
That is, I’ll call the point_rect function. Let me remind you: point_rect
point rect, et je vous rappelle que pixel point rect.
draws a rectangle,
ça dessine un rectangle de
with width w, height h, color col, starting at coordinates x and y.
largeur w, de hauteur h et de couleur col à partir de x y.
So here, I’ll pass xv and yv as the starting position.
Donc là, je vais faire un xv.
For size, we’ll make a fairly small spaceship—say, 10 by 10 pixels.
yv, la taille, on va faire un vaisseau assez petit, on va faire du 10 par 10.
As for the spaceship’s color, let’s keep it simple.
Et la couleur de notre vaisseau, on va rester sur un truc assez simple.
We already have purple; let’s choose yellow for our spaceship—
La couleur de notre vaisseau, on a déjà du violet, on va faire un vaisseau,
you can pick any color you like—e.g., color number 9,
vous faites la couleur que vous voulez, un neuf, voilà, couleur numéro neuf,
which is yellow.
jaune.
(i.e., yellow)