Mon dernier essai sur Pygame a pour but de réaliser un mini jeu de maniement de la souris pour des enfants de maternelles.
Le jeu contient une image d'arrière-plan contenant des rectangles bleus et des ronds rouges sur fond blanc. L'image est réalisée avec Gimp.
Le curseur de la souris est représenté par un nounours en position statique et neutre.
Quand l'enfant passe sur les parties blanches, c'est ce curseur qui apparaît.
Quand l'enfant passe la souris dans un rectangle bleu (sans cliquer), le curseur présente le nounours tout heureux (image fixe en png).
Quand l'enfant passe la souris dans un rond rouge, toujours le nounours, mais tout triste (troisième image fixe).
Jusque-là, tout se passe bien et je suis assez satisfaite de mon code.
Ensuite, je souhaite donner le choix entre 2 images d'arrière-plan, composées chacune de rectangles bleus et de ronds rouges sur fond blanc disposés différemment.
Lorsque l'on ouvre le jeu, l'écran présente les 2 arrière-plans en réduction. En dessous, les chiffres 1 et 2 sont inscrits pour indiquer quelle touche du pavé numérique activer. Bref, je propose 2 niveaux !
Je parviens à ce que l'écran affiche le bon arrière-plan quand on appuis sur la touche 1 ou 2 mais dès que la souris bouge (ce qui est pourtant le but du jeu), l'écran d'accueil revient !
Je ne parviens pas à conserver le choix du niveau et à continuer le jeu.
Voici mon code:
#!/usr/bin/ env python
# -*- coding: utf-8 -*-
# définit les images choisies pour l'arrière-plan et la souris
image_arriereplan = 'arriereplan.png'
image_arriereplan1 = 'arriereplan_rouge_bleu.png'
image_arriereplan2 = 'arriereplan_rouge_bleu2.png'
image_souris1 = 'miks_static.png'
image_souris2 = 'miks_smackup2.png'
image_souris3 = 'miks_roll2.png'
def rendu_miks():
# définit la position de la souris
x, y = pygame.mouse.get_pos()
# échantillonne la couleur
couleur_ecran = screen.get_at((x, y))
if couleur_ecran == (0, 0, 255, 255):
x-= souris2.get_width() / 2
y-= souris2.get_height() / 2
screen.blit(souris2, (x,y))
elif couleur_ecran == (255, 0, 0, 255):
x-= souris3.get_width() / 2
y-= souris3.get_height() / 2
screen.blit(souris3, (x,y))
else:
x-= souris1.get_width() / 2
y-= souris1.get_height() / 2
screen.blit(souris1, (x,y))
# importe la bibliothèque Pygame
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
# définit la taille de la fenêtre et son titre
screen = pygame.display.set_mode((800, 600), 0, 32)
pygame.display.set_caption("Miks aime le bleu")
# charge les images
arriereplan = pygame.image.load(image_arriereplan).convert()
arriereplan1 = pygame.image.load(image_arriereplan1).convert()
arriereplan2 = pygame.image.load(image_arriereplan2).convert()
souris1 = pygame.image.load(image_souris1).convert_alpha()
souris2 = pygame.image.load(image_souris2).convert_alpha()
souris3 = pygame.image.load(image_souris3).convert_alpha()
while True:
# pour fermer la fenêtre
for event in pygame.event.get():
if event.type == QUIT:
exit()
screen.blit(arriereplan, (0, 0))
rendu_miks()
# affiche l'image d'arrière-plan
if event.type == KEYDOWN:
if event.key == K_KP1:
screen.blit(arriereplan1, (0, 0))
rendu_miks()
elif event.key == K_KP2:
screen.blit(arriereplan2, (0, 0))
rendu_miks()
else:
screen.blit(arriereplan, (0, 0))
rendu_miks()
if event.type == KEYUP:
if event.key == K_KP1:
screen.blit(arriereplan1, (0, 0))
rendu_miks()
elif event.key == K_KP2:
screen.blit(arriereplan2, (0, 0))
rendu_miks()
else:
screen.blit(arriereplan, (0, 0))
rendu_miks()
pygame.display.update()