]>
code.delx.au - pong/blob - pong.c
2 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
4 #elif defined(__APPLE__) || defined(MACOSX)
21 static GLdouble paddle1
;
22 static GLdouble paddle2
;
23 static GLdouble ballX
;
24 static GLdouble ballY
;
25 static GLdouble ballVecX
;
26 static GLdouble ballVecY
;
29 static void initball(void) {
39 static void run(void) {
40 // Check for collisions with paddles
41 if(ballVecX
< 0 && ballX
<= -HEIGHT
+ -ballVecX
* 1.5) {
42 if(ballY
>= paddle1
- PADDLESIZE
&& ballY
<= paddle1
+ PADDLESIZE
) {
47 if(ballVecX
> 0 && ballX
>= HEIGHT
- ballVecX
* 1.5) {
48 if(ballY
>= paddle2
- PADDLESIZE
&& ballY
<= paddle2
+ PADDLESIZE
) {
54 // Check if it's past the top or bottom of the screen
55 if(ballY
>= HEIGHT
|| ballY
<= -HEIGHT
) {
59 // Check if it's past the sides of the screen
65 if(ballX
<= -HEIGHT
) {
76 static void display(void) {
77 glClear(GL_COLOR_BUFFER_BIT
);
78 glColor3d(0.0, 0.0, 0.0);
83 glVertex2d(-HEIGHT
+ 1, paddle1
- PADDLESIZE
);
84 glVertex2d(-HEIGHT
+ 1, paddle1
+ PADDLESIZE
);
85 glVertex2d( HEIGHT
- 1, paddle2
+ PADDLESIZE
);
86 glVertex2d( HEIGHT
- 1, paddle2
- PADDLESIZE
);
92 glVertex2d(ballX
, ballY
);
96 glRasterPos2d(-5.0, HEIGHT
- 10.0);
97 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18
, '0' + score1
);
98 glRasterPos2d( 5.0, HEIGHT
- 10.0);
99 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18
, '0' + score2
);
104 static void resize(int w
, int h
) {
105 glViewport(0, 0, w
, h
);
107 glOrtho(-HEIGHT
, HEIGHT
, -HEIGHT
, HEIGHT
, -1.0, 1.0);
110 static void keyboard(unsigned char key
, int x
, int y
) {
120 if(paddle1
+ PADDLESIZE
< HEIGHT
)
121 paddle1
+= PADDLESIZE
;
124 if(paddle1
- PADDLESIZE
> -HEIGHT
)
125 paddle1
-= PADDLESIZE
;
129 if(paddle2
+ PADDLESIZE
< HEIGHT
)
130 paddle2
+= PADDLESIZE
;
133 if(paddle2
- PADDLESIZE
> -HEIGHT
)
134 paddle2
-= PADDLESIZE
;
143 static void timer(int lastTime
) {
144 int curTime
= glutGet(GLUT_ELAPSED_TIME
);
148 } while(lastTime
+ FRAME
< curTime
);
150 glutTimerFunc(FRAME
- (curTime
- lastTime
), timer
, curTime
);
153 static void init(void) {
154 glClearColor(1.0, 1.0, 1.0, 0.0);
158 int main(int argc
, char *argv
[]) {
159 glutInitWindowPosition(100, 100);
160 glutInitWindowSize(640, 480);
161 glutInit(&argc
, argv
);
162 glutInitDisplayMode(GLUT_RGBA
| GLUT_DOUBLE
);
163 glutCreateWindow(argv
[0]);
164 glutDisplayFunc(display
);
165 glutReshapeFunc(resize
);
166 glutKeyboardFunc(keyboard
);
167 glutTimerFunc(FRAME
, timer
, glutGet(GLUT_ELAPSED_TIME
));