Skip to content

Instantly share code, notes, and snippets.

@villares
Last active May 5, 2017 16:30
Show Gist options
  • Save villares/f274204ad6a9054576a6901ab8226005 to your computer and use it in GitHub Desktop.
Save villares/f274204ad6a9054576a6901ab8226005 to your computer and use it in GitHub Desktop.
"""
Exemplo de uso da Classe Bandeirinhas, com mudança de cor 'mouse over'
clique para acrescentar um objeto, tecle 'espaço' para remover
"""
bandeirinhas = [] # lista de objetos
def setup():
""" Define área de desenho e popula lista de bandeirinhas """
global bandeira_0
global baindeira_1, bandeira_2
size(100, 100) # área de desenho (width, height)
meia_largura, meia_altura = width / 2, height / 2
bandeira_0 = Bandeirinha(meia_largura, meia_altura)
bandeira_1 = Bandeirinha(80, 10, 30)
bandeira_2 = Bandeirinha(10, 40, 20)
for _ in range(50):
nova_bandeirinha = Bandeirinha(meia_largura, meia_altura)
bandeirinhas.append(nova_bandeirinha)
def draw():
""" Limpa a tela, desenha e atualiza bandeirinhas """
background(0) # atualização do desenho, fundo preto
bandeira_0.desenha()
bandeira_0.anda()
bandeira_1.desenha()
bandeira_1.anda()
bandeira_2.desenha()
bandeira_2.anda()
for bandeira in bandeirinhas:
bandeira.desenha()
bandeira.anda()
def mousePressed():
""" Acrescenta pequena bandeirinha branca """
nova_bandeirinha = Bandeirinha(mouseX, mouseY, 25)
nova_bandeirinha.cor = color(255) # forçando que seja branca!
bandeirinhas.append(nova_bandeirinha)
def keyPressed():
""" tecla 'espaço' remove a última bandeirinha da lista """
if key == ' ' and len(bandeirinhas) > 1:
removida = bandeirinhas.pop()
class Bandeirinha():
""" Classe Bandeirinha, cor sorteada, tamanho sorteado por default """
def __init__(self, px, py, ptamanho=50):
self.tamanho = ptamanho
def __init__(self, px, py, ptamanho=None):
self.x = px
self.y = py
if ptamanho:
self.tamanho = ptamanho
else:
self.tamanho = random(50, 200)
self.vx = random(-1,1)
self.vy = random(-1,1)
self.cor = color(random(255), # R
random(255), # G
random(255), # B
200) # alpha
def desenha(self):
""" Desenha polígono em torno das coordenadas do objeto """
metade = self.tamanho / 2
with pushMatrix(): # preseservando o sistema de coordenadas anterior
translate(self.x, self.y) # translada o sistema de coordenadas
noStroke() # sem contorno
# se o mouse estiver longe, normal, senão, branca
if dist(mouseX, mouseY, self.x, self.y) > metade:
fill(self.cor)
else:
fill(255,100)
beginShape() # inicia polígono
vertex(-metade, -metade)
vertex(-metade, metade)
vertex(0, 0)
vertex(metade, metade)
vertex(metade, -metade)
endShape(CLOSE) # encerra polígono, fechando no primeiro vértice
def anda(self):
""" atualiza a posição do objeto """
self.x += 1
self.y += 1
if self.x > width + 25:
self.x = -25
if self.y > height + 25:
self.y = -25
""" atualiza a posição do objeto e devolve do lado oposto se sair """
self.x += self.vx
self.y += self.vy
metade = self.tamanho / 2
if self.x > width + metade:
self.x = -metade
if self.y > height + metade:
self.y = -metade
if self.x < -metade:
self.x = width + metade
if self.y < -metade:
self.y = height + metade
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment