-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgraficacomentarios.py
166 lines (142 loc) · 4.03 KB
/
graficacomentarios.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
from pyprocessing import *
import TorreHanoi
class Torre(object):
def __init__(self, centro = None, indice = None):
self.altura = 200
self.torreAltura = self.altura + 10
self.largura = 270
self.centro = centro
self.indice = indice
self.discos = 0
class Disco(object):
def __init__(self, largura, posX, posY):
self.largura = largura
self.altura = 20
self.posX = posX
self.posY = posY
self.torre = 0
#pegar os resultados da funcao Hanoi, e os devolve em forma de lista de inteiros,
#e pergunta quantos discos a pessoa deseja utilizar em um maximo de 7 discos
def comandos():
global tamanho
tamanho = input('Digite a quantidade de discos de 1 a 7: ')
roteiro = trata_roteiro(TorreHanoi.Hanoi(tamanho))
return roteiro
def torre_inteiro(st): #Auxiliar de trata_roteiro
if st == 'Inicio':
return 0
elif st == 'Auxiliar':
return 1
else:
return 2
def trata_roteiro(roteiro): #usada na comandos, tranforma as strings em uma lista de comando com valores 0,1 ou 2
lista = []
for tupla in roteiro:
lista.append(torre_inteiro(tupla[0]))
lista.append(torre_inteiro(tupla[1]))
lista.append(torre_inteiro(tupla[1]))
return lista
#repito o tupla[1] para ter o terceiro comando. levando em consideracao que os comandos sao: sair, achar e entrar
def setup():
global tamanho
global listaTorres
global listaDiscos
global roteiro
global frame
global passoatual
frame = 0
passoatual = 0
roteiro = comandos()
height = 500
width = 910
size(width,height)
background(255)
#construindo as torres
i = 0
listaTorres = []
widthDisponivel = 810
for t in range(0, 3):
centro = widthDisponivel/6
centro = centro + (widthDisponivel/3 * i) + 50
listaTorres.append(Torre(centro,i))
i += 1
listaTorres[0].discos = tamanho
#construindo os discos da torre inicial
listaDiscos = []
i = 0
larguraInicial = 270 - 20 #para um nao encostar no outro
for t in range(0,tamanho):
largura = larguraInicial - i*40 #diminui de 20 em 20
if largura < 40: #para nao inventer as coordenadas
largura = 40
posX = listaTorres[0].centro - largura/2
posY = 430 - (i*20)
listaDiscos.append(Disco(largura,posX,posY))
i += 1
def draw():
global tamanho
global listaTorres
global listaDiscos
global roteiro
global frame #toda vez q a variavel frame chega em 20 ele toma a decisao de fazer o movimento, a cada 30 frames ele mexe
global passoatual
background(255)
fill(100)
noStroke()
frame += 1
#testa qual passo deve ser feito
if frame % 20 == 0 and passoatual < len(roteiro):
passo = roteiro[passoatual]
torre = listaTorres[passo]
pula = False
i=0
for d in range(0,tamanho):
disco = listaDiscos[i] #testa em cada disco de uma torre
if disco.posY < 150: #caso o disco esteja em cima
if disco.torre == passo: #se o disco esta na torre do passo
altura = 0
j = 0
for di in range(0, tamanho): #para saber quantos discos tem na torre
if listaDiscos[j].torre == passo:
altura += 1
j += 1
disco.posY = 450 - (altura*20)
pula = True
break
else: #se nao ta na torre certa, coloco em cima da torre certa
disco.posX = torre.centro - disco.largura/2
disco.torre = passo #atualizo o meu disco na sua nova torre
pula = True
break
i += 1
if pula == False:
i = 0
menorDisco = None
for d in range(0,tamanho): #procurar em todos os discos qualquer q e o menor disco da torre
disco = listaDiscos[i]
if disco.torre == passo:
if menorDisco == None:
menorDisco = disco
if disco.largura < menorDisco.largura:
menorDisco = disco
i += 1
if menorDisco != None:
menorDisco.posY = 100
passoatual += 1
i = 0
# Imprime as torres
for t in range(0,3):
torre = listaTorres[i]
fill(100)
rect(torre.centro-10, 250, 20, torre.torreAltura)
fill(255,0,0)
rect(torre.centro-torre.largura/2+5, 450, torre.largura-10, 20 )
i += 1
# Imprime os discos
i = 0
for t in range(0, tamanho):
disco = listaDiscos[i]
fill(0,0,255)
rect(disco.posX, disco.posY, disco.largura, disco.altura)
i += 1
run()