pygame: desenhar formas geometricas #2

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 9 Setembro 2019.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    Continuando o tutorial de pygame, nessa parte vamos aprender como desenhar formas geometricas na tela (quadrados, circulos, poligonos e etc). Para começar a brincar vamos refazer o codigo do tutorial anterior (vamos la se esforce para rescrever o codigo e não copiar ele, gambatte yooo \o ~ ps: o kodo é meio retardado)

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))  
       pygame.display.flip()
    para desenhar essas formas geometricas vamos utilizar uma das classes especifica do pygame a classe draw (pygame.draw). A primeira forma que vamos desenhar é o quadrado/retangulo usando o metodo rect (pygame.draw.rect), passamos como argumento para ele a superficie onde vamos desenhar (no caso a nossa janela), a cor sendo uma tupla com 3 valores representando o RGB, uma lista com 4 valores sendo as posições X, Y e o tamanho de X e Y. No proximo exemplo eu criei um quadrado de dimensão 25x25 na posição 100x100 na janela

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       pygame.draw.rect(janela,(255,0,0),(100,100,25,25))
       
       pygame.display.flip()
    [​IMG]

    as vezes precisamos manipular a posição onde aquele determnado objeto é desenhando na tela, nesse caso precisamos usar variaveis e não passar valores estaticos como no exemplo anterior (podemos criar uma tupla/lista ou ate um dicionario para cada objeto do jogo ou um agrupado de tipos de objeto no jogo para ficar mais simples a manipulação por loops)

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)
    quadrado = [100,100,25,25]

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       pygame.draw.rect(janela,(255,0,0),quadrado)
       
       pygame.display.flip()
    outra forma geometrica que podemos desenhar é o circulo usando o metodo circle (pygame.draw.circle), nesse metodo passamos como argumento a superficie onde vamos desenhar (no caso a janela), a cor RGB, as posições X e Y, e o por fim o raio

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       pygame.draw.circle(janela,(255,0,0),(150,100),30)
       
       pygame.display.flip()
     
    [​IMG]

    com o metodo line (pygame.draw.line) desenhamos uma linha, o seu argumento é a superficie onde vamos desenhar, o inicio sendo uma tupla com as posições X e Y, e o fim sendo uma tupla com as posições X e Y (vai ser traçado uma reta entre a posição inicio e fim)

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       pygame.draw.line(janela,(255,0,0),(100,100),(150,100))
       
       pygame.display.flip()
    [​IMG]

    a ultima forma geometrica que vamos brincar nesse tutorial é poligono (pygame.draw.polygon), diferente dos outros metodos nesse precisamos definir uma quantidade de pontos (sendo um agrupamento de tuplas X e Y), o primeiro argumento é a nossa superficie como sempre, o segundo argumento é uma tupla de tuplas X e Y (o legal que usando poligonos tu consegue criar algumas coisas 3D em cima do 2D apenas se baseando em profundidade e luminosidade)

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       pygame.draw.polygon(janela,(255,0,0),((100,100),(150,90),(160,120),(90,110)))
       
       pygame.display.flip()
    [​IMG]

    um exemplo da bandeira do brasil (ou alguma coisa semelhante a ela kkkk)

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((0,255,0))
       
       pygame.draw.polygon(janela,(255,255,0),((75,100),(150,50),(225,100),(150,150)))
       pygame.draw.circle(janela,(0,0,255),(150,100),20)
       pygame.draw.line(janela,(255,255,255),(130,100),(170,100))
       
       pygame.display.flip()
     
    [​IMG]

    é possivel desenhar apenas um pixel na tela, so que isso não é feito pela classe draw e sim direito na superficie desejada usando o metodo set_at dela, nesse metodo passamos como argumento uma tupla com as posições X e Y e a cor desejada sendo uma tupla representando o RGB

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((0,255,0))
       
       janela.set_at((100,100),(255,255,0))
       
       pygame.display.flip()
    [​IMG]

    vamos desenhar um quadrado pixel a pixel

    Código (Forge Crash):
    #!/usr/bin/python

    import pygame

    pygame.init()

    largura = (300,200)

    janela = pygame.display.set_mode(largura)

    while True:
       for evento in pygame.event.get():
         if evento.type == pygame.QUIT:
           pygame.quit()
           exit(0)

       janela.fill((255,255,255))
       
       contx = 100
       while contx < 150:
         conty = 100
         while conty < 150:
           janela.set_at((contx,conty),(255,0,0))
           conty += 1
         contx += 1
       
       pygame.display.flip()
    [​IMG]

    é isso galera, então ate a parte #3 do tutorial \o

    by kodo no kami
     

Compartilhe esta Página