Académique Documents
Professionnel Documents
Culture Documents
Cahier D - Activités Python Pour Les Kids (2016) PDF
Cahier D - Activités Python Pour Les Kids (2016) PDF
Cahier d'activités
pour les
Dès 10 ans
Apprends
à coder
en t'amusant !
Cahier d'activités
PYTHON
pourlesKiDS
Apprends à coder en Python en t'amusant!
Avec le livre que tu tiens entre les mains, tu vas apprendre à coder ton propre
jeu vidéo en Python, l'un des langages de développement les plus populaires
du monde. Pas d'inquiétude : aucun savoir-faire préalable n'est demandé.
Si c'est ta première expérience au sein du monde magique des développeurs,
pas de panique : tout te sera expliqué de façon détaillée et, en cas de besoin,
les différentes solutions te seront présentées au fur et à mesure. Tu trouveras
dans cet ouvrage six chapitres de difficulté croissante pour créer ton premier
jeu vidéo. Et tu vas même pouvoir inventer et cacher tes propres codes de triche
pour le personnaliser !
Caractéristiques du jeu
• Deuxj oueurs : le premier q ui tire un obus sur le t ank de l'adversaire gagne
• Véritable mot eur physique (gravité, mét éo, collisions)
• Codes de triche (gagner direct ement, modifier la direct ion de l'obus...)
L'auteur
David Weinachter est un ingénieur informatique qui a toujours été passionné par la program-
mation : c'est pour transmettre sa passion à ses enfants quïl a créé Kidscod.in. la premiére
méthode en ligne pour apprendre aux enfants à coder en toute autonomie. dès qu'ils
commencent à savoir lire. Convaincu qu'on apprend mieux en s·amusant. David s·attache à
faire découvrir le code aux enfants via des histoires interactives ou des jeux vidéo à créer.
l/l
(!.)
À qui s'adresse ce livre ?
,_
0
Au x enfants (dès 10 ans), parents et enseignants !
~
Surwww.kidscod.in/app/tank
Crée, personnalise et partage ton propre jeu de tank
en suivant les indications de ce livre.
www.editions-eyrolles.com
David Weinachter
Cahier d'activités
pour les
Vl
<lJ
0
1....
w
>-
l.D
.-t
0
N
@
.......
..c
O'l
·;::::
>-
a.
0
u
EYROLLES
Groupe Eyrolles
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com
Je vou s aime
Vl
<lJ
0
1....
>-
w
l.D
.-t
0
N
@
.......
..c En application de la loi du 11 mars 1957, il est interdit de reprodui re intégralement ou partiellement le présent
O'l
·;:::: ouvrage, sur quelque support que ce soit, sans autorisation de l'éditeur ou du Centre français d'exploitation
>-
a.
0 du droit de copie, 20, rue des Grands-Augustins, 75006 Paris.
u
© -wowu- pour les illustrations de l'ouvrage et d u site web associé kidscod.in/app/tank
Chapitre 1
Apprendre à faire bouger un tank ............................................. 9
Création de ton compte.......................................................................................................................................... 10
Environnement de développement............................................................................................................... 10
Et le langage Python dans tout ça ? ............................................................................................................. 11
Pourquoi mon tank ne bouge-t-il pas ? ..................................................................................................... 11
Ton premier morceau de code.......................................................................................................................... 12
Des murs invisibles..................................................................................................................................................... 13
Allons-y ! ............................................................................................................................................................................ 14
Félicitations !.................................................................................................................................................................... 16
Et la suite ? ....................................................................................................................................................................... 17
Chapitre 2
Comment tirer un obus ? ............................................................... 19
Quoi de neuf ?................................................................................................................................................................ 20
Ce que nous allons faire dans ce chapitre............................................................................................... 20
Vers le haut et vers le bas..................................................................................................................................... 20
Les obus ! Les obus !................................................................................................................................................. 22
Donc nous avons un obus immobile, en plein milieu de l'écran............................................. 23
Feu !........................................................................................................................................................................................ 24
vi
Q) Victoire ! .............................................................................................................................................................................. 25
0
'- Et la suite ? ....................................................................................................................................................................... 26
>-
w
\D
T"-4
0
Chapitre 3
N
@ Simuler les lois de la physique ...................................................... 27
.µ
..c Quoi de neuf ?................................................................................................................................................................ 28
Ol
ï:::
>- Ce que nous allons faire dans ce chapitre............................................................................................... 29
Cl.
0 Déclenchons une tempête !................................................................................................................................. 29
u
Vl
~ Influence du vent sur la vitesse......................................................................................................................... 30
ëÀ
w Assez de physique, place au code ! ............................................................................................................... 31
<IJ
a_
::i
e Les obus tombent comme des pommes.................................................................................................. 31
(.'.)
@ À toi de jouer avec la gravité............................................................................................................................... 32
Vive la physique ! ......................................................................................................................................................... 33
Promenons-nous dans le système solaire............................................................................................... 33
La suite ! La suite ! ...................................................................................................................................................... 34
Chapitre 4
Collisions et explosions.................................................................... 35
Quoi de neuf ?................................................................................................................................................................ 36
Ce que nous allons faire dans ce chapitre............................................................................................... 36
Créons notre première fonction....................................................................................................................... 36
Une fonction qui n'est pas appelée ne sert à rien............................................................................... 40
Les obus n'aiment pas tomber par terre.................................................................................................... 41
Deuxième fonction...................................................................................................................................................... 41
Une fonction qui n'est pas appelée ne sert décidément à rien !............................................. 42
Enfin une explosion !................................................................................................................................................. 43
Jetons un coup d'œil au code généré automatiquement.............................................................. 43
Et maintenant ?............................................................................................................................................................. 45
Chapitre 5
Finalisation de tonjeu vidéo......................................................... 47
Quoi de neuf ?................................................................................................................................................................ 48
Ce que nous allons faire dans ce chapitre............................................................................................... 48
Mise en place du compteur et des tours de jeu................................................................................... 49
Ne jamais rester à zéro............................................................................................................................................ 50
« Mais enfin, Dieu ne joue pas aux dés ! » (Albert Einstein)...................................................... 50
Quand un obus rencontre un tank................................................................................................................ 52
Game over......................................................................................................................................................................... 54
Enfin !.................................................................................................................................................................................... 56
Et le code dans tout ça ?........................................................................................................................................ 56
Vl
Et maintenant? ............................................................................................................................................................. 58
<lJ
0
1....
>- Chapitre 6
w
l.D
.-t
Cacher des codes de triche ........................................................... 59
0
N Quoi de neuf ?................................................................................................................................................................ 60
@
....... Un premier exemple : la téléportation ......................................................................................................... 60
..c
O'l
·;::::
On ne joue jamais assez avec le hasard .................................................................................................... 61
>-
a. Il est temps de jouer à tricher............................................................................................................................. 61
0
u À toi de « jouer » ! ...................................................................................................................................................... 63
_Q)
C'est fini ? .......................................................................................................................................................................... 63 lw
Q)
a.
1ndex...................................................................................................... . 64 =>
e
(.'.)
@
8 Sommaire
Avant de te lancer
dans la création
de ton jeu vidéo
De nos jours, les créateurs d e jeux v id éo sont souve nt consid érés comme d es magi-
ciens : avec just e un peu d e cod e informatiqu e en guise de baguette magique, ils
arrivent à animer d es p etits pixels, à raconter d es histoires fantastiques et m ême à
crée r des émotions. Quand on sait que les ordinateurs (tout comme les consoles,
tablettes ou smartpho nes) n'utili se nt que d es 0 et des 1 pour coder l'information,
il y a d e quoi trou ve r cela m agique !
Il est donc d estiné à t ous les petits curi eux qui o nt env ie d 'ap-
prendre à c rée r un jeu v idéo. Et pas d 'in qui étude: auc un savoir-
faire préa labl e n'est dem and é. Bien sûr, si tu as déj à commencé
à pro grammer, certain es choses t e se m b lero nt faciles et évidentes.
vi
Q)
Mais si c'est t a première ex périence au sein d u m o nde m ag ique d es
0
'-
>- d évelo ppeurs, pas d e paniq ue: t out t e sera expliqu é de façon dét aill ée et , en cas
w
\D
T"-4
de besoin, les dif férentes so lutio ns t e seront p résentées au f ur et à mesure.
0
N
@
Je ne t'ai pas encore t o ut dit co ncernant ce cahier : il ne révél era son enti ère
.µ
..c pui ssa nce que s' il est acco m pag né d'un site Internet (http://www.kidscod.in/app/tank) .
Ol
ï::: Celui -ci t 'accompag nera pendant t o ut t o n ap prenti ssage : c'est sur ce site que tu
>-
Cl.
0 po urras c rée r t on j eu v idéo, en six ét apes d e diffic ulté c ro issa nte. Tu peux lire ce
u
Vl
~ liv re sa ns jam ais aller sur le site, et tu apprendras sûrem ent des c hoses. Mais le
ë
w
À
mieux est d'avo ir accès au site Internet parallèlem ent à t a lectu re. A insi, tu p ourras
<IJ
a_
::i
e mettre en exéc uti o n immédiatem ent ce qu e t u li s et apprends. Et dans la m esure
(.'.)
@ où le but est ici d e t 'apprendre à créer un jeu v id éo, il se ra it dom mage de ne pas
0
pouvoir tester ton jeu vidéo au fur et à mesure de sa construction. Dans l'immédiat,
nul besoin de se connecter à Internet: nous verrons tout cela au premier chapitre.
Comme tous les grimoires, celui que tu tiens entre les mains est rempli de carac-
tères étranges : des caractères spéciaux qui te sembleront à la fois familiers et
complètement bizarres. C'est tout simplement parce que tu vas apprendre à coder
ton jeu en langage Python. Ce langage est utilisé aujourd'hui dans de nombreux
domaines, y compris pour la création de jeux vidéo. Là encore pas d'inquiétude,
chaque morceau de code en Python te sera expliqué en détail. Par exemple, un
morceau de code Python te sera présenté de cette façon :
Il est bientôt temps de te lancer dans ton apprentissage magique du code, mais
auparavant, laisse-moi te donner deux derniers conseils.
vi
Q)
0
'-
>-
w
\D Un jeu vidéo que tu pourras bientôt créer toi-même
T"-4
0
N
@
.µ
..c
Ol
ï::: Qu'est-ce que Kidscod.in ?
>-
Cl.
0
u Kidscod.in est une méthode en ligne ( http://www.kidscod .in ) pour apprend re aux
Vl
~
ëÀ
enfants de 7 à 77 ans les fondements de la programmation.
w
<IJ
a_
::i • L'app renti ssage de la programmation s'y fait grâce à un langage de
e
(.'.)
@ programmation vi suel, reposant sur des b locs logiques à imbriquer.
• Kidscod.in est le tremplin parfait pour s'orienter ensuite vers des langages
de programmation modernes tels que Python ou JavaScript.
vi
<lJ
0
1....
w
>-
l.D
.-t
0
N
@
.......
..c
O'l
·;::::
>-
a.
0
u
.Ql
lw
Q)
a.
=>
e
(.'.)
@
Apprendre à
Notions abordées
• L'animation dans un jeu vidéo
• Les tests
faire bouger
• Les conditions
un tank
0
'-
>-
w
\D Tout reste à fa ire...
T"-4
0
N
@
.µ
..c Ce premier exercice va te permettre de te familiariser avec ton environnement
Ol
ï:::
>- de travail en réalisant les premières bri'lues de tonjeu vidéo.
Cl.
0
u
Vl
~
ëÀ
Bienvenu e dans ton « Cahier d 'activités Python ». Dans ce premier chapitre, tu
w
<IJ
a_
::i
découvriras ce qu'on appelle un « e nvironn em ent de d éve loppement » , et tu
e
(.'.) commenceras à créer ton j eu vidéo.
@
Création de ton compte
Tu vas recevoir un e-mail contenant un lien de validation sur lequel il faudra cliquer
pour valider ton inscription. Ensuite, il te suffira de retourner à l'adresse http://www.
kidscod.in/app/tank et de te connecter.
Environnement de développement
2
se déplacer vers la gauche
(/)
Q)
se déplacer vers la droite
4
.µ
..c
Ol
ï:: for •vent ln pygome.ev•nt.get():
>-
Cl.
if event.type - K....RIGKT:
0
u
• C'est dans l'espace de travail e que tu vas assembler les blocs de code.
• Le code généré est automatiquement mis à jour dans la zone 0 en fonc-
tion des briques de code présentes dans l'espace de travail e.
Tu peux déjà t 'entraîner à faire les manipulations que tu vas répéter tout au long de
ce cahier: commence par prendre un bloc de code de la zone f), puis dépose-le
dans la zone Q . Tu peux voir que la zone C) sera automatiquement mise à jour en
fonction du bloc que tu auras déposé. Enfin, en cliquant sur le bouton • Dé marrer
( Démarrer), tu pourras tester ton programme qui s'exécutera dans la zone O. Ce
n'est pas plus compliqué que ça !
Bien évidemment, quand tu joues à un jeu vidéo, tu ne vois que la zone O . la scène.
Les zones f), Q et C) ne sont accessibles qu'au créateur du jeu vidéo. Nous verrons
par la suite comment tu pourras partager ton jeu avec tes amis ou ta famille, en
ne leur montrant que la zone O . Hors de question qu'ils aient accès à ton espace
de travail : un magicien ne révè le jamais ses sec rets!
C'est très simple : il est beaucoup plus facile d'apprendre à programmer de façon
visuelle, avec des blocs de code à imbriquer les uns dans les autres, plutôt que
d'écrire des lignes de code. En re vanc he, un e fois que tu auras bien comp ri s
comme nt c réer un j eu v idéo, tu pourras appre ndre à programmer à l'aide d'un
vi
Q)
langage de programmation textuel, co mme Python. On pense souvent à Pytho n
0
'-
>- pour apprend re un langage de programmation ca r il a justement été pensé pour
w
\D
T"-4
les débutants. Tout le texte que tu verras s'éc rire tout seul dans la zone 0 se ra la
0
N traduction en langage Python de ce que tu créeras de façon visuelle dans la zone
@
.µ
de travail Q . Mais je sens bien que tu es impat ient de commencer, alors c'est parti!
..c
Ol
ï:::
>-
Cl.
0
u Pourquoi mon tank ne bouge-t-il pas ?
Vl
~
ëÀ
w Dans un jeu v idéo, tu as l'habitud e de faire bouger ton personnage (ou des objets)
<IJ
a_
::i
e
(.'.)
à l'aide d'un joypad, d'un clavier ou encore en inc linant ta tablette. Mai s il n'y a rien
@ d e magique derrière tout ça: ce sont uniquement des lignes de cod e !
Si tu observes l'es pace de trava il, tu ve rra s deux blocs de cod e isolés: Quand flèche
gauche appuyée et Quand flèche droite appuyée.
1 •·EMHf!ilii!ii!illi!bMll
Tu as créé ton premier morceau de code! Il est temps de le tester en cliquant sur
Démarrer. Essaye ensuite de cliquer sur la flèche pointant vers la droite : youpi, ton
tank avance vers la droite! Ne t'arrête pas en si bon chemin, et procède de la même
façon pour pouvoir déplacer ton tank vers la gauche.
Attention
Tes modifications ne sont pas prises en compte par ton jeu vidéo tant que tu
ne cliques pas sur Réinitialiser, puis sur Démarrer.
vi
Q)
/
ffi Ces chiffres n'ont pas été choisis au hasard : il y a exactement 550 pixels entre
les deux extrémités de l'image. Or, les pixels sont les points les plus petits que ton
écran peut afficher.
Axe des x
On peut donc dire que quelle que soit la position du tank à l'écran, sa position« x »
se ra supérieure (ou égale) à 0 et forcément inférieure (ou égale) à 550. Je suis sûr
que tu as déjà compris que pour empêcher le tank de sortir de l'écran, il suffit de
s'assurer que sa position x reste e ntre 0 et 550. Avant chaque déplacement, nou s
vérifierons donc qu'elle est comprise entre 0 et 550, pour empêcher le tank de
bouger au-delà, même si le joueur appuie sur une des d eux flèches.
Allons-y!
0
.....
Dans la phrase précédente, deux mots sont très importants : « si » et « alors ». On
>-
w peut les matérialiser grâce au bloc de code si... faire que tu trouveras dans la
\D
r-4
0
liste des blocs disponibles.
N
@
.µ
..c
Ol
ï:::
>
Cl.
0
u
/
® Il est important que tu comprennes la nature du bloc pesi tien x du tank
actif : c'est ce qu'on appelle une« variable» dans le monde des programmeurs.
Une variable peut être assimilée à une boîte contenant une information : quand
on y fait appel, c'est l'information qu'elle contient qui nous intéresse. Dans notre
jeu de tank, la variable pesi tien x du tank actif contiendra toujours la
position du tank actif selon l'axe horizontal. Dès que le tank se déplace, elle est
automatiquement mise à jour avec la nouvelle valeur de la position du tank.
Je te laisse déposer ces trois blocs dans l'espace de travail (n'importe où pour
l'instant) afin de créer la condition « position x du tank supérieure ou égale à 0 ».
vi
Q)
Pour cela, n'oublie pas de rechercher le symbole i!: dans la liste déroulante du bloc
0
'-
>- de comparaison (qui par défaut vaut =). Une fois que tu as pris en compte cette
w
\D
T"-4
condition, il te suffit de la « clipser » à droite du bloc si...faire, dans l'encoche
0
N prévue pour cela. Voici à quoi ton code devrait ressembler :
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@ Comment définir un mur virtuel
As-tu bien compris pourquoi ? C'est tout simplement parce que si la condition
/
ffi n'est pas réalisée (si le tank est à la position x = o), alors le programme ne fait
rien : donc même si le joueur appuie sur la A.èche Gauche, il ne se passera rien. En
revanche, si la condition est réalisée (par exemple si le tank se trouve à la position
x = ioo), alors le programme a une instruction à réaliser, à savoir « se déplacer
vers la gauche ».
Note
Dans la correction que nous avons utilisée, la valeur est de 509 au lieu de
550 : c'est tout simplement parce que le tank a une longueur égale à 41 pixels.
l soel
1: •··C1
(/)
Q)
0
'- Fin du 1er chapitre
>-
w
\D
T"-4
0
N
@ Félicitations !
.µ
..c
Ol
ï:: Tu as terminé le premier c hapitre ! Tu as appris à :
>-
Cl.
0
u • déclenc her une action suite à l'appui d 'une t o uche ;
E» : il faut vérifier si le tank peut bouger vers la gauche (tu reconnaîtras la même
condition) ;
Et la suite?
Nous avons donc créé quelque c hose d'extraordinaire : un t ank qui bouge ! Mais
pour que le j e u so it réellement inté ressa nt, il va fa lloir lui appre ndre d'autres
c hoses, comme tirer un obus par exemple ... Rendez-vous au c hapitre 2 pour cette
vi
Q) nouve lle étape!
0
'-
>-
w
\D
T"-4
0
N
@ Psssst
.µ As -tu essayé de cliquer sur le deuxième tank ?
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
0
'-
>-
w
\.0
r-l
0
0J
@
_,_,
..c
01
ï::::
>-
Cl.
0
u
Chapitre
Comme
Notions abordées
• Affectation de valeurs
• Apparition/disparition
de sprites
vi
Q)
0
'-
>-
w
\D
T"-4 Attention au bouton rouge ...
0
N
@
.µ
..c
Ol
Dans ce deuxième chapitre, tu vas apprendre à faire apparaître un obus,
ï::: puis à le faire avancer en ligne droite.
>-
Cl.
0
u
Vl
~ Maintenant que tu es familiarisé avec l'environnement de développement, nous
ë
w
À
allons mettre en pratique ce que tu as appris au premier chapitre, en ajoutant des
<IJ
a_
::i
e canons aux tanks. Nous allons également voir comment faire en sorte que, dans
(.'.)
@ ton jeu, les t anks pui ssent tirer d es obus.
Quoi de neuf ?
• les tanks ont dorénavant des canons (c'est plus pratique pour
tirer un obus) ;
Tout d'abord, nous allons voir comment permettre au joueur d 'orienter les canons
des tanks. Ensuite, tu apprendras à faire tirer un obus à un tank. Mai s commençons
par nous intéresser aux canons !
Parmi les nouveaux blocs de code de l'espace de travail , tu peux remarquer que
deux d'entre eux concernent les flèches Haut e t Bas.
0
'-
>-
w Blocs de code pour la gestion des flèches Haut et Bas
\D
r-4
0
N
Tout comme nous avons vu comment faire se déplacer un tank grâce aux fl èches
@
.µ
..c Gauche e t Droite, nous allons faire en so rte que lorsque l'utilisat eur c liqu e sur la
Ol
ï::: fl èche pointant vers le haut, le canon du tank actif s'oriente un peu plus vers le haut.
>
Cl.
0 Inversem ent, il faut que le ca non s'oriente vers le bas lorsq ue c'est la flèch e pointant
u
vers le bas qui est appuyée. Pour cela, tu as à ta disposition d eux nouvelles actions.
Te rappelles-tu que pour les déplacements horizontaux du tank, nou s avons fait en
sorte que le tank ne puisse pa s sortir de l'écran ? Nou s allon s imposer des limites
similaires pour les canons: il ne faut pas qu'un canon pui sse descendre plus bas que
la position horizontale déterminée, ni aller au-delà de la position verticale définie.
Voici les d eux positions m ax imales, pour que tu v isu alises ce qu'il faut coder:
vi tank actif, nous allons rep ére r l'inc linaiso n du canon g râce à la variable angle
Q)
0 du canon actif. Cette dernière variabl e devra être comprise entre 5° (position
'-
>-
w presq ue verticale) et 85° ( position presqu e horizontale). N'hés ite p as à essayer
\D
T"-4 plusieurs solutions et à toujours t est er ton code e n cliquant sur le bouton Démarrer.
0
N
@
.µ
..c
Ol
ï:::
>- Note
Cl.
0 Les blocs dont tu auras besoin se trouvent respectivement dans les sous-
u
~
Vl menus Contrôles, Variables et Actions.
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
• •..,,
. . . . . . . ; _; ·!•· .
•·M''Mitt@li;t;1t®U
Code complet
gérant
les mouvements
du tank
Il est temps que ton jeu permette de tirer des obus. Dans les jeux vidéo, une des
astuces courantes consiste à dessiner tous les sprites du jeu lors de son lancement,
même ceux qui ne sont pas affichés dès le début. Ces derniers sont simplement
d essinés en dehors de la zone affichée à l'écran. Ainsi, lorsqu'on a besoin d'afficher
un sprite qui était caché ju squ'ici, il suffit de changer ses coordonnées x et y pour
qu'il apparaisse à l'écran.
Voici un exemple co ncret po ur bien compre ndre: au lancement du jeu, une image
d'un o bu s a ét é chargée. Elle est affic hée en d ehors de l'éc ran pour qu'e lle ne so it
pas v isible, m ais elle est bien là ! Si tu veux la voir, il suffit de modifier sa position sur
l'axe d es x. En fixant la coordonnée x d e l'o bu s à une va leur comprise entre 0 et 550
(les born es défini es au c hapitre 1), on verra apparaître l'obus comme par m ag ie !
Po ur y arriver, nou s allons nou s serv ir d'un nouveau bloc qui se situe dans le sous-
m enu Affectation . Les blocs d e type Affectation permette nt de modifie r les valeurs
(/)
Q) qui so nt stockées dans les variables. Nous allons donc utilise r le bloc Initialiser
0
'- la position x de l'obus à .
>-
w
\D
r-4
0 Contrôles lnot1al1ser la poaition x de l'obus à
N Actions
@ lnrt1aJ1ser l'angle de l'obus à
.µ Variables
..c Maths
Affectation de la position x
Ol
·;::
>- Outils d'un obus
Cl. Fonctions
0
u
vi
Q) Mais no us n'avons pas encore atteint notre but ! Pour rappe l, no us voulons que
0 l'o bus parte du canon du t ank, puis avance en ligne droite. Il nou s rest e donc d eux
'-
>-
w
problèmes à résoudre : faire bouger l'obus et le faire pa rtir de l'extrémité du canon.
\D
T"-4
0
N Jet ons un coup d'œil au x blocs à no tre disposition dans le m enu Variables : il y en a
@
.µ
un qui peut contribuer à résoudre notre problème, il s'ag it de la variable posi tien x
..c
Ol du canon actif. En eff et , si nou s f aisons e n so rte que la position x de l'obus so it la
ï:::
>-
Cl. m ême que la position x du cano n, alo r s l'obus semblera partir du ca no n !
0
u
Vl
~ Essaye pour voir ce que ça d o nne : il t e suffit choisir la va riabl e position x du
ëÀ
w tank actif comme entrée de la fonction Initialiser la posi tien x de l'obus
<IJ
a_
::i
e à . Tu peux t'amuser à tester en bougeant les deux tanks : à c haq ue fois que tu
(.'.)
@ ap pui eras sur le bouton rouge, l'obus devrait se positionne r p rès du ca non d u t ank
Je suis sûr que tu auras trouvé qu'il faut utiliser p o ur cela la foncti o n Initialiser
l'angle de l'obus à avec en entrée la variable angle du canon actif . Essaye
pour voir, et n'oublie p as de t est er avec plusieurs positions d es cano ns pour vérifie r
que t o n cod e est correct.
Attention
Il est toujours plus facile de tester et corriger à chaque petite modification que
de tester tout à la fin et de ne pas savoir d'où peut provenir ton erreur...
· ··-''' . . ."*·-·-·
(/)
Q)
0
'-
>-
w
\D
T"-4 Solution intermédiaire concernant le tir d'un obus
0
N
@
.µ
..c
Ol
ï:::
0
u
>-
Cl.
1111
Il no us rest e à résoud re un d ernier p ro blèm e : no tre o bus ne bouge p as ! Si tu
rega rdes du côt é du sous-menu Actions, tu d evrais tro uver le bloc qui va no us aider :
tirer un obus en ligne droite.
Affectation
1
Variables
se déplacer vers la droite
•
Maths
Comment tirer un obus
Outils
Fonctions
Qh1~1i!:l ..:!.:.1.y en ligne droite
Victoire!
Il est temps de jeter un œil au code Python généré pour bien comprendre comment
tout ce que tu as fait aurait pu être codé de façon textuelle :
vi
Q)
0
'-
for event in pygame.event.get():
>-
w if event.type == K_ UP: t»
\D
T"-4
0 if getActiveBarrelsRotation() >= S: f)
N
@ leverCanon () E)
.µ
..c
Ol
ï::: for event in pygame.event.get():
>-
Cl.
0 if event.type == K_ DOWN: (»
u
Vl
~ if getActiveBarrelsRotation() <= 85: C)
ë
baisserCanon() ~
À
w
<IJ
a_
::i
e
(.'.)
@
f) : il faut vérifier si le canon peut bouger vers le haut (tu reconnaîtras la condition
introduite par if) ;
e : il faut vérifier si le canon peut bouger vers le bas (tu reconnaîtras la condition
introduite par if) ;
4l!) : BOUM! On appelle la fonction fireWeapon () qui fait bouger un obus en ligne
Vl droite.
<lJ
0
1....
w
>-
l.D
.-t
0
Et la suite?
N
@
.......
Pour que ton jeu vidéo devienne un peu plus amusant, nous allons introduire
..c
O'l
·;::: la notion de gravité : en effet, un obus qui avance en ligne droite, sans jamais
>-
a. retomber, ce n'est pas très réaliste. Pour que notre obus soit attiré par la Terre,
0
u nous allons intégrer un « moteur physique de gravité » dans ton jeu vidéo : c'est
l'objet du chapitre 3 !
imu(er~
Notions abordées
• Création d' un moteur physique
• influence de la gravité et des
(es (ois de
forces externes (comme le vent)
(a physique
dans un moteur physique
vi
Q)
0
'-
>-
w
\D
T"-4 Quand l'environnement s'en mêle
0
N
@
.µ
..c
Ol
Dans ce chapitre, tu vas apprendre à simuler les (ois physiques
ï::: du monde qui nous entoure dans unjeu vidéo.
>-
Cl.
0
u
Vl
~
ëÀ
Dans le c hapitre 2, no us avons v u co mment tire r un o bus en li g ne dro ite. Cette
w
<IJ
a_
::i
solutio n n'est pas très satisfaisa nte po ur t o n jeu ca r ce n'est ni très amusa nt, ni
e
(.'.) confo rme à ce qu 'on peut observe r au quotid ie n.
@
Quoi de neuf ?
Contrôles
Actions 1111@.IH111.. h@W
1
Affectation
Varl8bJes
Maths
Outils
Fonctions
• la force du vent doit accé lérer o u ralentir l'obus (cela dépend du sens du
vent par rapport au déplacement de l'obus) ;
• la gravité doit attire r l'obus ve rs le bas (la g rav ité est const ante, e lle ne
vi
Q) d épend pas du vent : l'effet se ra donc t o ujours le m êm e, à savo ir attirer
0 l'obus vers le bas, de plus en plus v ite) .
'-
>-
w
\D
T"-4
0
N
@
Déclenchons une tempête !
.µ
..c
Ol Avant de déclencher une tempête, inté ressons-no us à la vitesse d'un obus e n
ï:::
>-
Cl. mouvement. Sur le schém a qui suit, tu peux voir qu'on a l'habitude de décomposer
0
u la vitesse d'un objet en mouvement en deux v itesses :
Vl
~
ë
w
À
• une v itesse horizonta le, qu'on nomme Vx;
<IJ
a_
::i
e
(.'.)
• une v itesse vertica le, qu'on nomme Vy.
@
Le mo uve ment d e l'obus va direct em ent dép endre d es va leurs d es v itesses hori -
zo ntal es et vertica les. Par exemple, si la v itesse ho rizo ntale de l'obus est null e, ce la
veut dire qu e l'obus ne se d éplace ra pas ho rizo ntalement. Il va donc se d éplacer
uniqu ement ve rti ca lem ent, en lig ne dro ite. A u contraire, si la v itesse vertica le d e
l'obus est nulle, cela sig nifie q ue l'obus ne va se d éplacer qu'hori zontalem ent, en
lig ne droite.
Si les v itesses ho ri zo ntales et vertica les ne sont pas null es, alors l'obus se dépl ace
ho ri zonta lement et vertica lement , co mm e d ans l'exem p le c i-dessus.
(/)
Q)
Note
Tu peux facilement vérifier qu'additionner les deux vitesses est la bonne
solution pour simuler l'influence du vent : dans le cas où le vent souffle dans
la direction opposée à celle de l'obus, les vitesses du vent et de l'obus n'ont
pas le même signe, et donc additionner ces deux vitesses revient à ôter la
force du vent à la vitesse de l'obus. Inversement, quand le vent souffle dans la
direction de propagation de l'obus, les deux vitesses ont le même signe : en les
additionnant, on ajoute bien la vitesse du vent à celle de l'obus. Et voilà !
Nous all o ns p our ce la utiliser les b locs d e code Initialiser la vitesse horizon-
tale de l'obus à , vitesse du vent et +. Co ntrairem ent au c hapitre 2 où o n fi xa it
le s variab les de l'obu s au départ, ic i nous nous int éresso ns à l'inf luence d u vent
pendan t le déplace m ent de l'obu s. Il fau t donc se servir d u bloc d e cod e Quand un
obus est en mouvement de l'espace d e trava il : t o u s les so u s-b locs ra ttac hés à ce
b loc sero nt exécutés en bou c le pe nda nt tout e la d urée d u m o u vem ent.
Note
Nous avons choisi ici de nous servir de la variable contenant la valeur de la
vi vitesse du vent. Libre à toi d'expérimenter d'autres valeurs, en utilisant par
Q)
exemple le bloc de code te permettant de choisir n'importe quel nombre.
0
'-
>- Pourquoi ne pas tester avec un vent très fort ?
w
\D
T"-4
0
N
@
.µ
..c
Ol
ï::: Les obus tombent comme des pommes
>-
Cl.
0
u
~
Vl Newt o n a eu d e la c hance de déco uv rir la lo i d e la g rav ité q u and un e po mme lui
ëÀ est to m bée sur la tête. Il aura it t o ut aussi b ien p u recevo ir un obus, ca r un obus
w
<IJ
a_
::i o b é it à la m êm e lo i physiq ue d e la g rav ité: t o ut co r ps suffisamment p roc he d e la
e
(.'.)
@
Terre est att iré p ar le ce ntre d e la Te rre.
Influence de la gravité
Comme la gravité est orientée vers le bas, nous allons devoir ôter sa va leur de la
v itesse Vy, tout au lo ng du trajet de l'obus. A insi, un obus qui est en train de monter
au ra tendance à ralentir son ascension, s'a rrêter puis à descendre en flèche vers
le bas!
(/)
Q)
0 : le code sui va nt s'ap pli q ue pendant t o ut le t e mps o ù l'évé nem ent ObusEnMou-
vement est reçu, soit pendant t o ut le t emps o ù un obus se d ép lace à l'éc ran ;
f) : o n mod ifie la va leur d e la v itesse Vx de l'o bus en lui ajo utant la va leur de la
v itesse d u vent ;
L'ava ntage de cod er soi-m êm e son jeu v idéo et son propre m o t eur p hysiq ue, c'est
q u'o n peut d écide r si le j eu v idéo se passe sur Terre o u aill eurs d ans l'es pace: pour
vi
Q)
c ela, ajust e la va leur de la g ravité po ur o bse rver comm ent se com porte raient les
0
'-
>- o bus sur d 'autres planèt es.
w
\D
T"-4 Par exempl e, la g ravité sur Mars va ut le tier s de la g ravité sur Terre. Il te suffit donc
0
N
de re m p lacer le b loc gravi té par l'ex press io n sui va nte :
@
.µ
..c
Ol
ï:::
>-
0
u
Cl.
gravité a::a n
Vl
~
ëÀ
w
<IJ
a_
::i Sur Mars, on a l'impression d'être trois fois plus léger que sur Terre.
e
(.'.)
@
Note
Il est techniquement impossible de poser un tank sur Jupiter car c'est une
planète gazeuse. Mais sa gravité très élevée justifie à elle seule qu'on s'y
intéresse !
La suite ! La suite !
Tu as déjà appris beaucoup de choses sur la création d'un j eu vidéo. Mais il rest e
encore quelques secret s à d écouvrir: par exe mple, tu as dû remarquer que les obus
tirés passe nt au travers d es obstacles, ce qui n'est encore une fois pas très réaliste.
Rendez-vous au chapitre 4 pour apprendre à coder la détection de collisions.
vi
Q)
0
'-
>-
w
\D
r-4
0
N
@
.µ
..c
Ol
ï::
>-
Q.
0
u
_hl
lw
(IJ
o.
::i
S?
(.'.)
@
• Détection de collisions
• Faire apparaître un sprite
d'explosion
• Création et manipulation
Il
vi
Q)
0
'-
>-
w
\D
T"-4 Jusqu'ici, tout va bien
0
N
@
.µ
..c
Ol
Dans ce chapitre, tu vas apprendre comment détecter (es collisions
ï::: entre les différents sprites.
>-
Cl.
0
u
Vl
~ Jusqu'ici, tu as appris à coder de façon assez réaliste la trajectoire d'un obus tiré
ë
w
À
depui s un ca non. Mais, tu as dû remarquer que ton obus se comportait assez bizar-
<IJ
a_
::i
e rement v is-à-vis des autres é léments du jeu vidéo : il les ignore complètement et
(.'.)
@ passe au travers ! No us allons donc cod er la détection d e co llisio ns.
Quoi de neuf ?
L'état initi al de l'exercice 4 est presque le même que l'état final de l'exer-
cice 3. Il y a tout de même deux nouvelles actions qui te seront utiles
dans ce c hapitre, à savoir Stopper l'obus et Déclencher une explosion
aux coordonnées x = et y - .
Contrôles
se déplacer vers la gauche
Affectation
Variables se déplacer vers la droite
Maths
Ouüts . !:IS:!.!.!,I
Fonctions
qq1:11r~1 ... 1.1.1,1
tirer un obus en ligne drotte
llQih!lilM
Déclencher une explosion aux coordonnées x=
ety=
Nouveautés du chapitre
Les obus que tirent nos tanks so nt rigolos mais il s ne so nt pas très d angereux : il s
passe nt au travers d e tou s les é lém ents, y compri s du so l !
C'est pareil pour nos tanks: mêm e si nous les avons e mpêchés d e sortir d e l'éc ran,
ils passent au trave rs l'un d e l'autre sa ns souci. Nou s all ons donc remédier à cela
en créant des fon cti o ns qu'on appelle « détection de co lli sio ns ».
(/)
Q) Ce sont des fonctions qui ne peu ve nt renvoyer que deux va leurs : « v rai » ou
0
'-
>- « fau x ». Créons par exe mpl e une fon ction qui s'appell era les deux tanks se
w
\D touchent ; celle-ci renverra vrai si effectivement les deux t anks se touchent, et faux
T"-4
0 si les d eux tanks ne se touchent pas. Pour d étecte r une collision, nous allo ns appeler
N
@ cette fonction t o ut au long de l'exécution du jeu v id éo. Quand la fonction renve rra
.µ
..c vrai à la place de faux, o n pourra en déduire que les deux tanks se touchent.
Ol
ï:::
>-
Cl.
0
u
Créons notre première fonction
Grande nouvelle, tu vas pouvoir réali ser ton propre bloc d e code visuel ! En effet,
le b loc les deux tanks se touchent n'ex ist e pas encore, c'est à t o i de le créer.
Contrôles
Actions
, . lue Su:IQue chose.
ru-....-:1
Affectation
l
Bloc permettant de créer Variables
Maths
de nouveaux blocs de code _... r&_ _
••mm• Il
Outils
F.i!W 1
Dépose ce bloc sur l'espace de travail, puis renomme-le : remplace pour faire
quelque chose par les deux tanks se touchent.
Attention
Pourquoi ne pas utiliser un verbe à l'infinitif mais un verbe conjugué pour
nommer ce bloc ? La raison est toute simple : comme nous sommes en train
de créer une fonction qui renvoie vrai ou faux, il faut trouver un nom qui ne
symbolise pas une action mais plutôt un état, qui sera soit vrai, soit faux.
Le premier bloc à utili ser dans notre fonction est si...faire que tu trouveras dans le
sous-menu Contrôles. Nous allons le transformer légèrement en un bloc si...faire...
sinon, en cliquant sur le petit engrenage en haut à gauche du bloc : prendre le
vi
Q) bloc sinon et le déposer sous le si, comme sur l'image suivante.
0
'-
>-
w
\D
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@ Transform ati on du bloc si ... faire... en si ... faire... sinon ...
Je t'inv ite d o nc à c réer t a cond itio n à l'a ide d es b locs sui va nts :
(/)
• position x du tank adverse v ia le sous- m enu Variables ;
Q)
0
'-
• v ia le sous- m enu Contrôles, cho isir le b loc = et le mod if ier v ia le m enu
>-
w déro ulant po ur o bte nir le b loc ~-
\D
T"-4
0 Voici à quo i d evrait ressembler t a co ndit io n :
N
@
.µ
..c
Ol
ï::
>-
~ position x du tank actif . Ill posrtion x du tank adverse [s-!Q?J[
Cl.
0
u
Code final de la condition
Si le test est vrai, alors les deu x tanks se touchent et nous devons renvoyer vrai .
À l'inverse, s'il est faux, alors les deux tanks ne se touchent pas et nous devons
renvoyer faux. Pour cela, nous allons créer une variable que nous appellerons
retour_ fonction et lui assigner la valeur vrai ou faux , selon le résultat du test.
Pour créer une nouvelle variable, choisis le bloc fixer élément à du sous-menu
Outils.
Contrôles
Actions
I• élément • lj: 1
Affectation . élément . J
Variables
Maths
- •11 1,1(-
Fonctions
Dans le m enu déroulant sous élément, cho isis Renommer la variable ... et donne- lui
so n nouveau nom ( retour fonction , par exempl e). Pui s, clipse ce bl oc fixer
retour fonction à dans le bloc faire . Nous avons besoin d'initialiser cette va riable
à vrai : pour cela, il ex ist e un bloc spéc ial dans le sous-m enu Contrôles qui s'a ppelle
vrai . Utilise-le po ur fi xe r la variable à vrai.
Nous procéderons de la même façon pour le cas où la variable doit être initialisée
à faux, m ais cette fois le bloc fixer retour_ fonction à ex ist e d éjà dans le sous-
menu Outils. La va leur faux s'obtient avec le bloc vrai, mais en c hangeant sa valeur
v ia le menu d éroulant.
vi
Q) Bravo, ta fonction est presq ue t erminée! Pour finir, il faut lui demander de retourner
0
'-
>- la variable retour_ fonction en clipsant la va riable retour_ fonction (disponible
w
\D dans le so us-menu Outils) e n ba s à droite d e ta fonction. Voici à quoi devrait
T"-4
0 ressembl er ta fonction :
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@ Code final de la détection de collision entre tanks
Mais ta fonction ne sert à rien pour l'instant, car elle n'est jamais utilisée! Or, le but
de cette fonction est de pouvoir détecter une collision avec le tank adverse, il faut
donc coder ce que ton jeu vidéo doit faire quand cette collision est détectée. Tu
as le choix, mais une possibilité souvent utilisée est de faire rebondir en arrière un
objet qui en percute un autre.
Pour coder ce rebond, il suffit de modifier les groupes de blocs Quand flèche
gauche appuyée et Quand flèche droite appuyée, en ajoutant un test de collision
à la fin : s'il y a collision, alors on modifie la position horizontale du tank actif pour
le faire reculer brutalement, comme s'il rebondissait.
Effectue ces modifications sur les deux blocs, sachant que pour le bloc Quand
flèche gauche appuyée, il faut augmenter la position x du tank actif de 25 , alors
que pour le bloc Quand flèche droite appuyée , il faut diminu er la position x du
tank actif d e 25 . Tu auras beso in des blocs suivants, et n'oublie pas qu'il faut modi-
fi e r deux groupes de blocs:
• si...faire ;
Une fois tes modifications terminées et testées, tu d evrai s obtenir quelque chose
(/)
Q) qui resse mble à cela :
0
'-
>-
w
\D
r-4
0
N
@
.µ
..c
Ol
ï:::
>
Cl.
0
u
La vie n'est pas toujours facile pour un obus: à peine touche-t-il le sol qu'il explose!
Mais pour l'instant, ce n'est pas le cas, et ta mission consiste à créer une nouvelle
fonction qui détectera la collision entre un obus et le sol. Là encore, il s'agit d'une
fonction qui renvoie vrai si la position verticale de l'obus dépasse le sol, ou faux
si l'obus n'a pas encore atteint le sol.
Deuxième fonction
Pour créer cette fonction, tu peux t'inspirer de la fonction les deux tanks se
touchent , et appliquer la même méthode en y apportant les modifications
suivantes :
Attention
L'.axe des y est orienté du haut vers le bas. Cela veut dire que le point le plus
haut de l'écran a une coordonnée y égale à O. La condition de ta fonction doit
donc être vraie si la position y de l'obus est supérieure à 275. En effet, pendant
vi
Q) sa course normale, la position y de l'obus est comprise entre 0 et 275. Aide -toi
0 du schéma suivant pour mieux comprendre.
'-
>-
w
\D
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
(/)
Q)
Détection de collision entre le sol et l'obus
0
'-
>-
w
\D
r-4
0
N Une fonction qui n'est pas appelée ne sert décidément à rien !
@
.µ
..c Fé li citations p o ur t a jo lie fon ctio n ! Mais comme tu l'as d éjà com p ri s,
Ol
ï:::
> il faut l'appeler d ans le cod e d e to n jeu pour qu'elle serve réellem ent à
Cl.
0
u que lqu e c hose . L'end ro it le plus ad apté est le g ro u pe d e blocs Quand
un obus est en mouvement : c'est g râce à ce g ro upe d e bl ocs qu'o n
a codé l'inf luence de la g ravité et d u ve nt. No us all o ns aj outer à ce
L'idéal serait que l'obus stoppe sa course quand la collision avec le sol est détectée,
puis qu'il disparaisse et soit remplacé par une animation d'explosion. Pour cela, tu
auras besoin des blocs suivants :
• si...faire ;
• Stopper l'obus ;
Avec tout ce que tu as réussi à faire jusqu'ici, cela ne devrait pas te poser de
problème. Mais, si tu as besoin d'aide, voici à quoi devrait ressembler le bloc de
code Quand un obus est en mouvement :
vi
Q)
0
'-
>-
w Jetons un coup d'œil au code généré automatiquement
\D
T"-4
0
N À la fin de ce chapitre 4, ton jeu vidéo est quand même bien plus abouti qu'au
@ début du cahier d'activités : les tanks ne passent plus au travers l'un de l'autre et
.µ
..c
Ol les obus explosent en touchant le sol.
ï:::
>-
Cl.
0 Si tu regardes le code généré, tu retrouveras facilement ce que tu as codé :
u
Vl
~
ëÀ
import math 0
w
<IJ
a_
::i
e
(.'.)
retour fonction None f)
@
Réca pitulon s :
Vl
<lJ
0 : o n utilise une bibliothèqu e ext erne, appelée math ( p our le ca lc ul d e la va leur
0
1....
ab so lue);
>-
w
l.D
.-t
e : d éfiniti o n d e la va ri abl e en t ant que va ri abl e glob ale, c 'est-à-dire utilisable
0
N
parto ut dans le cod e ;
@
.µ E) : d éfinition d e no tre fon ctio n de détectio n de colli sion avec le so l ;
..c
O'l
·;:::
>-
a.
0 : utili sati o n de la va riab le glo b ale;
u
0
e : conditio n (positio n y d e l'o bus plu s grande que la p os iti o n y du sol, d o nc
l'obus est en dessous du sol à ca use d e l'o rientati o n de l'axe des y ) ;
4D : condition (la va leur absolue de la différence des positions x des deux tanks
est inférieure à 100) ;
Et maintenant ?
vi
<lJ
0
1....
w
>-
l.D
.-t
0
N
@
.......
..c
O'l
·;::::
>-
a.
0
u
Vl
~
ëÀ
w
<))
o.
::i
2
(.'.)
@
0
'-
>-
w
\.0
r-l
0
0J
@
_,_,
..c
01
ï::::
>-
Cl.
0
u
Chapitre
Finalisation
Notions abordées
• Mise en place des règles du jeu
• Boucles
de tonjeu
• Nombres aléatoires
vidéo
10 • . .. ll!#l•.i§il
•
Au lancement du jeu
faire 1111••••
\D Bientôt la fin !
T"-4
0
N
@
.µ
..c
Ol
Dans ce chapitre, tu vas finaliser tonjeu vidéo, en apportant
ï::: toutes les petites touches finales dont il a besoin.
>-
Cl.
0
u
Vl
~
ëÀ
Tu as éno rmém ent appri s ju squ'ici, et ton jeu est presqu e t erminé. Mais il manque
w
<IJ
a_
::i
quelques petites c hoses po ur qu'il so it réellem ent « jouabl e »: comm e c'est un jeu
e
(.'.) pour d eux jo ueurs, il faudrait q ue c hacun d es joueurs puisse jo uer l'un après l'autre.
@
De plus, qui dit jeu v idéo dit« but à atteindre » : ici, nous allons décider que pour
gagner, il faut toucher le tank adverse avec un obus (ce qui est assez logique, tu
ne trouves pas ?)
Quoi de neuf ?
• No us allons mettre en place des tours de jeu : ainsi, d eux joue urs pour-
(/)
Q)
ront s'affronter, e n jo uant c hacun leur tour. Pour ce la, il suffit d e créer
0
'-
un compteur et, à chaque fois qu'il arrivera à zéro , il faudra c hanger de
>-
w tank actif. Avec ce syst èm e, tu ne pourras plus chang er le tank actif en
\D
T"-4
0 cliquant simpleme nt sur les tanks, comme tu as pu le faire dans les exer-
N
@ cices précéd ents.
.µ
..c
Ol
ï:::
>-
Cl.
Note
0 N'oublie pas de réinitialiser à 10 le compteur lorsque celui-ci atteint zéro !
u
• Enfin, il faudra informer les joueurs lorsque la partie est terminée : quand
un tank aura été détruit, il faudra afficher un message précisant qui est
le vainqueur.
Ce qui reste à faire te semble peut-être énorme, mais avec tout ce que tu as appris,
tu vas y arriver très rapidement. C'est parti !
Pour lancer le compteur en début de partie, il faut faire deux choses à chaque
lancement de partie.
• Puis lancer le compteur: sinon, il ne va jamais d esce ndre jusq u'à zéro.
Pour cela, je te lai sse travailler. Petit indice, il faudra que tu utilises les blocs
suiva nts:
~~li
Au lancement du jeu Initialiser le compteur à
~~~~~~~~~
Lancer compteur
La première chose à faire quand le compteur atteint zéro, c'est tout simplement
de lui réaffecter sa valeur d 'origine, pour qu'il recommence à compter. Pour que
les joueurs ne soient pas perdus, il vaut mieux lui affecter la même valeur que lors
du lancement du jeu, mais c'est à toi de décider !
La seconde chose à faire, c'est d'inverser le tank actif et le tank au repos : n'oublie
pas que le but de ce compteur est de mettre en place des tours de jeu alternés.
Pour réinitialiser le compteur et inverser les tanks actifs, tu vas avoir besoin de
ces blocs:
N'hés ite pas à tester, et tu verra s que ton j eu se rapproche de plus en plus d'un
«vrai » jeu vidéo ! Si tu as besoin d'aide, voici à quoi d ev rait ressembler la mi se e n
place des tours de jeu :
(/)
Q)
0
'-
>-
« Mais enfin, Dieu ne joue pas aux dés ! » (Albert Einstein)
w
\D
r-4 Toi aussi tu t'es déjà fait tremper par une averse alors que la mét éo de la veille
0
N
annonçait un soleil radi eux? Alors n'hés ite pas à introduire un peu de hasard dans
@
.µ
..c t o n jeu v idéo: il n'en sera qu e plus amusant à jouer.
Ol
ï::
>-
Cl.
Nous allon s c hanger aléatoirement la v itesse du vent, à c haque no uveau tour de
0
u jeu. Pour cela, tu vas devoir utili ser le nouveau bloc Affectation Initialiser le vent
à . Tu peux t'amuser à tester ce nouveau bloc, en lui passant en entrée une va leur
comprise e ntre 0 et 8. L'effet sur le vent sera celui décrit dans le tableau sui va nt.
0
Cl Vent très fort vers la gauche
6
m Vent fort vers la droite
7
lm Vent très fort vers la droite
8
a Absence de vent
Ce qui nous intéresse ici, ce n'est pas de choisir la force du vent, mais plutôt de lui
app liquer une va leur au hasard. Ce dernier peut être déterminé par le bloc Maths
entier aléatoire entre ... et
vi
Q)
Contrôles
Actions
Affectation
1: l+·C 1
0
'-
>- Variables ([]
w
1( racine carrée • C
\D
T"-4 Outils
0
N Fonctions
@
.µ
..c
Ol
ï:::
>-
Cl. Bloc de génération d'un nombre aléatoire
0
u
Vl
~
ëÀ
Les deux va leurs en entrée de ce bloc doivent absolument être o et a, pour que
w
<IJ
a_ seu les les va leurs du tableau précédent puissent être choisies au hasard.
::i
e
(.'.)
@
et
Tu vois qu'il faut utiliser trois blocs et : celui du milieu (le deuxième et listé
ci-dessus) prendra en paramètres les deux autres blocs et . Le bloc et de gauche
(le premier listé ci-dessus) permet de vérifier les deux conditions sur la position x
de l'obus et celui de droite, les deux conditions sur la position y de l'obus.
Au final, voici à quoi devrait ressembler les deux parties de cette condition, reliées
par un et :
polllon X de rcblla m pcMllllOn • du lm< - m ra CD position. de l'olllls m poalllon. «*! llnk •<MlrM m ra
,-
i
posltlon--;de l'obus - m -~ flll r position y de l'obus -m ~
vi
Q)
Partie droite de la condition
0
'-
>-
w Le reste de la fonction ne devrait pas te poser de problème majeur:
\D
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@ Détection de la collision entre un tank et un obus
Note
Pense bien à choisir les coordonnées x et y du tank adverse pour générer ton
explosion. Si tu utilises les coordonnées du tank actif (qui a tiré l'obus), ton
joueur risque de ne pas être content !
~ ]•"·'·@• ]•
l-1mmm1u11i1m1 1
Déclencher une explosion aux coordonnées x=
ety=
N'oublie pas de t est er : si t out va bien, tu devrais voir une exp losio n apparaître
quand un obus touche le tank adverse !
(/)
Q) Game over
0
'-
>-
w Il ne te reste plus qu'à coder l'éc ran informant les joueurs que la partie est finie et
\D
r-4 donnant le nom du va inque ur.
0
N
@ Nous so mm es déjà capables de détecter quand un tank est touché par une
.µ
..c explosion : il suffit d'ajouter à ce bloc les instructions permettant d'afficher l'écran
Ol
·;::
>-
Q.
d'information de fin de partie.
0
u
Dernière subtilité à prendre en compte : le bloc Afficher l'écran de victoire
pour le tank n ° a besoin qu'on lui passe en paramètre le numéro du tank qui a
gagné. Il faut donc récupérer le numéro du tank adverse (c'est forcément le tank
À toi de jouer : assemble les derniers blocs de code te permettant d'afficher cet
écran de fin de partie.
N'oublie pas de tester! Si jamais tu as des soucis avec cette dernière modification,
voici à quoi devrait ressembler ton code :
vi
Q)
0
'-
>-
w
\D
T"-4
0
N
@
.µ
..c
Mise en place de la détection de fin de partie
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
Voici le code généré en Python avec les modifications que tu viens d'apporter :
import math
import random
(/)
Q)
0 : cette condition est la plus lo ng ue que tu auras cod ée d ans ce ca hier d 'ac-
vi tiv ités ! Avec tro is et imbriqués, pas fac il e de ne pas se trompe r. Si tu es
<lJ
0
1....
suffisa mme nt attentif et à l'a ise avec les prio rités m athém atiques, tu verras
>-
w que Python utilise un syst è m e d e pri o rité po ur faire l'écono mi e de quelques
l.D
.-t
0
pa renthèses ;
N
@ f) : utili sati o n de t a no uvell e fonc tio n d e dét ectio n d e co lli sio n ;
.......
..c
O'l
·;:::: E) : récupé ratio n du numéro du t ank adver se ;
>-
a.
u
0
C) : affi c hage de la ba nni ère d e v ictoire po ur le t ank va inqu eur;
Vl
~
ë
w
À
<))
e : qu and le com pt eur arri ve à zéro, il est te mps d e gérer le change m ent de t o ur ;
o.
::i
2 0 : réiniti ali satio n du co mpteur ;
(.'.)
@
Et maintenant ?
Tu peux te reposer un peu et profiter d e ton jeu vidéo ! Et pourquoi pas le partager
sur Inte rnet avec tes amis ou ta famille ? Pour cela, clique sur l'icône de partage
en haut à droite d e la page.
lit' K1dscod.in
0 Affectation
Variabies
Maths
Outils
Bouton de partage
d9f lot»M IO!Jcn._un_tankQ
•
globalr«ourlonctoon
ll(O~IX()o~Tan.U() ~ 20•1'1CtOMWMpotllX0>•
~~rankX(l - xtanc1~,,,_,,vo<• 2ts...:iprwupon1vo
>• 240).
.-...
'*.OWIOC'lttiOt'l • Tr.-
el H .
'9tour_!onctlon • F•M
0 ton c ho ix. En c liquant sur cette URL, tes am is pourront tester ton j eu v idéo, sans
'-
>-
w le modifier. À toi de leu r montrer ce que tu es ca pable de faire!
\D
T"-4
0
N
@
.µ
..c
Ol
·;::
>-
Cl.
0
u
acYler
Notion abordée
• Mise en place de codes de
triche
des codes
de triche
10
(/)
Q)
0
'-
>-
w
\D
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Si un développeur veut tester son écran Jeu terminé, penses-tu qu'il ait envie de finir
le jeu à chaque fois? En général, pour tester son écran de fin sans attendre, il préfé-
rera cacher un code dans le jeu qui lui permet de terminer le jeu instantanément.
Dans cet ultime chapitre, nous allons voir quels codes de triche tu pourrais mettre
en place, soit pour t'aider à modifier ton jeu, soit pour faire des blagues à tes
adversaires.
Quoi de neuf ?
Rappel
0 correspond à l'extrémité gauche de l'écran, et 550 correspond à l'extrémité droite de l'écran.
Je t'encourage à t est e r ton no u vea u cod e : il peut être très utile pour rend re fou
t o n adversa ire !
Tu tro u ve ras d ans le t ablea u sui va nt une list e de q uelq ues cod es de tric he q ue tu
vi
Q) po urrais t est er. La m étho de sera t o uj ours la m ême: le cod e de tric he sera d éclenché
0
'-
>- par l'a ppui sur la t o uche Entrée. Li b re à t o i d e c ho isir t o n cod e d e tric he, sachant
w
\D q ue rie n n'inte rdit d'en c umuler p lusie urs à la suite ...
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
Fais travailler ton imagination, n'oublie pas que tu peu x créer des
fonctions pour enchaîner des actions élémentaires. Tu p eux donc
imagine r des codes de triche beaucoup plus évolués que ceux décrits
ici. Alors, n'hésite pas !
Pour partager ton jeu vidéo modifié, pense à cliquer sur l'icône de
partage en haut à droite.
C'est fini?
Tu as acquis les bases qui te permettront d'aller plus loin dans l'apprentissage de
la programmation et tu peux t 'a ttaquer à la conception d'un jeu plus évo lué si tu
le souhaites .
Le langage Python est un outil formidable pour continuer sur ta lancée: en t'aidant
du module pygame ( http://pygame.org/) et de ce que tu as appris, tu as en mains tout
ce qu'il te f aut pour programmer des m erveilles!
vi
Q)
0
'-
>-
w
\D
T"-4
0
N
@
.µ
..c
Ol
ï:::
>-
Cl.
0
u
Vl
~
ëÀ
w
<IJ
a_
::i
e
(.'.)
@
B
bloc comparaison 15 icône force du vent 28
bloc nombre 15
blocs de code disponibles 11 M
catégories 20
boucle 47 moteur physique 27
bouton
Démarrer 11 N
rouge 19
nombre aléatoire 47
c p
code de triche 59
code généré 11 pavé directionnel 12
comparateur 15 pixel 14
compteur de temps 48, 49, 57 position x 14. 15, 40
condition 9, 15 Python 11
D R
détection de collision 35, 36 règles du jeu 47
E s
encoche sur les blocs de code 13 scène 11
environnement de développement 10 sprite 13
blocs de code disponibles 11 apparition et disparition 19
code généré 11 d'explosion 35
Quatre zones 10
scène 11 T
environnement de travail 9
explosion 43 test 9
touche 44, 57
F tour de jeu 49
fonction 35, 36 V
créer 36
utiliser 40 valeur 14
variable 15
vitesse 30
horizontale 29
verticale 29