Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
les_programmes_a_connaitre:langages_term:api [2021/05/06 09:13] sn [Debuter avec pygame] |
les_programmes_a_connaitre:langages_term:api [2023/01/07 02:06] (Version actuelle) gd [Pour finir] |
||
|---|---|---|---|
| Ligne 54: | Ligne 54: | ||
| TITRE_FENETRE = " | TITRE_FENETRE = " | ||
| - | BOUCLE_DU_PROGRAMME | + | running= True |
| couleur_background = (250, | couleur_background = (250, | ||
| Ligne 63: | Ligne 63: | ||
| pygame.display.set_caption(TITRE_FENETRE) | pygame.display.set_caption(TITRE_FENETRE) | ||
| - | ouvert = " | + | |
| - | while ouvert==" | + | while running: |
| ouvert = input() | ouvert = input() | ||
| + | if ouvert ==" | ||
| + | running= False | ||
| + | | ||
| | | ||
| pygame.quit() | pygame.quit() | ||
| Ligne 71: | Ligne 74: | ||
| </ | </ | ||
| - | Voici un petit set pour bien débuter votre programme, on revoit la taille de la fenetre | + | Voici un petit set pour bien débuter votre programme, on revoit la taille de la fenêtre |
| - | - TITRE_FENETRE comme son nom l' | + | - TITRE_FENETRE comme son nom l' |
| + | - couleur_background servira pour plus tard | ||
| + | - running aussi | ||
| + | |||
| + | **ATTENTION** \\ | ||
| + | Les commandes de pygame doivent être entrées après la ligne // | ||
| + | Vous avez remarquer que toute les commande // | ||
| + | |||
| + | |||
| Ligne 80: | Ligne 92: | ||
| </ | </ | ||
| < | < | ||
| - | TGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG | + | Bijour |
| </ | </ | ||
| < | < | ||
| Ligne 88: | Ligne 100: | ||
| < | < | ||
| </ | </ | ||
| + | |||
| + | ====Pour finir==== | ||
| + | Quelques petits exemples de programmes utilisant pygame ainsi que d' | ||
| + | < | ||
| + | # -*- 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, | ||
| + | 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, | ||
| + | pygame.display.set_caption(' | ||
| + | |||
| + | # 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/ | ||
| + | horz = random.randrange(2, | ||
| + | vert = random.randrange(1, | ||
| + | | ||
| + | if right == False: | ||
| + | horz = - horz | ||
| + | | ||
| + | ball_vel = [horz, | ||
| + | |||
| + | # define event handlers | ||
| + | def init(): | ||
| + | global paddle1_pos, | ||
| + | global score1, score2 | ||
| + | paddle1_pos = [HALF_PAD_WIDTH - 1,HEIGHT/2] | ||
| + | paddle2_pos = [WIDTH +1 - HALF_PAD_WIDTH, | ||
| + | l_score = 0 | ||
| + | r_score = 0 | ||
| + | if random.randrange(0, | ||
| + | ball_init(True) | ||
| + | else: | ||
| + | ball_init(False) | ||
| + | |||
| + | |||
| + | #draw function of canvas | ||
| + | def draw(canvas): | ||
| + | global paddle1_pos, | ||
| + | |||
| + | canvas.fill(BLACK) | ||
| + | pygame.draw.line(canvas, | ||
| + | pygame.draw.line(canvas, | ||
| + | pygame.draw.line(canvas, | ||
| + | pygame.draw.circle(canvas, | ||
| + | |||
| + | # update paddle' | ||
| + | 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, | ||
| + | pygame.draw.polygon(canvas, | ||
| + | pygame.draw.polygon(canvas, | ||
| + | |||
| + | #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, | ||
| + | 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, | ||
| + | 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(" | ||
| + | label1 = myfont1.render(" | ||
| + | canvas.blit(label1, | ||
| + | |||
| + | myfont2 = pygame.font.SysFont(" | ||
| + | label2 = myfont2.render(" | ||
| + | canvas.blit(label2, | ||
| + | | ||
| + | | ||
| + | #keydown handler | ||
| + | def keydown(event): | ||
| + | global paddle1_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, | ||
| + | | ||
| + | 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) | ||
| + | </ | ||
| + | Et voici le rendu : {{: | ||
| + | |||
| + | Un dernier petit exemple avec tkinter sur la récurrence, | ||
| + | < | ||
| + | import turtle as t | ||
| + | |||
| + | def koch(longueur, | ||
| + | if n == 0: | ||
| + | t.forward(longueur) | ||
| + | else: | ||
| + | koch(longueur/ | ||
| + | t.left(60) | ||
| + | koch(longueur/ | ||
| + | t.right(120) | ||
| + | koch(longueur/ | ||
| + | t.left(60) | ||
| + | koch(longueur/ | ||
| + | |||
| + | def flocon(taille, | ||
| + | koch(taille, | ||
| + | t.right(120) | ||
| + | koch(taille, | ||
| + | t.right(120) | ||
| + | koch(taille, | ||
| + | | ||
| + | |||
| + | |||
| + | flocon(400, 3) | ||
| + | </ | ||
| + | Et voici le ptit flocon dessiné grâce à cette bibliothèque. {{: | ||
| + | |||
| | | ||