Session 10 : Cheatsheet (toutes les sessions)
Un aperçu de tous les patrons des sessions 1 à 9. Utilise-le comme référence quand tu construis ton propre jeu.
Game loop pygame (session 6+)
import pygame
pygame.init()
WIDTH, HEIGHT = 800, 500
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Mon jeu")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 36)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
pass # action sur ESPACE
screen.fill((20, 20, 50))
# logique de mise à jour ici
# logique de dessin ici
pygame.display.flip()
clock.tick(60)
pygame.quit()Game loop pgzrun (sessions 1 à 5)
import pgzrun
WIDTH = 600
HEIGHT = 400
def draw():
screen.fill((20, 20, 50))
def update():
pass # remplace par ta propre logique
pgzrun.go()Clavier
# Style Pgzrun :
if keyboard.left:
speler.x -= 5
# Style Pygame :
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
speler_rect.x -= 5
if keys[pygame.K_RIGHT]:
speler_rect.x += 5
if keys[pygame.K_UP]:
speler_rect.y -= 5
if keys[pygame.K_DOWN]:
speler_rect.y += 5Souris
# Position :
mx, my = pygame.mouse.get_pos()
# Clics (dans la boucle des événements) :
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # bouton gauche de la souris
passActor / Sprite (pgzrun)
speler = Actor('speler') # charge images/speler.png
speler.pos = (300, 380)
def draw():
speler.draw()
if speler.colliderect(ster):
pass # collision !Créer et dessiner un Rect (pygame)
speler_rect = pygame.Rect(x, y, breedte, hoogte)
pygame.draw.rect(screen, (0, 128, 255), speler_rect)
# Cercle :
pygame.draw.circle(screen, (255, 255, 0), (x, y), straal)
# Ligne :
pygame.draw.line(screen, (255, 0, 0), (x1, y1), (x2, y2), dikte)Détection de collision
# Deux Rects :
if rect_a.colliderect(rect_b):
pass
# Point dans un Rect :
if rect.collidepoint(mx, my):
pass
# Pgzrun :
if actor_a.colliderect(actor_b):
passGravité et saut (session 6)
GRAVITY = 0.5
vel_y = 0
on_ground = False
# À chaque frame :
vel_y += GRAVITY
speler_rect.y += int(vel_y)
for platform in platforms:
if speler_rect.colliderect(platform) and vel_y > 0:
speler_rect.bottom = platform.top
vel_y = 0
on_ground = True
# Sauter :
if keys[pygame.K_SPACE] and on_ground:
vel_y = -12Classes (session 7)
class Vijand:
def __init__(self, x, y):
self.x = x
self.y = y
self.alive = True
def update(self):
self.y += 2
def draw(self, screen):
pygame.draw.circle(screen, (0, 200, 0), (int(self.x), int(self.y)), 15)
# Utilisation :
v = Vijand(200, 0)
v.update()
v.draw(screen)Héritage (session 7)
class SlingerVijand(Vijand):
def __init__(self, x, y):
super().__init__(x, y)
self.timer = 0
self.start_x = x
def update(self):
import math
self.timer += 0.05
self.x = self.start_x + math.sin(self.timer) * 60
self.y += 1.5Arrière-plan qui défile (session 8)
scroll_x = 0
speed = 4
# À chaque frame :
scroll_x -= speed
if scroll_x <= -WIDTH:
scroll_x = 0
screen.blit(bg_image, (int(scroll_x), 0))
screen.blit(bg_image, (int(scroll_x) + WIDTH, 0))Faire apparaître des objets (session 8)
import random
SPAWN_EVENT = pygame.USEREVENT + 1
pygame.time.set_timer(SPAWN_EVENT, 1500)
for event in pygame.event.get():
if event.type == SPAWN_EVENT:
objecten.append(pygame.Rect(WIDTH, random.randint(50, HEIGHT - 100), 30, 60))
# Déplacer et supprimer :
for obj in objecten[:]:
obj.x -= speed
if obj.x < -obj.width:
objecten.remove(obj)Dessiner une barre de HP (session 9)
MAX_HP = 100
# Fond :
pygame.draw.rect(screen, (80, 0, 0), (10, 10, 300, 20))
# Partie remplie :
breedte = max(0, int(300 * hp / MAX_HP))
pygame.draw.rect(screen, (220, 0, 0), (10, 10, breedte, 20))State machine / phases (session 9)
if hp > 50:
fase = 1
snelheid = 3
elif hp > 25:
fase = 2
snelheid = 5
else:
fase = 3
snelheid = 7Garder les projectiles dans une liste
kogels = []
# Créer (sur appui de touche) :
kogels.append(pygame.Rect(speler_rect.centerx - 3, speler_rect.top - 15, 6, 15))
# Déplacer et supprimer :
for k in kogels[:]:
k.y -= 8
if k.y < 0:
kogels.remove(k)
continue
pygame.draw.rect(screen, (255, 255, 0), k)
# Collision avec un ennemi :
if k.colliderect(vijand_rect):
kogels.remove(k)
vijand.alive = False
score += 1
breakSon (session 6)
pygame.mixer.init()
sprong_snd = pygame.mixer.Sound("sounds/sprong.wav")
sprong_snd.play()
# Musique de fond :
pygame.mixer.music.load("sounds/muziek.mp3")
pygame.mixer.music.play(-1) # -1 = répète à l'infiniDessiner du texte
font = pygame.font.SysFont(None, 36)
tekst = font.render(f"Score : {score}", True, (255, 255, 255))
screen.blit(tekst, (10, 10))
# Centré :
screen.blit(tekst, (WIDTH // 2 - tekst.get_width() // 2, HEIGHT // 2))Score et variables globales
score = 0 # en dehors de toutes les fonctions
# Dans update() de pgzrun :
global score
score += 1
# Dans pygame (le score est déjà global s'il est en dehors de la boucle) :
score += 1Nombres aléatoires
import random
x = random.randint(0, WIDTH) # entier entre 0 et WIDTH
k = random.choice(['rood', 'blauw']) # élément au hasard dans une liste
r = random.random() # nombre à virgule entre 0.0 et 1.0Patron de timer (basé sur les frames)
timer = 0
interval = 90 # toutes les 90 frames (= 1,5 sec à 60 FPS)
# À chaque frame :
timer += 1
if timer >= interval:
timer = 0
# fais quelque choseÉcran de victoire et de game over
# Game over :
screen.fill((0, 0, 0))
go = font.render("GAME OVER", True, (220, 0, 0))
screen.blit(go, (WIDTH // 2 - go.get_width() // 2, HEIGHT // 2))
pygame.display.flip()
pygame.time.wait(3000)
# Victoire :
win = font.render("Gagné !", True, (255, 220, 0))
screen.blit(win, (WIDTH // 2 - win.get_width() // 2, HEIGHT // 2))
pygame.display.flip()
pygame.time.wait(3000)