1
2
3
4 import pygame, sys, os
5 from language import *
6 from pygame.locals import *
7 from scramble import *
8 from timer import *
9 import capturar
10 import timer
11 import cam
12 import bd
13
14
15
17 fullname = os.path.join(folder, name)
18 image = pygame.image.load(fullname)
19 image = image.convert_alpha()
20 return image
21
22
24 fuente = font.render(cadena, True, color)
25 window.blit(background, (0,0))
26 window.blit(fuente, pos)
27 pygame.display.update(update)
28
29
30 -def captureKeys(cadena, font, color, background, window, pos = (0,0),update = None):
31 pygame.event.clear()
32 string = ""
33 while 1:
34 insertStringInBackground(cadena + string, font, color, background, window, pos, update)
35 keys = pygame.event.wait()
36 if keys.type == KEYDOWN and keys.key == K_BACKSPACE:
37 string = string[:len(string)-1]
38 elif keys.type == KEYDOWN and keys.key == K_RETURN:
39 break
40 elif keys.type == KEYDOWN and keys.key == K_ESCAPE:
41 string = ""
42 break
43 elif keys.type == KEYDOWN and keys.key == K_SPACE:
44 string += " "
45 elif keys.type == KEYDOWN:
46 key = keys.key
47 string += pygame.key.name(key)
48 pygame.event.clear()
49 return string
50
51 -def pintarCubo(window, capas, numberOrColor = 1, colores = None):
52 """pinta las capas de self.capas con pygame"""
53
54 m = (95, 95, 95, 190, 285, 0)
55 n = (0, 95, 190, 95, 95, 95)
56 a = (0, 30, 60)
57
58
59 for x in range(len(capas)):
60 for w in range(len(capas[x])):
61 if numberOrColor == 0:
62 pygame.draw.rect(window, colores[int(capas[x][w])][2],\
63 (a[w%3]+m[x], a[w//3]+n[x], 30, 30))
64 else:
65 pygame.draw.rect(window, capas[x][w], (a[w%3]+m[x], a[w//3]+n[x], 30, 30))
66
67
68 """
69 def opcionesThemes(themes):
70 archivo = open("theme/%s/opt.txt" % themes, "r")
71 opc = archivo.readlines()
72
73 color = opc[0][opc[0].index("=")+1:opc[0].index("\n")]
74 colorSel = opc[1][opc[1].index("=")+1:opc[1].index("\n")]
75 sizeFont = opc[2][opc[2].index("=")+1:opc[2].index("\n")]
76 sizeFontScr = opc[3][opc[3].index("=")+1:opc[3].index("\n")]
77 sizeFontClock = opc[4][opc[4].index("=")+1:opc[4].index("\n")]
78 center = opc[5][opc[5].index("=")+1:opc[5].index("\n")]
79 pos = opc[5][opc[5].index("=")+1:opc[5].index("\n")]
80 return color, colorSel, sizeFont, sizeFontClock, center, pos
81 """
82
84
88
89
90
91 pygame.font.init()
92
93 self.window = pygame.display.set_mode(size)
94 pygame.display.set_caption("PyRubik")
95 pygame.display.set_icon(load_image("DATOS", "icon.png"))
96 themes = os.listdir('themes')
97 themes.sort()
98 themes = themes[1:]
99 font = "themes/%s" % themes[theme]
100 background = "themes/%s" % themes[theme]
101 self.background = load_image(background, "background.png")
102 self.font = pygame.font.Font(os.path.join(font, "font.ttf") , sizeFont)
103 self.fontScr = pygame.font.Font(os.path.join(font, "font.ttf") , sizeFontScr)
104 self.fontTime = pygame.font.Font(os.path.join(font, "font.ttf") , 80)
105 self.window.blit(self.background, (0,0))
106 self.options = lll.menu[:]
107 self.options[5] = self.options[5].partition("<")[0] + "<%s>" % themes[theme]
108 idiomas = os.listdir('mo')[1:]
109
110
111 reloj = pygame.time.Clock()
112
113
114 opt = 0
115 l = 1
116 cont = 0
117
118 while 1:
119
120 pygame.display.flip()
121 noWait = pygame.event.pump()
122 keyinput = pygame.key.get_pressed()
123 if self.window.get_size() != (size):
124 self.window = pygame.display.set_mode(size)
125
126
127
128 outMenu = []
129 for k in range(len(self.options)):
130 if opt == k:
131 outMenu.append(self.font.render(self.options[k], True, colorSel))
132 else:
133 outMenu.append(self.font.render(self.options[k], True, color))
134 self.window.blit(outMenu[k], (pos[0], pos[1] + k*pos[2]))
135
136
137 self.window.blit(self.background, (0,0))
138 for z in range(len(outMenu)):
139
140 if center == True:
141 f_rect = outMenu[z].get_rect()
142 f_rect.move_ip(pos[0], pos[1] + z*pos[2])
143 f_rect.centerx = self.window.get_rect().centerx
144 else:
145
146 f_rect = (pos[0], pos[1] + z*pos[2])
147 self.window.blit(outMenu[z], f_rect)
148
149
150 if opt == 5 and (keyinput[K_RIGHT] or keyinput[K_LEFT]):
151 if keyinput[K_RIGHT]:
152 theme += 1
153 if theme > len(themes) - 1:
154 theme = 0
155 elif keyinput[K_LEFT]:
156 theme -= 1
157 if theme < 0:
158 theme = len(themes) - 1
159
160 self.options = lll.menu[:]
161 self.options[5] = self.options[5].partition("<")[0] + "<%s>" % themes[theme]
162 font = "themes/%s/font.ttf" % themes[theme]
163 background = "themes/%s/background.png" % themes[theme]
164 mmm = Menu(color=(255,155,0,155), theme = theme, lang = lang)
165
166
167 if (keyinput[K_RIGHT] or keyinput[K_LEFT]) and opt == 3 or lang == 0:
168 event = pygame.event.wait()
169 if event.type == KEYDOWN and keyinput[K_LEFT]:
170 l -= 1
171 if l < 0:
172 l = len(idiomas) - 1
173 elif event.type == KEYDOWN and keyinput[K_RIGHT]:
174 l += 1
175 if l > len(idiomas) - 1:
176 l = 0
177 lll.translate(idiomas[l])
178 self.options = lll.menu
179 self.options[5] += "<%s>" % themes[theme]
180 for k in range(len(self.options)):
181 outMenu.insert(k, (self.font.render(self.options[k], True, color)))
182 self.window.blit(outMenu[k], (pos[0], pos[1] + k*pos[2]))
183 outMenu = outMenu[:len(self.options)]
184 lang = 1
185 reloj.tick(100)
186 pygame.time.delay(30)
187
188
189 if keyinput[K_DOWN] or keyinput[K_UP]:
190 event = pygame.event.wait()
191 if event.type == KEYDOWN and keyinput[K_DOWN]:
192 opt += 1
193 if opt >= len(self.options):
194 opt = 0
195 elif event.type == KEYDOWN and keyinput[K_UP]:
196 opt -= 1
197 if opt < 0:
198 opt = len(self.options)-1
199
200
201
202
203 if keyinput[K_RETURN] and opt == 0:
204 alg = Scramble()
205 scra = self.fontScr.render("Scramble: "+alg.scramble(), True, color)
206 self.window.blit(self.background, (0,0))
207 self.window.blit(scra, (20,250))
208 pygame.display.update()
209
210
211 string = captureKeys(lll.insertEsp, self.fontScr,\
212 color, self.background, self.window, (20,300), update=((20,300),(760,20)))
213 stringT = string
214 try: string = int(string)
215 except: string = 5
216
217 while 1:
218
219 self.window.blit(self.background, (0,0))
220 insertStringInBackground(lll.cadenaMenu[0], self.fontScr, color,\
221 self.background, self.window, pos=(20,350), update=((20,350),(760,40)))
222 insertStringInBackground(lll.cadenaMenu[1], self.fontScr, color,\
223 self.background, self.window, pos=(20,400), update=((20,400),(760,40)))
224
225 evento5 = pygame.event.wait()
226 if evento5.type == KEYDOWN and (evento5.key == K_RETURN or evento5.key == K_SPACE):
227
228 for st in range(string, 0, -1):
229 insertStringInBackground(str(st), self.fontTime, color,\
230 self.background, self.window, pos=(350,500), update=((350,500),(350,80)))
231 time.sleep(1)
232 tim = time.time()
233 tempX = 0
234 pygame.event.clear()
235
236
237 while not tempX:
238 tiempo = time.time() - tim
239 tiempoStr = str(tiempo)
240 posP = tiempoStr.index(".")
241 cadenaTime = tiempoStr[:posP] + tiempoStr[posP:posP+3]
242 cadT = self.fontTime.render(cadenaTime, True, color)
243 self.window.blit(self.background, (0,0))
244 self.window.blit(cadT, (350,500))
245 pygame.display.update(((350,500),(350,80)))
246 pygame.event.pump()
247 keyinput = pygame.key.get_pressed()
248 tempX = keyinput[K_SPACE]
249
250 reloj.tick(100)
251 pygame.time.delay(30)
252
253 pygame.event.clear()
254
255
256 save = captureKeys(lll.save + ": ", self.fontScr, color,\
257 self.background, self.window, pos = (20,400), update=((20,400),(760,20)))
258 if lll.yes.count(save.lower()) > 0:
259 bbdd = bd.BD()
260 bbdd.guardar(tiempo, "3x3x3")
261 bbdd.close()
262 insertStringInBackground(lll.saved, self.font,\
263 color, self.background, self.window, pos = (100,350))
264 scra = self.fontScr.render("Scramble: "+alg.scramble(), True, color)
265 self.window.blit(self.background, (0,0))
266 self.window.blit(scra, (20,250))
267 pygame.display.update((20,250),(760,20))
268
269 elif evento5.type == KEYDOWN and evento5.key == K_ESCAPE:
270 break
271
272
273
274 if keyinput[K_RETURN] and opt == 2:
275 pass
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290 elif keyinput[K_RETURN] and opt == 1:
291 captura = capturar.Capturar()
292 cadena = "(1).[" + lll.optSolve[1] + "], (2)." + lll.optSolve[0]
293 cadenaFont = self.fontScr.render(cadena, True, color)
294 self.window.blit(self.background, (0,0))
295 self.window.blit(cadenaFont, (0,300))
296 pygame.display.update()
297
298 while 1:
299 event2 = pygame.event.wait()
300 if event2.type == KEYDOWN and event2.key == K_1:
301 while 1:
302 captura.capturarCaras()
303 ColorOrNumber = 1
304
305
306 elif event2.type == KEYDOWN and event2.key == K_ESCAPE:
307 pygame.event.clear()
308 break
309 elif event2.type == KEYDOWN and event2.key == K_2:
310 break
311
312 if event2.key == K_2:
313 cadena = "(1).[2 " + lll.fotos + "] u (2). 6 " + lll.fotos + " 3. usar import cube3D"
314 cadenaFont = self.fontScr.render(cadena, True, color)
315 self.window.blit(self.background, (0,0))
316 self.window.blit(cadenaFont, (0,300))
317 pygame.display.update()
318 pygame.event.clear()
319 while 1:
320 pygame.event.clear()
321 event3 = pygame.event.wait()
322 if event3.type == KEYDOWN and event3.key == K_2:
323 malla = 2
324 break
325 elif event3.type == KEYDOWN and event3.key == K_ESCAPE:
326 pygame.event.clear()
327 break
328 elif event3.type == KEYDOWN and event3.key == K_1:
329 malla = 1
330 break
331 if event3.key != K_ESCAPE:
332 cam.CapturarDesdeCam(malla)
333 captura.capturarColores6Capas()
334 ColorOrNumber = 1
335
336
337
338 elif keyinput[K_RETURN] and opt == 4:
339 bbdd = bd.BD()
340 self.window.blit(self.background, (0,0))
341 pygame.display.update()
342
343 for intSta in range(len(lll.statistic)):
344 insertStringInBackground(lll.statistic[intSta], self.fontScr,
345 color, self.background, self.window, (20,250+intSta*25),\
346 update = ((20,250+intSta*25),(760,20)))
347
348 pygame.event.clear()
349 otraConsulta = True
350 while otraConsulta:
351 mostrar = False
352 event4 = pygame.event.wait()
353 if event4.type == KEYDOWN and event4.key == K_2:
354 media = captureKeys("Average of: ", self.fontScr,\
355 color, self.background, self.window, (40,400),\
356 update=((40,400),(760,20)))
357 try: media = int(media)
358 except: media = 5
359 consultaStr = bbdd.consultarMediaDe(media)
360 mostrar = True
361 elif event4.type == KEYDOWN and event4.key == K_3:
362 consultaStr = bbdd.consultarRecord()
363 mostrar = True
364 elif event4.type == KEYDOWN and event4.key == K_4:
365 tipo = captureKeys("Tipo: ", self.fontScr,\
366 color, self.background, self.window, (40,400),\
367 update=((40,400),(760,20)))
368 consultaStr = bbdd.consultarTiemposDe(str(tipo))
369 mostrar = True
370 elif event4.type == KEYDOWN and event4.key == K_1:
371 consultaStr = bbdd.consultarTodo()
372 mostrar = True
373 elif event4.type == KEYDOWN and event4.key == K_ESCAPE:
374 break
375
376 if mostrar:
377 insertStringInBackground(consultaStr,\
378 self.fontScr,color, self.background, self.window,\
379 (40,400),update = ((40,400),(760,20)))
380 insertStringInBackground(lll.consulta, self.fontScr,\
381 color, self.background, self.window, (40,450),\
382 update=((40,450),(760,20)))
383
384 while 1:
385 event4 = pygame.event.wait()
386 if event4.type == KEYDOWN and (event4.key == K_n or event4.key == K_ESCAPE ):
387 otraConsulta = False
388 break
389 elif event4.type == KEYDOWN and event4.key == K_y:
390 otraConsulta = True
391 self.window.blit(self.background, (0,0))
392 pygame.display.update(((40,400),(760,100)))
393 break
394 reloj.tick(100)
395 pygame.time.delay(30)
396 bbdd.close()
397 pygame.event.clear()
398
399
400
401 elif keyinput[K_RETURN] and opt == 6:
402 self.window.blit(self.background, (0,0))
403 pygame.display.update()
404
405 for intCre in range(len(lll.credits)):
406 insertStringInBackground(lll.credits[intCre], self.fontScr,
407 color, self.background, self.window, (20,250+intCre*40),\
408 update = ((20,250+intCre*40),(760,40)))
409
410 x = False
411 while not x:
412 event = pygame.event.wait()
413 x = (event.type == KEYDOWN and event.key == K_ESCAPE)
414
415
416 elif keyinput[K_RETURN] and opt == 7:
417 sys.exit()
418
419
420 if keyinput[K_f]:
421 pygame.display.toggle_fullscreen()
422
423 reloj.tick(100)
424 pygame.time.delay(30)
425
426 mmm = Menu()
427