Aller au contenu

Contrôllez votre joueur en Pygame

Créez un vrai joueur contrôlable au clavier et apprenez à gérer ses déplacements proprement en Pygame.


Représenter le joueur

On va représenter le joueur par un simple rectangle.

On a donc besoin de deux infos :

  • sa position (x, y)
  • sa taille (largeur, hauteur)

Exemple :

player_rect = pygame.Rect(100, 100, 50, 50)

Déplacer le joueur au clavier

Pour lire le clavier en continu, on utilise :

keys = pygame.key.get_pressed()

Puis on teste certaines touches :

if keys[pygame.K_LEFT]:
    player_rect.x -= 5

Ici, 5 est la vitesse : le joueur avance de 5 pixels par frame.


Exemple complet : un joueur qui bouge

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Le joueur")
clock = pygame.time.Clock()

player_rect = pygame.Rect(100, 100, 50, 50)
speed = 5

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 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

    screen.fill((30, 30, 30))
    pygame.draw.rect(screen, (0, 200, 255), player_rect)
    pygame.display.flip()

pygame.quit()

Testez ça. Vous avez maintenant un personnage (un carré) contrôlé au clavier.

player move
Un joueur controllé par les flèches

Ne pas sortir de l’écran

Pour éviter que le joueur sorte de la fenêtre, on peut limiter sa position.

La fenêtre fait 800x600, donc :

  • x doit rester entre 0 et 800 - largeur
  • y doit rester entre 0 et 600 - hauteur
if player_rect.x < 0:
    player_rect.x = 0
if player_rect.x > 800 - player_rect.width:
    player_rect.x = 800 - player_rect.width

if player_rect.y < 0:
    player_rect.y = 0
if player_rect.y > 600 - player_rect.height:
    player_rect.y = 600 - player_rect.height

On peut aussi faire plus simple avec une méthode déjà incluse :

player_rect.clamp_ip(screen.get_rect())

clamp_ip remet le rectangle à l’intérieur d’un autre rectangle (ici, l’écran).

On garde cette version “magique” pour plus tard. Pour l’instant, comprendre la version avec les if est plus important.


Quizz

keys = pygame.key.get_pressed()

if keys[pygame.K_UP]:
    player_rect.y += 5
Que fait ce code quand on appuie sur la flèche du haut ?
- Le joueur monte
- *Le joueur descend
- Le joueur va à droite
- Le joueur ne bouge pas
> Question piège ! En Pygame, l’axe y augmente vers le bas. Donc `y += 5` fait descendre.

Exercice pratique

Codez un programme Pygame avec un joueur rectangle qui :

  1. Bouge avec les flèches du clavier
  2. Ne peut pas sortir de l’écran
  3. A une vitesse stockée dans une variable speed
  4. Change de couleur si on maintient la touche espace

Indice : pour savoir si espace est maintenu :

keys[pygame.K_SPACE]

En résumé

Vous savez maintenant :

  • Représenter un joueur avec un pygame.Rect
  • Lire le clavier en continu avec pygame.key.get_pressed()
  • Déplacer un objet en modifiant x et y
  • Comprendre le repère écran (y vers le bas)
  • Empêcher le joueur de sortir de la fenêtre

Dans la prochaine page, on va rajouter un truc essentiel : des objets à éviter… donc des collisions.