1
2
3
4 """
5 [capturar.py]
6 Modulo para capturar los colores del cubo.
7 """
8 __author__ = "Victor Ramirez de la Corte"
9 __date__ = "02/04/2009"
10 __version__ = "PyRubik v0.5"
11
12 import random
13 import sys, os
14 import pygame
15 import copy
16 from language import *
17 import colorsys
18
20 """Clase que contiene funciones distintas para capturar los colores de cubo"""
22
23
24 self.colores = lll.colores
25 self.capas = [ [],[],[],[],[],[] ]
26 self.resolucion = [ [],[],[],[],[],[] ]
27
29 """Capturar los colores del cubo manualmente"""
30 cont = 0
31 for capas in self.capas:
32 sys.stdout.write(os.popen('clear').read())
33 for cara in range(6):
34 print self.colores[cara][0], self.colores[cara][1]
35
36 apto = False
37 comprobarColores = True
38 while not apto:
39
40 string = "cara %d --> " %(cont)
41
42 cadena = 9*str(cont)
43
44 for contColor in range(5):
45 if self.colores[contColor][1] < 0:
46 comprobarColores = False
47 print lll.error3
48
49 if cadena.isdigit() and len(cadena) == 9 and comprobarColores:
50 for color in range(9):
51 self.colores[int(cadena[color])][1] -=1
52 cadenaColor = self.colores[int(cadena[color])][0]
53 capas.append( int(cadenaColor[0]) )
54
55 apto = True
56 cont += 1
57
58
60 """Devuelve los colores que tiene cada capa del cubo"""
61 return self.capas
62
63
64 - def mov(self, *mov):
65 """recibe como entrada movimientos para mover el cubo. Ej: 'L', 'R2'
66 Ejemplos de movimientos estando el cubo hecho:
67 #anaconda = ("L","U","B'","U'","R","L'","B","R'","F","B'","D","R","D'","F'")
68 #cubodentrotro = ("F","L","F","U'","R","U","F2","L2","U'","L'","B","D'","B'","L2","U")
69 #cruces = ("F","F","B","B","D","D","U","U","R","R","L","L")
70 """
71 change = (2, 5, 8, 1, 4, 7, 0, 3, 6)
72
73 for gen in mov:
74 if gen[0] == lll.movs[0]: part1 = 0
75 elif gen[0] == lll.movs[12]: part1 = 1
76 elif gen[0] == lll.movs[3]: part1 = 2
77 elif gen[0] == lll.movs[9]:
78 part1 = 3
79 change = (6, 3, 0, 7, 4, 1, 8, 5, 2)
80 elif gen[0] == lll.movs[15]: part1 = 4
81 elif gen[0] == lll.movs[6]:
82 part1 = 5
83 change = (6, 3, 0, 7, 4, 1, 8, 5, 2)
84 else: print lll.error2
85
86 part2 = 1
87 if len(gen) == 2:
88 if gen[1].isdigit():
89 part2 = 2
90 else:
91 part2 = 3
92
93 cont = 0
94 while part2 > 0:
95 self.antCapas = copy.deepcopy(self.capas)
96
97 for c in range(9):
98 self.capas[part1][c] = self.antCapas[part1][change[c]]
99
100 if part1 == 0:
101 ar1 = (1,1,1,3,3,3,4,4,4,5,5,5)
102 ar2 = (0,1,2,0,1,2,0,1,2,0,1,2)
103 elif part1 == 1:
104 ar1 = (2,2,2,3,3,3,0,0,0,5,5,5)
105 ar2 = (0,1,2,6,3,0,8,7,6,2,5,8)
106 elif part1 == 2:
107 ar1 = (4,4,4,3,3,3,1,1,1,5,5,5)
108 ar2 = (6,7,8,6,7,8,6,7,8,6,7,8)
109 elif part1 == 3:
110 ar1 = (2,2,2,4,4,4,0,0,0,1,1,1)
111 ar2 = (2,5,8,6,3,0,2,5,8,2,5,8)
112 elif part1 == 4:
113 ar1 = (2,2,2,5,5,5,0,0,0,3,3,3)
114 ar2 = (8,7,6,6,3,0,0,1,2,2,5,8)
115 elif part1 == 5:
116 ar1 = (0,0,0,4,4,4,2,2,2,1,1,1)
117 ar2 = (6,3,0,2,5,8,6,3,0,6,3,0)
118
119 for a in range(len(ar1)):
120 b = (a+3) % len(ar1)
121 self.capas[ar1[a]][ar2[a]] = self.antCapas[ar1[b]][ar2[b]]
122
123 part2 -= 1
124
125
126
129
130
132 """obtenemos los colores de dos imagenes hechas con la malla1.png"""
133 pygame.init()
134
135 imagen = pygame.image.load("capa1.png")
136 imagen2 = pygame.image.load("capa2.png")
137
138 X = imagen.get_width()
139 Y = imagen.get_height()
140 centerx = X/2
141 centery = Y/2
142
143 X2 = imagen2.get_width()
144 Y2 = imagen2.get_height()
145 centerx2 = X2/2
146 centery2 = Y2/2
147
148
149 self.capas[0].append(imagen.get_at((int(1.0/6*X), int(3.0/12*Y))))
150 self.capas[0].append(imagen.get_at((int(2.0/6*X), int(2.0/12*Y))))
151 self.capas[0].append(imagen.get_at((centerx, int(1.0/12*Y))))
152 self.capas[0].append(imagen.get_at((int(2.0/6*X), int(4.0/12*Y))))
153 self.capas[0].append(imagen.get_at((centerx, int(3.0/12*Y))))
154 self.capas[0].append(imagen.get_at((int(4.0/6*X), int(2.0/12*Y))))
155 self.capas[0].append(imagen.get_at((centerx, int(5.0/12*Y))))
156 self.capas[0].append(imagen.get_at((int(4.0/6*X), int(4.0/12*Y))))
157 self.capas[0].append(imagen.get_at((int(5.0/6*X), int(3.0/12*Y))))
158
159 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(1.0/24*Y))))
160 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery - int(1.0/24*Y))))
161 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery - int(3.0/24*Y))))
162 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(5.0/24*Y))))
163 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery + int(3.0/24*Y))))
164 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery + int(1.0/24*Y))))
165 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(9.0/24*Y))))
166 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery + int(7.0/24*Y))))
167 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery + int(5.0/24*Y))))
168
169 self.capas[2].append(imagen2.get_at((centerx2, int(1.0/12*Y2))))
170 self.capas[2].append(imagen2.get_at((int(4.0/6*X2), int(2.0/12*Y2))))
171 self.capas[2].append(imagen2.get_at((int(5.0/6*X2), int(3.0/12*Y2))))
172 self.capas[2].append(imagen2.get_at((int(2.0/6*X2), int(2.0/12*Y2))))
173 self.capas[2].append(imagen2.get_at((centerx2, int(3.0/12*Y2))))
174 self.capas[2].append(imagen2.get_at((int(4.0/6*X2), int(4.0/12*Y2))))
175 self.capas[2].append(imagen2.get_at((int(1.0/6*X2), int(3.0/12*Y2))))
176 self.capas[2].append(imagen2.get_at((int(2.0/6*X2), int(4.0/12*Y2))))
177 self.capas[2].append(imagen2.get_at((centerx2, int(5.0/12*Y2))))
178
179 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 + int(5.0/24*Y2))))
180 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 + int(7.0/24*Y2))))
181 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(9.0/24*Y2))))
182 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 + int(1.0/24*Y2))))
183 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 + int(3.0/24*Y2))))
184 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(5.0/24*Y2))))
185 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 - int(3.0/24*Y2))))
186 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 - int(1.0/24*Y2))))
187 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(1.0/24*Y2))))
188
189 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(9.0/24*Y2))))
190 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 + int(7.0/24*Y2))))
191 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 + int(5.0/24*Y2))))
192 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(5.0/24*Y2))))
193 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 + int(3.0/24*Y2))))
194 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 + int(1.0/24*Y2))))
195 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(1.0/24*Y2))))
196 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 - int(1.0/24*Y2))))
197 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 - int(3.0/24*Y2))))
198
199 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery - int(3.0/24*Y))))
200 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery - int(1.0/24*Y))))
201 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(1.0/24*Y))))
202 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery + int(1.0/24*Y))))
203 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery + int(3.0/24*Y))))
204 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(5.0/24*Y))))
205 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery + int(5.0/24*Y))))
206 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery + int(7.0/24*Y))))
207 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(9.0/24*Y))))
208
210 """Captura los colores de 6 imagenes hechas con malla2."""
211
212 self.capas = [ [],[],[],[],[],[] ]
213
214 pos = ((0,0),(0,160),(160,160),(320, 160),(480,160),(480,320))
215 xxx = (1, 3, 5)
216
217 for capa in range(len(self.capas)):
218 cont = 0
219 pix = []
220 while cont < 9:
221 pix.append((27*xxx[cont/3-1]+pos[capa][0],27*xxx[cont%3-1]+pos[capa][1]))
222 cont +=1
223 imagen = pygame.image.load("capa%d.png" % capa)
224 for pixel in pix:
225 rgb = imagen.get_at(pixel)
226 rgb = pygame.Color(rgb[0], rgb[1], rgb[2])
227 self.capas[capa].append(rgb)
228 return self.capas
229
230
232 """Pasar de RGB a HSL"""
233 for capas in range(6):
234 for cap in range(9):
235 hsl = self.capas[capas][cap].hsla
236 self.capas[capas][cap] = hsl
237
239 """Funcion para encontrar los colores que sean blancos en una lista de lista"""
240 blancoHSL = pygame.Color(255,255,255).hsla
241 for capas in range(6):
242 for cap in range(9):
243 if self.capas[capas][cap][1] <= 2500/255:
244 self.capas[capas][cap] = blancoHSL
245
247 """Devuelve los colores de los centros del cubo, que son fijos"""
248 colores = []
249 for centros in range(6):
250 colores.append(self.capas[centros][4])
251 colores.sort()
252 colores.remove(colores[0])
253 print type(colores[1]), "JIIIIII"
254 return colores
255
257 """Capturamos los 6 colores medios"""
258 colores = []
259 for cap in range(6):
260 for c in range(9):
261 colores.append(self.capas[cap][c])
262 colores.sort()
263 colores = (colores[4], colores[13], colores[22], colores[31], colores[40], colores[49])
264 colores.remove(colores[0])
265 return colores
266
267
268
270 """Editamos los colores para pintarlos con su color exacto ;)"""
271 dist = []
272 dist.append((colores[0][0]))
273 dist.append((colores[1][0]-colores[0][0])/2.0)
274 dist.append((colores[2][0]-colores[1][0])/2.0)
275 dist.append((colores[3][0]-colores[2][0])/2.0)
276 dist.append((colores[4][0]-colores[3][0])/2.0)
277 dist.append((360-colores[4][0]))
278
279 for cap in range(6):
280 for c in range(9):
281 contador = 0
282 color = self.capas[cap][c][0]
283 for num in range(len(colores)):
284 if color < (colores[num][0] + dist[num+1]) and\
285 color >= (colores[num][0] - dist[num]) and color != 0:
286 self.capas[cap][c] = colores[num]
287 contador +=1
288
289 if contador != 1 and color != 0:
290 print "ERROR", contador, color
291
292
293
294 return self.capas
295
297 self.capas = [ [],[],[],[],[],[] ]
298 for capa in range(6):
299 for ca in range(9):
300 rgb = capas[capa][ca][:3]
301
302
303
304 rgb[0]
305 rgb[0] = int(rgb[0]) * 360
306 rgb[1] = int(rgb[1]) * 100
307 rgb[2] = int(rgb[2]) * 100
308 rgb = colorsys.hls_to_rgb(*map(lambda x: x/255.0, rgb))
309 print rgb
310 rgb = pygame.Color(int(rgb[0]), int(rgb[1]), int(rgb[2]))
311 self.capas[capa].append(rgb)
312 print self.capas
313