Compléter la configuration du jeu et la boucle principale
Maintenant, nous allons terminer la configuration du jeu et créer la boucle principale du jeu, où toute la logique et les interactions du jeu auront lieu.
#... (code de l'étape 4)
def main(winstyle=0):
#... (code précédent)
## décorer la fenêtre du jeu
icone = pg.transform.scale(Alien.images[0], (32, 32))
pg.display.set_icon(icone)
pg.display.set_caption("Pygame Aliens")
pg.mouse.set_visible(0)
## créer l'arrière-plan, tiler l'image d'arrière-plan
bgdtile = load_image("background.gif")
fond = pg.Surface(SCREENRECT.size)
for x in range(0, SCREENRECT.width, bgdtile.get_width()):
fond.blit(bgdtile, (x, 0))
ecran.blit(fond, (0, 0))
pg.display.flip()
## charger les effets sonores
son_boom = load_sound("boom.wav")
son_tir = load_sound("car_door.wav")
if pg.mixer:
musique = os.path.join(main_dir, "data", "house_lo.wav")
pg.mixer.music.load(musique)
pg.mixer.music.play(-1)
## Initialiser les groupes de jeu
aliens = pg.sprite.Group()
tirs = pg.sprite.Group()
bombes = pg.sprite.Group()
tout = pg.sprite.RenderUpdates()
dernier_alien = pg.sprite.GroupSingle()
## Créer quelques valeurs de départ
recharge_alien = ALIEN_RELOAD
horloge = pg.time.Clock()
## initialiser nos sprites de départ
global SCORE
joueur = Joueur(tout)
Alien(
aliens, tout, dernier_alien
) ## note, cela 'vit' car il entre dans un groupe de sprites
if pg.font:
tout.add(Score(tout))
## Exécuter notre boucle principale tant que le joueur est en vie.
while joueur.alive():
## obtenir les entrées
for event in pg.event.get():
if event.type == pg.QUIT:
return
if event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE:
return
if event.type == pg.KEYDOWN:
if event.key == pg.K_f:
if not plein_ecran:
print("Changement en mode PLEIN ECRAN")
sauvegarde_ecran = ecran.copy()
ecran = pg.display.set_mode(
SCREENRECT.size, winstyle | pg.FULLSCREEN, meilleure_profondeur
)
ecran.blit(sauvegarde_ecran, (0, 0))
else:
print("Changement en mode fenêtré")
sauvegarde_ecran = ecran.copy()
ecran = pg.display.set_mode(
SCREENRECT.size, winstyle, meilleure_profondeur
)
ecran.blit(sauvegarde_ecran, (0, 0))
pg.display.flip()
plein_ecran = not plein_ecran
etat_touches = pg.key.get_pressed()
## effacer/détruire les sprites dessinés précédemment
tout.clear(ecran, fond)
## mettre à jour tous les sprites
tout.update()
## gérer l'entrée du joueur
direction = etat_touches[pg.K_RIGHT] - etat_touches[pg.K_LEFT]
joueur.se_deplacer(direction)
tirer = etat_touches[pg.K_SPACE]
if not joueur.recharge and tirer and len(tirs) < MAX_SHOTS:
Tir(joueur.position_armure(), tirs, tout)
if pg.mixer and son_tir is not None:
son_tir.play()
joueur.recharge = tirer
## Créer un nouvel alien
if recharge_alien:
recharge_alien = recharge_alien - 1
elif not int(random.random() * ALIEN_ODDS):
Alien(aliens, tout, dernier_alien)
recharge_alien = ALIEN_RELOAD
## Lâcher des bombes
if dernier_alien and not int(random.random() * BOMB_ODDS):
Bombe(dernier_alien.sprite, tout, bombes, tout)
## Détecter les collisions entre les aliens et le joueur.
for alien in pg.sprite.spritecollide(joueur, aliens, 1):
if pg.mixer and son_boom is not None:
son_boom.play()
Explosion(alien, tout)
Explosion(joueur, tout)
SCORE = SCORE + 1
joueur.kill()
## Vérifier si les tirs touchent les aliens.
for alien in pg.sprite.groupcollide(aliens, tirs, 1, 1).keys():
if pg.mixer and son_boom is not None:
son_boom.play()
Explosion(alien, tout)
SCORE = SCORE + 1
## Vérifier si les bombes des aliens touchent le joueur.
for bombe in pg.sprite.spritecollide(joueur, bombes, 1):
if pg.mixer and son_boom is not None:
son_boom.play()
Explosion(joueur, tout)
Explosion(bombe, tout)
joueur.kill()
## dessiner la scène
sale = tout.draw(ecran)
pg.display.update(sale)
## limiter le taux de rafraîchissement à 40fps. Également appelé 40HZ ou 40 fois par seconde.
horloge.tick(40)
if pg.mixer:
pg.mixer.music.fadeout(1000)
pg.time.wait(1000)
## appeler la fonction "main" si on exécute ce script
if __name__ == "__main__":
main()
pg.quit()
Dans la fonction principale, nous initialisons les groupes de jeu pour diverses entités, créons des valeurs de départ et mettons en œuvre la boucle principale du jeu. La logique du jeu, la gestion de l'entrée du joueur, les collisions et le dessin de la scène du jeu sont effectués dans cette boucle.
Exécution du jeu
Maintenant, nous pouvons exécuter le jeu en exécutant la commande suivante :
cd ~/projet
python aliens.py