oujood.com

Comment bouger une image avec les touches du clavier

Tutoriel pour apprendre comment manipuler des image en, pygame en utilisant les touches du clavier

Utilisation des touches fléchées (gauche, droite, haut, bas)

Pour utiliser les touches du clavier pour déplacer une image dans Pygame, vous pouvez ajouter une gestion des événements clavier à votre boucle principale. Voici comment vous pourriez le faire en modifiant votre code existant :

Exemple :       Copier le code

	import pygame
	from pygame.locals import *

	# Entrée des couleurs
	JAUNE = (255, 255, 0)
	BLEU = (0, 0, 255)

	# Initialiser le jeu GUI
	pygame.init()

	# Définir les dimensions de l'interface graphique du jeu
	largeur, hauteur = 640, 350
	écran = pygame.display.set_mode((largeur, hauteur))

	# Entrée de l'image
	img = pygame.image.load('old-logo.png')
	img.convert()

	# Dessiner un rectangle autour de l'image
	rect = img.get_rect()
	rect.center = largeur // 2, hauteur // 2

	# Définir les valeurs de fonctionnement et de déplacement
	en_cours = True
	en_mouvement = False

	# Définir la vitesse de déplacement de l'image
	vitesse = 5

	# Définir ce qui se passe lorsque le jeu est en cours d'exécution
	while en_cours:
		
		for event in pygame.event.get():
			if event.type == QUIT:
				en_cours = False
			elif event.type == MOUSEBUTTONDOWN:
				if rect.collidepoint(event.pos):
					en_mouvement = True
			elif event.type == MOUSEBUTTONUP:
				en_mouvement = False
			elif event.type == MOUSEMOTION and en_mouvement:
				rect.move_ip(event.rel)

			# Gestion des événements clavier
			elif event.type == KEYDOWN:
				if event.key == K_LEFT:
					rect.move_ip(-vitesse, 0)
				elif event.key == K_RIGHT:
					rect.move_ip(vitesse, 0)
				elif event.key == K_UP:
					rect.move_ip(0, -vitesse)
				elif event.key == K_DOWN:
					rect.move_ip(0, vitesse)

		# Définir la couleur de l'écran et afficher l'image sur l'écran
		écran.fill(JAUNE)
		écran.blit(img, rect)

		# Construire la bordure autour de l'image
		pygame.draw.rect(écran, BLEU, rect, 2)

		# Mettre à jour l'interface graphique pygame
		pygame.display.update()

	# Quitter le jeu GUI
	pygame.quit()

Dans ce code, j'ai repris le code du chapitre précédent et j'ai ajouté une section pour gérer les événements clavier (`KEYDOWN`). Les touches fléchées (gauche, droite, haut, bas) sont utilisées pour déplacer l'image dans la direction correspondante. Vous pouvez ajuster la vitesse de déplacement en modifiant la valeur de la variable `vitesse`.

Voici une autre version du code précédent, il s'agit de modifier le code de manière à ce que l'image continue de bouger tant que la touche fléchée est enfoncée et s'arrête lorsque la touche est relâchée, vous pouvez utiliser un dictionnaire pour suivre l'état actuel des touches du clavier. Voici le code modifié :

Exemple :       Copier le code

import pygame
from pygame.locals import *

# Entrée des couleurs
JAUNE = (255, 255, 0)
BLEU = (0, 0, 255)

# Initialiser le jeu GUI
pygame.init()

# Définir les dimensions de l'interface graphique du jeu
largeur, hauteur = 640, 350
écran = pygame.display.set_mode((largeur, hauteur))

# Entrée de l'image
img = pygame.image.load('old-logo.png')
img.convert()

# Dessiner un rectangle autour de l'image
rect = img.get_rect()
rect.center = largeur // 2, hauteur // 2

# Définir les valeurs de fonctionnement et de déplacement
en_cours = True
en_mouvement = False

# Définir la vitesse de déplacement de l'image
vitesse = 1

# Dictionnaire pour suivre l'état des touches du clavier
touches = {K_LEFT: False, K_RIGHT: False, K_UP: False, K_DOWN: False}

# Définir ce qui se passe lorsque le jeu est en cours d'exécution
while en_cours:
    
    for event in pygame.event.get():
        if event.type == QUIT:
            en_cours = False
        elif event.type == MOUSEBUTTONDOWN:
            if rect.collidepoint(event.pos):
                en_mouvement = True
        elif event.type == MOUSEBUTTONUP:
            en_mouvement = False
        elif event.type == MOUSEMOTION and en_mouvement:
            rect.move_ip(event.rel)

        # Gestion des événements clavier
        elif event.type == KEYDOWN:
            if event.key in touches:
                touches[event.key] = True
        elif event.type == KEYUP:
            if event.key in touches:
                touches[event.key] = False

    # Déplacer l'image en fonction des touches enfoncées
    if touches[K_LEFT] and rect.left > 0:
        rect.move_ip(-vitesse, 0)
    if touches[K_RIGHT] and rect.right < largeur:
        rect.move_ip(vitesse, 0)
    if touches[K_UP] and rect.top > 0:
        rect.move_ip(0, -vitesse)
    if touches[K_DOWN] and rect.bottom < hauteur:
        rect.move_ip(0, vitesse)

    # Définir la couleur de l'écran et afficher l'image sur l'écran
    écran.fill(JAUNE)
    écran.blit(img, rect)

    # Construire la bordure autour de l'image
    pygame.draw.rect(écran, BLEU, rect, 1)

    # Mettre à jour l'interface graphique pygame
    pygame.display.update()

# Quitter le jeu GUI
pygame.quit()

Dans ce code, le dictionnaire touches est utilisé pour suivre l'état des touches du clavier. Lorsque la touche est enfoncée, la valeur correspondante dans le dictionnaire est définie sur True, et lorsque la touche est relâchée, la valeur est définie sur False. Ensuite, le déplacement de l'image est effectué en fonction de l'état actuel de ces touches.

Pour ralentir le mouvement de l'image lorsque la touche est enfoncée, vous pouvez ajuster la vitesse de déplacement. Vous pouvez également utiliser la fonction pygame.time.Clock() pour contrôler la vitesse de la boucle principale du jeu.

Procéder comme suit :
1. definir la variable Clock en modifiant le code comme suit:

# Définir les valeurs de fonctionnement et de déplacement
en_cours = True
en_mouvement = False
clock = pygame.time.Clock()

Puis ajouter l'horloge (clock) pour contrôler la vitesse dans la boucle principale du jeu après pygame.display.update() comme suit :

	pygame.display.update()
    # Contrôler la vitesse de la boucle principale
    clock.tick(60)  # Limiter à 60 images par seconde (FPS).

La fonction clock.tick(60) limite le jeu à 60 images par seconde, ce qui permet de contrôler la vitesse globale du mouvement.


Voir aussi nos tutoriel :

display

Indique le type de boîte d'un élément devrait générer

fonction bin2hex, bin2hex

Convertit des données binaires en représentation hexadécimale

fonction substr_count, substr_count

Compte le nombre d'occurrences de segments dans une chaîne