1 | importˆàmath |
---|
2 | |
---|
3 | fromˆàOpenGL.GLUTˆàimportˆà* |
---|
4 | fromˆàOpenGL.GLUˆàimportˆà* |
---|
5 | fromˆàOpenGL.GLˆàimportˆà* |
---|
6 | |
---|
7 | fromˆàbodyˆàimportˆà* |
---|
8 | fromˆàvectorˆàimportˆà* |
---|
9 | fromˆàgameˆàimportˆà* |
---|
10 | fromˆàuser_controllerˆàimportˆà* |
---|
11 | importˆàgameˆàasˆàgame_module |
---|
12 | |
---|
13 | glutInit() |
---|
14 | glutInitDisplayMode(GLUT_RGBA |ˆàGLUT_DOUBLE |ˆàGLUT_DEPTH) |
---|
15 | |
---|
16 | classˆàGLWindow(object): |
---|
17 | ˆà ˆà ˆà ˆà defˆà__init__(self,ˆàgame,ˆàtank,ˆàtimer=None,ˆàival=None): |
---|
18 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.game,ˆàself.tank =ˆàgame,ˆàtank |
---|
19 | |
---|
20 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà window =ˆàglutCreateWindow('hello') |
---|
21 | |
---|
22 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà circle =ˆàglGenLists(1) |
---|
23 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glNewList(circle,ˆàGL_COMPILE) |
---|
24 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glPolygonMode(GL_FRONT,ˆàGL_LINE) |
---|
25 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glBegin(GL_POLYGON) |
---|
26 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆài inˆàrange(100)ˆà: |
---|
27 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glVertex2f(math.cos(i*2*math.pi/100.0)/2,ˆàmath.sin(i*2*math.pi/100.0)/2) |
---|
28 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glEnd() |
---|
29 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glEndList(circle) |
---|
30 | |
---|
31 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà defˆàdisplay(): |
---|
32 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutSetWindow(window) |
---|
33 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glClear(GL_COLOR_BUFFER_BIT |ˆàGL_DEPTH_BUFFER_BIT) |
---|
34 | |
---|
35 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glLoadIdentity() |
---|
36 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glScalef(2.0/game.width,ˆà2.0/game.height,ˆà0) |
---|
37 | |
---|
38 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆàbody inˆàgame.bodies : |
---|
39 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glPushMatrix() |
---|
40 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glTranslatef(body.position.x,ˆàbody.position.y,ˆà0) |
---|
41 | |
---|
42 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glScalef(body.radius,ˆàbody.radius,ˆà0) |
---|
43 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàbody isˆàtank : |
---|
44 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glColor3f(255,ˆà255,ˆà0) |
---|
45 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆàisinstance(body,ˆàTank)ˆà: |
---|
46 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glColor3f(0,ˆà255,ˆà0) |
---|
47 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆàisinstance(body,ˆàBullet)ˆà: |
---|
48 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glColor3f(255,ˆà0,ˆà0) |
---|
49 | |
---|
50 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glCallList(circle) |
---|
51 | |
---|
52 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glBegin(GL_LINES) |
---|
53 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glVertex2f(0,ˆà0) |
---|
54 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glVertex2f(body.velocity.x,ˆàbody.velocity.y) |
---|
55 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glEnd() |
---|
56 | |
---|
57 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glPopMatrix() |
---|
58 | |
---|
59 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutSwapBuffers() |
---|
60 | |
---|
61 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà defˆàkeyboard(key,ˆàa,ˆàb): |
---|
62 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà tank.controller.handle_keypress(key) |
---|
63 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutPostRedisplay() |
---|
64 | |
---|
65 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà defˆàtimer_func(val): |
---|
66 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà timer.__call__() |
---|
67 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutPostRedisplay() |
---|
68 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutTimerFunc(ival,ˆàtimer_func,ˆà0) |
---|
69 | |
---|
70 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutDisplayFunc(display) |
---|
71 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutKeyboardFunc(keyboard) |
---|
72 | |
---|
73 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàtimer : |
---|
74 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutTimerFunc(ival,ˆàtimer_func,ˆà0) |
---|
75 | |
---|
76 | classˆàUi(object): |
---|
77 | ˆà ˆà ˆà ˆà defˆà__init__(self): |
---|
78 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà bodies =ˆà[] |
---|
79 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.game =ˆàGame(100,ˆà100,ˆàbodies) |
---|
80 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà tank =ˆàTank(self.game,ˆàVector.null,ˆàNone) |
---|
81 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà controller =ˆàUserController('a',ˆà'd',ˆà'q',ˆà'e',ˆà'w',ˆà's',ˆà'x',ˆàtank) |
---|
82 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà tank.controller =ˆàcontroller |
---|
83 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà bodies.append(tank) |
---|
84 | |
---|
85 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà defˆàidle()ˆà: |
---|
86 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.game.step(1) |
---|
87 | |
---|
88 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.window =ˆàGLWindow(self.game,ˆàbodies[0],ˆàidle,ˆà100) |
---|
89 | |
---|
90 | ˆà ˆà ˆà ˆà defˆàloop(self): |
---|
91 | ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà glutMainLoop() |
---|
92 | |
---|
93 | ui =ˆàUi() |
---|
94 | ui.loop() |
---|