1
2 """
3 [cubo.py]
4 Clase que maneja el cubo en 3D en openGL.
5 """
6
7 __author__ = "Victor Ramirez de la Corte"
8 __date__ = "23/04/2009"
9 __version__ = "PyRubik v0.6.5"
10
11 from OpenGL.GL import *
12 from OpenGL.GLU import *
13 from OpenGL.GLUT import *
14 import pygame
15 from pygame.locals import *
16 from gameobjects.matrix44 import *
17 import os, sys, random, math
18 from texutil import *
19 from cube_object import *
20 import GL
21
24 if sys.platform == ('win32' or 'win64'):
25 os.environ['SDL_VIDEO_CENTERED'] = '1'
26 pygame.init()
27 screen = [800,600]
28
29 GL.gl_init(*screen)
30 x = 0
31 pygame.display.set_caption("Pyrubik - Press 'i' for instructions")
32 pygame.display.set_icon(pygame.image.load("Images/RubiksCubeIcon.png").convert_alpha())
33
34
35
36 - def vec3(self,vec2,axis):
37 vec3=[0,0,0]
38 if axis[0]!=0:
39 vec3[1],vec3[2]=vec2
40 vec3[0]=axis[0]+1
41 elif axis[1]!=0:
42 vec3[0],vec3[2]=vec2
43 vec3[1]=axis[1]+1
44 elif axis[2]!=0:
45 vec3[0],vec3[1]=vec2
46 vec3[2]=axis[2]+1
47 else: print "ERROR"
48 return vec3
49
50
52 self.cube
53 block_sequence=((0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,1))
54 block_sequence=block_sequence[::direction1]
55 t1=self.cube.sides[self.vec3(block_sequence[0],axis)]
56 t2=self.cube.sides[self.vec3(block_sequence[1],axis)]
57 x1=self.cube.rotations[self.vec3(block_sequence[0],axis)]
58 x2=self.cube.rotations[self.vec3(block_sequence[1],axis)]
59 for i in xrange(6):
60 self.cube.sides[self.vec3(block_sequence[i],axis)]= \
61 self.cube.sides[self.vec3(block_sequence[i+2],axis)]
62 self.cube.rotations[self.vec3(block_sequence[i],axis)] = \
63 self.cube.rotations[self.vec3(block_sequence[i+2],axis)]
64 self.cube.sides[self.vec3(block_sequence[6],axis)]=t1
65 self.cube.sides[self.vec3(block_sequence[7],axis)]=t2
66 self.cube.rotations[self.vec3(block_sequence[6],axis)]=x1
67 self.cube.rotations[self.vec3(block_sequence[7],axis)]=x2
68 if axis[0]!=0:
69 rot=Matrix44.x_rotation(radians(90.*direction2))
70 elif axis[1]!=0:
71 rot=Matrix44.y_rotation(radians(90.*direction2))
72 elif axis[2]!=0:
73 rot=Matrix44.z_rotation(radians(90.*direction2))
74 for i in xrange(8):
75 self.cube.rotations[self.vec3(block_sequence[i],axis)]=\
76 rot*self.cube.rotations[self.vec3(block_sequence[i],axis)]
77 self.cube.rotations[self.vec3((1,1),axis)]=\
78 rot*self.cube.rotations[self.vec3((1,1),axis)]
79
80
82 if self.animations:
83 for a in xrange(0,90*direction2,direction2):
84 self.cube.draw(self.rotate[0],self.rotate[1],self.view_distance,self.viewmode,
85 a,axis[0],axis[1],axis[2])
86 if self.display_instructions:
87 self.instructions.draw(self.rotate[0],self.rotate[1],self.view_distance)
88 pygame.display.flip()
89 self.rotate_blocks(direction1,direction2,axis)
90
91
93 self.move_list=[]
94 possible_moves="lLrRtTfFbBuU"
95 last_s=""
96 x = 0
97
98 while x < 25:
99 s=possible_moves[random.randint(0,len(possible_moves)-1)]
100
101 if not (s.capitalize()==last_s.capitalize() and s!=last_s):
102 self.move_list+=s
103 last_s=s
104 x += 1
105
106
170
171
173 if len(self.move_list)>0:
174 s=self.move_list[0]
175 if s=="l": self.rotate_face(-1,1,(-1,0,0))
176 elif s=="L": self.rotate_face(1,-1,(-1,0,0))
177 elif s=="t": self.rotate_face(-1,-1,(0,1,0))
178 elif s=="T": self.rotate_face(1,1,(0,1,0))
179 elif s=="r": self.rotate_face(1,-1,(1,0,0))
180 elif s=="R": self.rotate_face(-1,1,(1,0,0))
181 elif s=="F": self.rotate_face(-1,1,(0,0,1))
182 elif s=="f": self.rotate_face(1,-1,(0,0,1))
183 elif s=="b": self.rotate_face(-1,1,(0,0,-1))
184 elif s=="B": self.rotate_face(1,-1,(0,0,-1))
185 elif s=="u": self.rotate_face(1,1,(0,-1,0))
186 elif s=="U": self.rotate_face(-1,-1,(0,-1,0))
187
188 self.move_list=self.move_list[1:]
189
190 from solver import *
191
192
194 self.instructions=Text_Image("Instructions.png")
195 self.rotate = [20.0,20.0,0.0]
196 self.view_distance = 9.0
197 self.viewmode = 1.0
198 self.cube=RubiksCube()
199 self.move_list=""
200 self.solving=False
201 self.animations=True
202 self.display_instructions=False
203 self.game_running=True
204
205
206
207 w = 0
208
209
210 while self.game_running:
211 self.get_input()
212 self.process_next_move()
213 if self.solving and len(self.move_list)==0:
214 self.move_list += solver(self.cube)
215
216 w += len(solver(self.cube))
217 if len(self.move_list)==0: self.solving=False
218 self.cube.draw(self.rotate[0],self.rotate[1],self.view_distance,self.viewmode)
219 if self.display_instructions:
220 self.instructions.draw(self.rotate[0],self.rotate[1],self.view_distance)
221 pygame.display.flip()
222 pygame.quit()
223
224
225
226
227