Une liste d’ennemis
Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 15 sur 39.
Un ennemi est maintenant un objet. Les deux autres ont encore besoin de leurs propres Rects et blits. Mets-les tous les trois dans une liste, comme le champ d’étoiles l’a fait avec ses étoiles, et deux petites boucles les parcourent tous :
enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]
for enemy in enemies:
enemy.update()Une liste peut être écrite élément par élément entre crochets, comme ici, ou construite avec append dans une boucle. Chaque ennemi qu’elle contient se déplace grâce à son propre Rect.
Ne mets chaque ennemi qu’une seule fois dans la liste. Un ennemi qui est aussi mis à jour séparément, en dehors de la boucle, se déplace deux fois à chaque image.
Défi
MoyenGarde les trois ennemis dans une seule liste.
- Crée
enemies, une liste de trois objets Enemy : red centré à(160, 100), green à(320, 100)et yellow à(480, 100). - Mets à jour chaque ennemi de la liste dans la boucle, puis dessine-les tous après le remplissage.
- Supprime
red_enemy, les Rect verts et jaunes, ainsi que leurs lignes.
Appuie sur « Jouer » : les trois ennemis tombent comme avant. Puis appuie sur « Vérifier ».
Essayez vous-même
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)
red_enemy = Enemy(red, 160, 100)
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
red_enemy.update()
for rect in (green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
red_enemy.draw(screen)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Toutes les leçons de Sprites et images
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents2Tourner, retourner, redimensionner
Faire pivoter autour du centreRegarder dans la direction du volRedimensionner une imagePivoter à partir de l’original5Collisions au pixel près
Les rectangles semblent injustesMasquesSprites au pixel prèsZones de collision circulaires3Les classes pour les objets du jeu
Votre première classeLes méthodesSelf est l’objetUne liste d’objetsDes objets avec des imagesUne liste d’ennemisUne sous-classe6Animation à partir de feuilles de sprites
Découper une feuille de spritesUn compteur de framesAnimer avec le tempsUne explosion à déclenchement uniqueEntraînez-vous par vous-même : Playground Pygame