Aller au contenu

Rendre le jeu complet

Pour l’instant, votre jeu fonctionne… mais il ressemble encore à un prototype. On peut jouer, mais il manque des choses essentielles :

  • savoir quand la partie commence
  • savoir quand elle se termine
  • pouvoir rejouer

Dans cette page, on va transformer votre programme en un vrai jeu complet.


Un jeu n’est pas toujours en train de jouer

Jusqu’ici, votre jeu était toujours dans le même état : le jeu tourne.

En réalité, un jeu a souvent plusieurs états :

  • un menu (ou un écran de départ)
  • la partie en cours
  • un écran de fin (game over)

On va gérer ça avec une simple variable.


La variable d’état

On crée une variable state :

state = "playing"

Par exemple, on pourra utiliser :

  • "playing"
  • "game_over"

Adapter la boucle de jeu à l’état

Dans la boucle principale, on ne fait pas la même chose selon l’état.

if state == "playing":
    # logique du jeu
elif state == "game_over":
    # écran de fin

C’est la même boucle, mais avec des comportements différents.


Détecter la fin de la partie

Reprenons le cas classique : une collision avec un obstacle.

Avant, on faisait par exemple :

if player_rect.colliderect(enemy_rect):
    print("Collision")

Maintenant, on va dire que la partie est terminée :

if player_rect.colliderect(enemy_rect):
    state = "game_over"

À partir de là, on ne met plus à jour le joueur.


Afficher un écran de fin

Dans l’état game_over, on peut afficher un écran différent :

if state == "game_over":
    screen.fill((10, 10, 10))

Plus tard, on y ajoutera du texte, mais pour l’instant, un fond différent suffit.


Rejouer une partie

Pour rejouer, il faut :

  • remettre le joueur à sa position de départ
  • relancer le jeu

On peut créer une fonction de reset :

def reset_game():
    player_rect.x = 100
    player_rect.y = 100

Puis écouter une touche :

keys = pygame.key.get_pressed()
if keys[pygame.K_r]:
    reset_game()
    state = "playing"

Exemple complet : jeu avec game over et restart

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

player_rect = pygame.Rect(100, 100, 50, 50)
enemy_rect = pygame.Rect(400, 250, 80, 80)

speed = 5
state = "playing"

running = True
while running:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()

    if state == "playing":
        if keys[pygame.K_LEFT]:
            player_rect.x -= speed
        if keys[pygame.K_RIGHT]:
            player_rect.x += speed
        if keys[pygame.K_UP]:
            player_rect.y -= speed
        if keys[pygame.K_DOWN]:
            player_rect.y += speed

        if player_rect.colliderect(enemy_rect):
            state = "game_over"

    elif state == "game_over":
        if keys[pygame.K_r]:
            player_rect.x = 100
            player_rect.y = 100
            state = "playing"

    screen.fill((30, 30, 30))

    pygame.draw.rect(screen, (0, 200, 255), player_rect)
    pygame.draw.rect(screen, (255, 80, 80), enemy_rect)

    pygame.display.flip()

pygame.quit()

Ce jeu :

  • peut être perdu
  • affiche un état différent
  • peut être relancé en appuyant sur R

C’est officiellement un jeu complet.


Quizz

state = "game_over"

if state == "playing":
    print("Jeu en cours")
elif state == "game_over":
    print("Fin de partie")
Qu’affiche ce programme ?
- Jeu en cours
- *Fin de partie
- Rien
- Une erreur
> Oui j'avais pas d'idées pour le quizz mdr

Exercice pratique

Améliorez votre jeu précédent pour :

  1. Ajouter un état game_over
  2. Arrêter le gameplay quand le joueur perd
  3. Afficher un écran de fin (fond différent)
  4. Permettre de rejouer avec une touche
  5. Réinitialiser correctement la partie

Bonus :

  • Ajoutez un système de nombre de vies

En résumé

Vous savez maintenant :

  • Ce qu’est un état de jeu
  • Utiliser une variable pour gérer plusieurs phases
  • Détecter une fin de partie
  • Rejouer sans relancer le programme
  • Transformer un prototype en vrai jeu

Avec ça, votre jeu a un début, une fin, et une rejouabilité. C’est exactement ce qu’on attend d’un jeu, même très simple.