Created
April 12, 2020 16:10
-
-
Save GravenilvecTV/6fdd30619a554c4c14877c97c7e7f99e to your computer and use it in GitHub Desktop.
Correction TP 24/30 -
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from panier import Panier # on importe le composant panier | |
from oeuf import OeufChocolat # on import la classe oeuf chocolat | |
import pygame # utiliser le module pygame pour faire des jeux avec python | |
pygame.init() # charger les composants | |
# definir les dimentions | |
largeur = 800 | |
hauteur = 480 | |
# creer la fenetre avec pygame | |
fenetre = pygame.display.set_mode((largeur, hauteur)) # on definit la taille | |
pygame.display.set_caption("Chasse aux oeufs") # on definit un titre | |
pygame.display.set_icon(pygame.image.load('assets/panier.png')) | |
# maintenir la fenetre du jeu en eveil pour pas qu'elle se ferme | |
running = True | |
fond = pygame.image.load('assets/fond.jpg') # charger l'image de l'arrière plan | |
sol = pygame.image.load('assets/sol.png') # charger l'image du sol | |
# charger la barre de chocolat | |
bar_chocolat = pygame.image.load('assets/chocolate.png') | |
# redimentionner | |
bar_chocolat = pygame.transform.scale(bar_chocolat, (60, 60)) | |
# créer un dictionnaire qui va contenir en temps reel les touches enclenchées par le joueur | |
touches_active = {} | |
# créer le panier du joueur | |
panier = Panier(largeur, hauteur) | |
# créer la couleur | |
chocolat_couleur = (87, 64, 53) | |
# créer un groupe qui va contenir plusieurs oeufs en chocolat | |
oeufs = pygame.sprite.Group() | |
oeufs.add(OeufChocolat(largeur, hauteur, panier)) | |
oeufs.add(OeufChocolat(largeur, hauteur, panier)) | |
# tant que la fenetre est active, on boucle des instructions à chaque fois | |
while running: | |
# actualiser toutes les images qui sont sur le jeu | |
fenetre.blit(fond, (0, 0)) | |
oeufs.draw(fenetre) | |
fenetre.blit(panier.image, panier.rect) | |
fenetre.blit(sol, (0, 0)) | |
largeur_chocolat = panier.points * 3 - 20 | |
# dessiner l'arriere de la jauge | |
pygame.draw.rect(fenetre, (128, 128, 128), [10, hauteur - 50, largeur - 20, 32] ) | |
pygame.draw.rect(fenetre, chocolat_couleur, [10, hauteur - 50, largeur_chocolat, 32] ) | |
# on place la bar de chocolat | |
fenetre.blit(bar_chocolat, (largeur_chocolat - bar_chocolat.get_width() / 2, 420)) | |
# recupere tout les oeufs depuis mon groupe de sprite | |
for oeuf in oeufs: | |
oeuf.gravite() | |
# detecter quelle est la touche active par le joueur | |
if touches_active.get(pygame.K_RIGHT): # si la touche droite est active | |
panier.deplacement_droite() | |
elif touches_active.get(pygame.K_LEFT): # si la touche gauche est active | |
panier.deplacement_gauche() | |
# mettre à jour l'ecran du jeu | |
pygame.display.flip() | |
# boucler sur les evenements actif du joueur | |
for evenement in pygame.event.get(): | |
# si l'evenement c'est la fermeture de fenetre | |
if evenement.type == pygame.QUIT: | |
running = False # on arrete la boucle pour que la fenetre se ferme | |
quit() # on quitte le jeu | |
# si l'evenement est une interaction au clavier | |
elif evenement.type == pygame.KEYDOWN: | |
touches_active[evenement.key] = True # la touche est active | |
elif evenement.type == pygame.KEYUP: | |
touches_active[evenement.key] = False # la touche est desactive |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random # pour faire des choses au hasard | |
import pygame # recuperer les composants | |
# créer une classe qui va representer l'oeuf en chocolat | |
class OeufChocolat(pygame.sprite.Sprite): | |
# definir la fonction init qui charge les caracteristiques de base de notre oeuf | |
def __init__(self, largeur_ecran, hauteur_ecran, panier): | |
super().__init__() | |
self.vitesse_chute = random.randint(1, 3) | |
self.panier = panier | |
self.panier_group = pygame.sprite.Group() | |
self.panier_group.add(self.panier) | |
self.largeur_ecran = largeur_ecran | |
self.hauteur_ecran = hauteur_ecran | |
self.image = pygame.image.load('assets/oeuf.png') | |
self.image = pygame.transform.scale(self.image, (40, 40)) | |
self.rect = self.image.get_rect() | |
self.rect.x = random.randint(20, largeur_ecran - 40) | |
# teleporter respawn | |
def repositionner(self): | |
# reteleporter l'oeuf en haut | |
self.rect.x = random.randint(20, self.largeur_ecran - 40) | |
self.rect.y = - self.image.get_height() | |
self.vitesse_chute = random.randint(1, 3) | |
# une methode pour deplacer vers le bas l'oeuf, chuter | |
def gravite(self): | |
self.rect.y += self.vitesse_chute | |
# si il touche le panier | |
if pygame.sprite.spritecollide(self, self.panier_group, False, pygame.sprite.collide_mask) and self.rect.y >= 360: | |
print("Collision", self.rect.y) | |
self.repositionner() | |
# ajouter des points | |
self.panier.ajouter_points() | |
# si il sort de l'ecran | |
if self.rect.y >= self.hauteur_ecran: | |
self.repositionner() | |
# enlever les points | |
self.panier.enlever_points() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pygame # importe les composants | |
# créer une classe qui va representer le concept de joueur ou du panier sur notre jeu | |
class Panier(pygame.sprite.Sprite): | |
# le constructeur | |
def __init__(self, largeur_ecran, hauteur_ecran): | |
super().__init__() | |
self.largeur_ecran = largeur_ecran | |
self.points = 50 # nombre de points qu'aura le joueur | |
self.maximum_points = 100 # nombre maximum de points | |
self.image = pygame.image.load('assets/panier.png') # charger l'image du panier | |
self.image = pygame.transform.scale(self.image, (120, 120)) # redimentionner l'image | |
self.rect = self.image.get_rect() # on lui definit un rectangle | |
self.rect.x = (largeur_ecran / 2) - self.image.get_width() /2 | |
self.rect.y = hauteur_ecran - 180 | |
self.vitesse = 6 # vitesse de deplacement du panier | |
# methode pour ajouter 5 points | |
def ajouter_points(self): | |
if self.points + 5 <= self.maximum_points: # limite de points | |
print("+5 points") | |
self.points += 5 | |
# methode enlever 2 points | |
def enlever_points(self): | |
if self.points - 2 > 0: | |
print("-2 points") | |
self.points -= 2 | |
else: | |
# perdu | |
print("Perdu") | |
# methode pour le deplacement droite | |
def deplacement_droite(self): | |
if self.rect.x + self.image.get_width() < self.largeur_ecran: | |
self.rect.x += self.vitesse | |
# methode pour le deplacement gauche | |
def deplacement_gauche(self): | |
if self.rect.x > 0: | |
self.rect.x -= self.vitesse |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment