Dans la phase suivante de mon jeu où la souris change en fonction de la couleur de l'arrière-plan, voici donc l'ajout de la fonction permettant d'afficher du texte pour les chiffres de la page d'accueil ainsi que pour afficher le score.
Celui-ci s'incrémente quand on passe sur du bleu et diminue quand on passe sur du rouge. Une autre fonction vérifie si le score atteint un minimum ou un maximum et affiche comme auparavant l'image de victoire ou de défaite.
J'ai divisé le score par 100 avant de l'afficher pour que les chiffres soient plus faciles à lire par des enfants de maternelles, mais il faut noter que les chiffres négatifs ne sont pas l'idéal pour eux. Une autre solution serait à trouver, ne serait-ce que mettre les chiffres négatifs en bordeaux, par exemple (on ne peut pas les mettre en rouge, bien sûr)
J'ai essayé de travaillé le plus possible avec les fonctions et de les limiter à des taches précises mais il y a sans doute des erreurs.
A noter qu'il faut changer le chemin des images dans la ligne
chemin pour que ça fonctionne chez vous. Vous ne vous appelez pas Doudoulolita, non ? 😉
#!/usr/bin/ env python
# -*- coding: utf-8 -*-
# importe la bibliothèque Pygame
import pygame
from pygame.locals import *
from sys import exit
import os.path
# indique le chemin des images
chemin = '/home/doudoulolita/Bureau/donnees/programmation/04_programmes_maternelles/'
# définit les images choisies pour l'arrière-plan et la souris sans le chemin de leur dossier
nom_image_arriereplan = 'arriereplan.png'
nom_image_arriereplan1 = 'arriereplan1.png'
nom_image_arriereplan2 = 'arriereplan2.png'
nom_image_victoire = 'tux_victoire.png'
nom_image_defaite = 'tux_defaite.png'
nom_image_souris1 = 'miks_static.png'
nom_image_souris2 = 'miks_smackup2.png'
nom_image_souris3 = 'miks_roll2.png'
# définit les images choisies pour l'arrière-plan et la souris avec le chemin du dossier
image_arriereplan = chemin + nom_image_arriereplan
image_arriereplan1 = chemin + nom_image_arriereplan1
image_arriereplan2 = chemin + nom_image_arriereplan2
image_victoire = chemin + nom_image_victoire
image_defaite = chemin + nom_image_defaite
image_souris1 = chemin + nom_image_souris1
image_souris2 = chemin + nom_image_souris2
image_souris3 = chemin + nom_image_souris3
# appelle la fonction horloge et le temps
clock = pygame.time.Clock()
temps = pygame.time.get_ticks()
temps2 = clock.get_time()
#initialise pygame
pygame.init()
# initialise les variables
i = 0
k = 0
score = 0
# définit la taille de la fenêtre
screen = pygame.display.set_mode((608, 472), 0, 32)
# donne le titre de la fenêtre
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()
victoire = pygame.image.load(image_victoire).convert()
defaite = pygame.image.load(image_defaite).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()
# récupère la largeur et la hauteur de l'image d'arrière-plan
largeur_arriereplan = arriereplan.get_width()
hauteur_arriereplan = arriereplan.get_height()
# divise et réduit la largeur et la hauteur d'arrière-plan
width = largeur_arriereplan/2-18
height = hauteur_arriereplan/2-12
# crée les vignettes de la page accueil
arriereplan1p = pygame.transform.scale(arriereplan1, (width, height))
arriereplan2p = pygame.transform.scale(arriereplan2, (width, height))
# définit les couleurs
bleu = (50, 100, 255, 255)
rouge = (255, 0, 0, 255)
vert = (0, 255, 0)
# indique les scores maximums et minimums
score_max = 3000
score_min = -3000
# fonction d'affichage de la souris suivant la couleur de l'arrière-plan
def rendu_miks():
""" k est la position dans le tableau initialisée à 0 """
k = 0
""" si la couleur est bleue, change k et donc l'image de la souris """
if couleur_ecran == bleu:
k = 1
""" si la couleur est rouge, change k et donc l'image de la souris """
elif couleur_ecran == rouge:
k = 2
""" affiche l'image de la souris """
screen.blit(souris_x[k], (x,y))
def imprime_texte(texte,x_texte):
""" affiche du texte à l'écran avec la police et la couleur choisie """
ma_police = pygame.font.SysFont("arial", 100)
surface_texte = ma_police.render(texte, True, vert)
screen.blit(surface_texte, (x_texte, height+(height/2)))
def accueil_jeu():
""" Définit les dimensions du rectangle de la page d'accueil """
Rect = (6, 16, largeur_arriereplan-12, height+12)
i = 0
""" remplit l'écran de blanc """
screen.fill((255,255,255))
""" crée un rectangle vert """
pygame.draw.rect(screen, vert, Rect, 0)
""" affiche successivement la première vignette et la deuxième sur la page d'accueil """
screen.blit(arriereplan1p, (10, 20))
screen.blit(arriereplan2p, ((width+24), 20))
""" affiche l'image de la souris """
k = 0
screen.blit(souris_x[k], (x,y))
def verifie_score():
""" affiche le score puis le temps dans la console """
print score
print temps
""" si le score dépasse le maximum, affiche l'image de la victoire """
if score > score_max:
screen.blit(victoire, (0, 0))
""" si le score est inférieur au minimum, affiche l'image de la défaite """
if score < score_min:
screen.blit(defaite, (0, 0))
while True:
# pour fermer la fenêtre
for event in pygame.event.get():
if event.type == QUIT:
exit()
# inscrémente le temps depuis le début du jeu
temps += 1
# récupère les touches pressées
touche_pressee = pygame.key.get_pressed()
#tableau des images pour l'arrière-plan
arriereplan_x = [arriereplan, arriereplan1, arriereplan2]
# choisit l'image d'arrière-plan selon la touche
if touche_pressee[K_KP1]:
i = 1
elif touche_pressee[K_KP2]:
i = 2
elif touche_pressee[K_KP0]:
i = 0
# affiche l'arrière-plan en fonction de la touche pressée, connue grâce à la variable i
screen.blit(arriereplan_x[i], (0, 0))
# définit la position de la souris
x, y = pygame.mouse.get_pos()
# échantillonne la couleur que survole la souris
couleur_ecran = screen.get_at((x, y))
# tableau des images utilisées pour la souris
souris_x = [souris1, souris2, souris3]
# Place le curseur de la souris au centre de l'image
x-= souris_x[k].get_width() / 2
y-= souris_x[k].get_height() / 2
# Si on presse la touche 0
if i == 0:
# appelle la fonction qui affiche la page d'accueil
accueil_jeu()
# affiche les chiffres 1 puis 2 grâce à al fonction d'affichage de texte
imprime_texte("1", width-(width/2))
imprime_texte("2", width+(width/2))
# si la touche 1 ou la touche 2 sont pressés
elif i == 1 or i == 2:
# si la couleur est bleue, on ajoute 1 au score
if couleur_ecran == bleu:
score +=1
# si la couleur est rouge, on ote 1 au score
if couleur_ecran == rouge:
score -=1
# appelle la fonction d'affichage l'image de la souris
rendu_miks()
# appelle la fonction de vérification du score
verifie_score()
# divise le score par 100 pour des chiffres plus petits et un changement moins rapide
score2 = score/100
# transforme le chiffre du score en texte à afficher
texte_score = str(score2)
# affiche le score sur l'écran grâce à la fonction d'affichage de texte
imprime_texte(texte_score,(largeur_arriereplan-150))
# réactualise l'affichage
pygame.display.flip()
Il y a encore du chemin à faire, car lorsque l'on revient à la page d'accueil en appuyant sur 0 (pavé numérique), le score est toujours là où il en était, il ne se remet pas à 0 automatiquement. :/
D'autre part, je ne suis pas sûre que l'on ait besoin ici de calculer le temps. Je l'ai laissé dans le code car à un moment, je basais le score dessus, mais j'ai changé ça dans cette version du jeu.
Je rappelle qu'étant débutante, je ne prétends pas que mon code soit parfait, loin de là, mais s'il peut aider un tant soit peu quelqu'un d'autre que moi à progresser grâce aux commentaires du code et aux interventions de mon ami Tshirtman, ce serait bien ! De toute façon, moi, je peux progresser grâce à ce forum, donc ça n'est pas inutile ! :cool:
Si on veut rendre le jeu plus intéressant pour les petits joueurs, on peut leur faire faire des fonds beaucoup plus complexes, que l'on intégrera plus tard dans le jeu (il faut bien sûr les renommer) :
- utiliser de l'herbe avec la baguette magique de Tuxpaint pour cacher un peu les bords des traits rouges et bleus
- ajouter d'autres formes faites avec d'autres couleurs
- ajouter des tampons (ne contenant ni rouge, ni bleu)