Outils pour utilisateurs

Outils du site


les_programmes_a_connaitre:langages_term:api

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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/05 17:46]
lf
les_programmes_a_connaitre:langages_term:api [2023/01/07 02:06] (Version actuelle)
gd [Pour finir]
Ligne 5: Ligne 5:
 =====Debuter avec pygame===== =====Debuter avec pygame=====
  
-page non fini+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. \\ \\ \\ 
 + 
 + 
 +<code> 
 +import pygame                              #1 
 + 
 +pygame.init()                              #2 
 + 
 +ecran = pygame.display.set_mode((300, 200))#3 
 + 
 +pygame.quit()                              #4 
 +</code> 
 +Voici grosso modo la base de tout programme avec pygame,\\ 
 +  - D'abord vous importez la bibliothèque 
 +  - Ensuite vous démarrer la bibliothèque 
 +  - Ici vous sélectionnez la taille de la fenêtre (taille horizontal, taille vertical) 
 +  - Cette commande ferme la fenêtre 
 + 
 +Mais ce code est incomplet, votre fenêtre se ferme toute seule, c'est normal.\\ 
 +==Comment faire pour que votre fenêtre soit utile?== 
 +Rien de plus simple, //la boucle while//. \\ 
 +<code> 
 +import pygame 
 + 
 + 
 +pygame.init() 
 + 
 +ecran = pygame.display.set_mode((300, 200)) 
 + 
 +ouvert = "0" 
 +while ouvert=="0": 
 +    ouvert = input() 
 +     
 +pygame.quit() 
 +</code> 
 +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. 
 +<code> 
 +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() 
 + 
 + 
 +</code> 
 +Voici un petit set pour bien débuter votre programme, on revoit la taille de la fenêtre mais avec quelques trucs en plus. 
 +  - TITRE_FENETRE comme son nom l'indique mettra un titre à votre fenêtre 
 +  - couleur_background servira pour plus tard 
 +  - running aussi 
 + 
 +**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//  
 + 
 + 
 + 
 + 
 + 
 + 
 +<code> 
 +icon_32x32 = pygame.image.load("icone.png").convert_alpha() 
 +</code> 
 +<code> 
 +Bijour 
 +</code> 
 +<code> 
 +</code> 
 + 
 + 
 +<code> 
 +</code> 
 + 
 +====Pour finir==== 
 +Quelques petits exemples de programmes utilisant pygame ainsi que d'autres modules comme un pong :  
 +<code> 
 +# -*- 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) 
 +</code> 
 +Et voici le rendu : {{:les_programmes_a_connaitre:langages_term:capture_d_ecran_2023-01-07_015954.png?400|}} \\ 
 + 
 +Un dernier petit exemple avec tkinter sur la récurrence, on peut faire des dessin de fractales grâce à cette bibliothèque :  
 +<code> 
 +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) 
 +</code>  
 +Et voici le ptit flocon dessiné grâce à cette bibliothèque. {{:les_programmes_a_connaitre:langages_term:capture_d_ecran_2023-01-07_020500.png?400|}} 
 + 
 + 
 + 
 +  
  
les_programmes_a_connaitre/langages_term/api.1620229573.txt.gz · Dernière modification: 2021/05/05 17:46 de lf