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
| #include <GL\glut.h>
#include <cmath>
int stick_left=-100, stick_right=100, stick_speed=5;
int ball_left=0, ball_right=0, ball_tmp_l=4, ball_tmp_r=3;
void ball(float a)
{
ball_left-=ball_tmp_l;
ball_right-=ball_tmp_r;
glColor3f(0.6, 0.0, 0.0);
glTranslatef(ball_left, ball_right, 0);
glBegin(GL_LINE_LOOP);
for(int i = 0; i < 50; i++ ) {
a = (float)i / 50.0f * 3.1415f * 2.0f;
glVertex2f(cos(a) * 10.0f, sin(a) * 10.0f );
}
glEnd();
if(ball_left<-300) ball_tmp_l=-4;
if(ball_left>300) ball_tmp_l=4;
if(ball_right<-300) ball_tmp_r=-3;
if(ball_right>300) ball_tmp_r=3;
}
void stick_move()
{
glColor3f(0.0, 0.4, 0.0);
glRectf(stick_left, -300, stick_right, -280);
if(stick_left<-300) {stick_left=-300; stick_right=-100;}
if(stick_right>300) {stick_left=100; stick_right=300;}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glOrtho(-300, 300, -300, 300, -1, 1);
stick_move();
ball(0);
glutSwapBuffers();
}
void Special_Keyboard(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT: stick_left-=stick_speed; stick_right-=stick_speed; break;
case GLUT_KEY_RIGHT: stick_left+=stick_speed; stick_right+=stick_speed; break;
}
}
void timer(int)
{
display();
glutTimerFunc(10, timer, 0);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600, 600);
glutInitWindowPosition(350, 50);
glutCreateWindow("Cube");
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glutDisplayFunc(display);
glutSpecialFunc(Special_Keyboard);
timer(0);
glutMainLoop();
} |