Si vous êtes ici c'est pour connaitre les bases de pygame, avant de commencer vérifiez si il est installé, pour le savoir, il faut tout simplement importer la bibliothèque dans votre programme. Un simple import pygame suffira.
Si python renvoie une erreur je vous invite à consulter cette page pour installer pygame
Avant de commencer, tout ce que je vais vous montrer provient du site https://zestedesavoir.com/tutoriels/846/pygame-pour-les-zesteurs/, c'est pour moi l'un des meilleurs tutoriels français.
import pygame #1 pygame.init() #2 ecran = pygame.display.set_mode((300, 200))#3 pygame.quit() #4
Voici grosso modo la base de tout programme avec pygame,
Mais ce code est incomplet, votre fenêtre se ferme toute seule, c'est normal.
Rien de plus simple, la boucle while.
import pygame pygame.init() ecran = pygame.display.set_mode((300, 200)) ouvert = "0" while ouvert=="0": ouvert = input() pygame.quit()
Cette boucle while empeche le programme de se fermer, pour fermer la fenêtre, il faudra taper dans la console autre chose que 0.
Cette fois ci vous avez pu voir votre fenêtre, avant de passer à l'étape du coloriage, je vais vous présenter quelques astuces bien utiles.
import pygame #######pygame import pygame WIDTH = 1000 #largeur fenetre HEIGHT = 600# hauteur fenetre TITRE_FENETRE = "fenetre trop cool" #titre fenetre running= True couleur_background = (250,250,0)#couleur du fond pygame.init() screen = pygame.display.set_mode((WIDTH,HEIGHT)) pygame.display.set_caption(TITRE_FENETRE) while running: ouvert = input() if ouvert =="0": running= False pygame.quit()
Voici un petit set pour bien débuter votre programme, on revoit la taille de la fenêtre mais avec quelques trucs en plus.
ATTENTION
Les commandes de pygame doivent être entrées après la ligne pygame.init(), sinon le programme crash
Vous avez remarquer que toute les commande pygame.display on un rapport avec la fenetre, dans ce tutoriel, je vais vous présenter la section pygame.event ainsi que pygame.draw
icon_32x32 = pygame.image.load("icone.png").convert_alpha()
Bijour
Quelques petits exemples de programmes utilisant pygame ainsi que d'autres modules comme un pong :
# -*- coding: utf-8 -*- """ Created on Thu Jan 5 23:51:40 2023 @author: gdani """ import random import pygame, sys from pygame.locals import * pygame.init() fps = pygame.time.Clock() #colors WHITE = (255,255,255) RED = (255,0,0) GREEN = (0,255,0) BLACK = (0,0,0) #globals WIDTH = 600 HEIGHT = 400 BALL_RADIUS = 20 PAD_WIDTH = 8 PAD_HEIGHT = 80 HALF_PAD_WIDTH = PAD_WIDTH / 2 HALF_PAD_HEIGHT = PAD_HEIGHT / 2 ball_pos = [0,0] ball_vel = [0,0] paddle1_vel = 0 paddle2_vel = 0 l_score = 0 r_score = 0 #canvas declaration window = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.display.set_caption('Hello World') # helper function that spawns a ball, returns a position vector and a velocity vector # if right is True, spawn to the right, else spawn to the left def ball_init(right): global ball_pos, ball_vel # these are vectors stored as lists ball_pos = [WIDTH/2,HEIGHT/2] horz = random.randrange(2,4) vert = random.randrange(1,3) if right == False: horz = - horz ball_vel = [horz,-vert] # define event handlers def init(): global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel,l_score,r_score # these are floats global score1, score2 # these are ints paddle1_pos = [HALF_PAD_WIDTH - 1,HEIGHT/2] paddle2_pos = [WIDTH +1 - HALF_PAD_WIDTH,HEIGHT/2] l_score = 0 r_score = 0 if random.randrange(0,2) == 0: ball_init(True) else: ball_init(False) #draw function of canvas def draw(canvas): global paddle1_pos, paddle2_pos, ball_pos, ball_vel, l_score, r_score canvas.fill(BLACK) pygame.draw.line(canvas, WHITE, [WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1) pygame.draw.line(canvas, WHITE, [PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1) pygame.draw.line(canvas, WHITE, [WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1) pygame.draw.circle(canvas, WHITE, [WIDTH//2, HEIGHT//2], 70, 1) # update paddle's vertical position, keep paddle on the screen if paddle1_pos[1] > HALF_PAD_HEIGHT and paddle1_pos[1] < HEIGHT - HALF_PAD_HEIGHT: paddle1_pos[1] += paddle1_vel elif paddle1_pos[1] == HALF_PAD_HEIGHT and paddle1_vel > 0: paddle1_pos[1] += paddle1_vel elif paddle1_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle1_vel < 0: paddle1_pos[1] += paddle1_vel if paddle2_pos[1] > HALF_PAD_HEIGHT and paddle2_pos[1] < HEIGHT - HALF_PAD_HEIGHT: paddle2_pos[1] += paddle2_vel elif paddle2_pos[1] == HALF_PAD_HEIGHT and paddle2_vel > 0: paddle2_pos[1] += paddle2_vel elif paddle2_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle2_vel < 0: paddle2_pos[1] += paddle2_vel #update ball ball_pos[0] += int(ball_vel[0]) ball_pos[1] += int(ball_vel[1]) #draw paddles and ball pygame.draw.circle(canvas, RED, ball_pos, 20, 0) pygame.draw.polygon(canvas, WHITE, [[paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT], [paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT]], 0) pygame.draw.polygon(canvas, WHITE, [[paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT], [paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT]], 0) #ball collision check on top and bottom walls if int(ball_pos[1]) <= BALL_RADIUS: ball_vel[1] = - ball_vel[1] if int(ball_pos[1]) >= HEIGHT + 1 - BALL_RADIUS: ball_vel[1] = -ball_vel[1] #ball collison check on gutters or paddles if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.1 ball_vel[1] *= 1.1 elif int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH: r_score += 1 ball_init(True) if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.1 ball_vel[1] *= 1.1 elif int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH: l_score += 1 ball_init(False) #update scores myfont1 = pygame.font.SysFont("Comic Sans MS", 20) label1 = myfont1.render("Score "+str(l_score), 1, (255,255,0)) canvas.blit(label1, (50,20)) myfont2 = pygame.font.SysFont("Comic Sans MS", 20) label2 = myfont2.render("Score "+str(r_score), 1, (255,255,0)) canvas.blit(label2, (470, 20)) #keydown handler def keydown(event): global paddle1_vel, paddle2_vel if event.key == K_UP: paddle2_vel = -8 elif event.key == K_DOWN: paddle2_vel = 8 elif event.key == K_w: paddle1_vel = -8 elif event.key == K_s: paddle1_vel = 8 #keyup handler def keyup(event): global paddle1_vel, paddle2_vel if event.key in (K_w, K_s): paddle1_vel = 0 elif event.key in (K_UP, K_DOWN): paddle2_vel = 0 init() #game loop while True: draw(window) for event in pygame.event.get(): if event.type == KEYDOWN: keydown(event) elif event.type == KEYUP: keyup(event) elif event.type == QUIT: pygame.quit() sys.exit() pygame.display.update() fps.tick(60)
Un dernier petit exemple avec tkinter sur la récurrence, on peut faire des dessin de fractales grâce à cette bibliothèque :
import turtle as t def koch(longueur, n): if n == 0: t.forward(longueur) else: koch(longueur/3, n-1) t.left(60) koch(longueur/3, n-1) t.right(120) koch(longueur/3, n-1) t.left(60) koch(longueur/3, n-1) def flocon(taille, etape): koch(taille, etape) t.right(120) koch(taille, etape) t.right(120) koch(taille, etape) flocon(400, 3)