N.B. Niveau : Première Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)
Dans le cadre des projets, si vous êtes intéressés par la création de jeux vidéo en 2D, il existe le module Pygame de Python.
Attention : le choix de ce type de projet demande un investissement initial important, et cela ne doit pas empiéter sur les autres disciplines...
Enregistrer le fichier au format png portant le nom vaisseau.png dans un dossier de vos documents où se trouveront tous les fichiers nécessaires au lancement du programme.
Chaque nouveau missile devra démarrer à la coordonnée x du vaisseau+12 pixels et y du vaisseau.
detecte_touches
: ajouter l'agorithme permettant d'ajouter les coordonnées du vaisseau dès que la touche espace est enfoncée.Si la touche espace (K_SPACE
) est enfoncée alors
ajouter à la liste missiles un nouveau missle
l'ajout d'un missile se fait par la l'instruction : missiles.append(pygame.Rect(rectangle_vaisseau.left+12,rectangle_vaisseau.top,6,16))
Au-dessus de la boucle principale, ajouter les lignes suivantes :
While True
aliens
. déclarer
la liste vide : aliens=list()
import random
.niveau(aliens,n)
qui génère une liste aléatoire contenant les coordonnées des rectangles.
niveau(aliens,1)
placer_aliens
, permettant de dessiner des rectangles aliens
missile.colliderect(alien)
aliens.remove(alien)
déclarer la fonction detecte_collision paramètres : missiles (list) et aliens (list) retourne rien les listes ont un effet de bord pour chaque missile dans la liste des missiles:
pour chaque alien dans la liste des aliens:
si le missile est en collision avec un alien:
retirer l'alien de la liste des aliens
retirer le missile de la liste des missiles
detecte_collision(missiles,aliens)
dans la boucle principale avant le placement des aliens dans de la fenêtre jeu.Il s'agit de placer une image avec la méthode blit
en utilisant les coordonnées rectangulaires des aliens.
Les coordonnées x et y vont définir l'emplacement du coin supérieur gauche de l'image, 31 la largeur et 24 la hauteur en pixels de l'image dans la fenêtre de jeu.
Le rectangle bleu est définit par le code pygame.Rect(x,y,31,24)
Les coordonnées des rectangles bleus de chaque alien définissent une "hitbox", pour détecter les colisions entre les missiles et les aliens dans la fonction detecte_collision
codée précédemment.
placer_aliens
comme suit :placer_aliens(aliens)
par placer_aliens(aliens,img_aliens)
niveau(aliens,n)
afin de créer 3 rangées de 6 aliens dans le jeu lorsque n=2
.
Le pas de l'espacement horizontal et vertical est de 50 pixels.Algorithme :
définir la fonction niveau(aliens,n):
.... code actuel à garder puis à compléter par : ...
si n = 2 alors
pour y variant de 100 à 250 avec un pas de 50
pour x variant de 75 à 300 avec un pas de 50
ajouter à la liste des aliens les coordonnées du rectangle (x,y,31,24)
niveau(aliens,1)
par niveau(aliens,2)
invader1 : invader2 :
img_aliens
dans la section déclaration des variables, afin que img_aliens
soit une liste contenant
deux images :invader1.png
et invader2.png
On va alterner les images de la liste img_aliens
en fonction du temps.
Dans la boucle principale l'appel de la fonction placer_aliens(aliens,img_aliens)
sera remplacée par le code suivant :
A chaque tour de boucle (while True
) la variable i
sera incrémentée 30 fois par secondes (si clock.tick=30
).
En divisant i
par 15 puis en calculant le reste de la division par 2, le résultat sera égal à 0 pendant les 15 premières itérations puis à 1 pendant
les 15 itérations suivantes et ainsi de suite. Ce qui permettra d'afficher img_aliens[0] ou img_aliens[1] toutes les 0.5 secondes.
i=0
en début de programme, dans la section déclaration des variables.On peut aussi se poser la question de la valeur maximale que pourra predre i
lorsqu'on joue longtemps. Serait-il prudent de la remettre à zéro de temps en temps ou pas ?
Il suffit de changer les coordonnées x pour un déplacement horizontal (alien.left
) et y pour un déplacement vertical (alien.top
) de chaque rectangle d'alien
vitesse_aliens = 1
définir la fonction deplace_aliens Paramètres : aliens (list), x (int), y(int) permet de déplacer horizontalement(x) ou verticalement (y) les aliens pour chaque alien dans la liste des aliens
ajouter à la coordonnée gauche de l'alien la valeur de x
ajouter à la coordonnée haute de l'alien la valeur de y
deplace_aliens(aliens,vitesse_aliens,0)
Lorsque l'abscisse les coordonnées d'un alien sera > 440 ou < 10 on change le sens de déplacement des aliens
définir la fonction change_sens_aliens paramètres : vitesse, un entier positif ou négatif retourne la nouvelle vitesse, un entier positif ou négatif qui dépend de la position des aliens pour chaque alien dans la liste des aliens: si la coordonnée droite de l'alien > 440 ou si la coordonnée gauche de l'alien < 10 vitesse=-vitesse déplace tous les aliens 0 pixels horizontalement et de 10 pixels vers le bas retourne vitesse retourne vitesse
pygame.display.update()
, la variable vitesse_aliens
sera mise à jour avec le retour de cette fonction missiles_aliens=list()
tps_tir_alien = i + random.randint(15,60)
si tps_tir_alien <= i et nombre d'aliens > 0 alors
tps_tir_alien ← i + random.randint(15,60)
ajouter dans la liste des missiles_aliens ce que retourne la fonction ajouter_tir_alien
ajouter_tir_alien
se code de la manière suivante :deplace_missiles_aliens
inspirée de deplace_missiles
permettant de déplacer les missiles des aliens vers le bas et les supprimer si leur ordonnée y dépasse 500 pixels.Lorsque votre projet est terminé, compresser votre dossier jeu contenant tous les fichiers : code python + images ...
Attention, ne m'envoyez pas un
programme copié sur Internet avec des classes ... ni un programme que
vous ne maîtrisez pas. Il faudra le présenter et expliquer le programme à l'oral.
Fond : Texte : Tables : Thème du langage:
Contenu sous licence CC BY-NC-SA 3.0
Pascal Hassenforder 28/12/2020
Mise à jour du 01/01/2023