Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como criar uma estrutura de árvore com orientação a objetos?

+1 voto
107 visitas
perguntada Jul 10, 2016 em Ciência da Computação por PRosa (61 pontos)  
Compartilhe

1 Resposta

+1 voto
respondida Jul 10, 2016 por PRosa (61 pontos)  

O código abaixo gera uma árvore a partir da especificação do ponto (objeto) inicial, que, recursivamente, gera os demais pontos da estrutura.

from graphics import * 
import random 
import time

class Ponto:
    def __init__(self,x,y,niveis):
        self.x, self.y, self.nivel = x,y,niveis
        self.pontos = []
        if (self.nivel > 1):        
           self.criaPontos()

    def criaPontos(self):
        delta = 1-0.08*(5-self.nivel)
        self.pontos.append(Ponto(self.x-delta,self.y-1,self.nivel-1))
        self.pontos.append(Ponto(self.x      ,self.y-1,self.nivel-1))
        self.pontos.append(Ponto(self.x+delta,self.y-1,self.nivel-1))

    def desenhaPonto(self,win):
       c = Circle(Point(self.x*100, self.y*100), 7)    
       c.setFill(CorAleatoria())    
       c.draw(win) 
       time.sleep(0.15)
       if (len(self.pontos)>0):
           for i in range(3):
               pto = self.pontos[i]
               l = Line( Point(self.x*100, self.y*100), Point(pto.x*100, pto.y*100))
               l.draw(win)
               time.sleep(0.15)
               pto.desenhaPonto(win)

def CorAleatoria():
   cores=["red","white","blue","green","yellow"]
   return cores[random.randint(0,4)]

if __name__ == "__main__": 
    niveisDaArvore = 5
    arvore_OO = Ponto(5,5,niveisDaArvore) # xInicial, YInicial = 5,5
    #Desenha a árvore
    win = GraphWin("Minha Árvore O.O.", 1000, 600)
    arvore_OO.desenhaPonto(win)   
    win.getMouse() # aguarda click na janela
    win.close()

A imagem será apresentada aqui.

...