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/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 = "fenetre trop cool" #titre fenetre TITRE_FENETRE = "fenetre trop cool" #titre fenetre
  
-BOUCLE_DU_PROGRAMME = True+running= True
 couleur_background = (250,250,0)#couleur du fond couleur_background = (250,250,0)#couleur du fond
  
Ligne 63: Ligne 63:
 pygame.display.set_caption(TITRE_FENETRE) pygame.display.set_caption(TITRE_FENETRE)
  
-ouvert = "0" + 
-while ouvert=="0":+while running:
     ouvert = input()     ouvert = input()
 +    if ouvert =="0":
 +        running= False
 +    
          
 pygame.quit() pygame.quit()
Ligne 71: Ligne 74:
  
 </code> </code>
-Voici un petit set pour bien débuter votre programme, on revoit la taille de la fenetre mais avec quelques trucs en plus. +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 +  - 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//  
 + 
 + 
  
  
Ligne 80: Ligne 92:
 </code> </code>
 <code> <code>
 +Bijour
 </code> </code>
 <code> <code>
Ligne 87: Ligne 100:
 <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.1620284007.txt.gz · Dernière modification: 2021/05/06 08:53 de lf