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 08:53] lf |
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: | ||
</ | </ | ||
< | < | ||
+ | Bijour | ||
</ | </ | ||
< | < | ||
Ligne 87: | 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. {{: | ||
+ | |||
| | ||