]>
code.delx.au - pong/blob - pong.c
6f2ec4ce02c40741ab36994d997cc0580b23e450
2 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
4 #elif defined(__APPLE__) || defined(MACOSX)
14 #define PADDLESPEED 2.5
20 static int p1move
= 0;
21 static int p2move
= 0;
22 static int score1
= 0;
23 static int score2
= 0;
24 static GLdouble paddle1
= 0.0;
25 static GLdouble paddle2
= 0.0;
26 static GLdouble ballX
= 0.0;
27 static GLdouble ballY
= 0.0;
28 static GLdouble ballVecX
= 0.0;
29 static GLdouble ballVecY
= 0.0;
32 static void initball(void) {
42 static void run(void) {
45 if(ballY
< paddle2
- PADDLESIZE
)
47 else if(ballY
> paddle2
+ PADDLESIZE
)
54 paddle1
+= p1move
* PADDLESPEED
;
55 paddle2
+= p2move
* PADDLESPEED
;
57 // Check for collisions with paddles
58 if(ballVecX
< 0 && ballX
<= -HEIGHT
+ -ballVecX
* 1.5) {
59 if(ballY
>= paddle1
- PADDLESIZE
&& ballY
<= paddle1
+ PADDLESIZE
) {
60 ballVecX
*= -SPEEDINC
;
64 if(ballVecX
> 0 && ballX
>= HEIGHT
- ballVecX
* 1.5) {
65 if(ballY
>= paddle2
- PADDLESIZE
&& ballY
<= paddle2
+ PADDLESIZE
) {
66 ballVecX
*= -SPEEDINC
;
71 // Check if it's past the top or bottom of the screen
72 if(ballY
>= HEIGHT
|| ballY
<= -HEIGHT
) {
76 // Check if it's past the sides of the screen
81 if(ballX
<= -HEIGHT
) {
90 // Check scores for winners..
101 static void display(void) {
102 glClear(GL_COLOR_BUFFER_BIT
);
103 glColor3d(0.0, 0.0, 0.0);
108 glVertex2d(-HEIGHT
+ 1, paddle1
- PADDLESIZE
);
109 glVertex2d(-HEIGHT
+ 1, paddle1
+ PADDLESIZE
);
110 glVertex2d( HEIGHT
- 1, paddle2
+ PADDLESIZE
);
111 glVertex2d( HEIGHT
- 1, paddle2
- PADDLESIZE
);
117 glVertex2d(ballX
, ballY
);
121 glRasterPos2d(-5.0, HEIGHT
- 10.0);
122 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18
, '0' + score1
);
123 glRasterPos2d( 5.0, HEIGHT
- 10.0);
124 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18
, '0' + score2
);
129 static void resize(int w
, int h
) {
130 glViewport(0, 0, w
, h
);
132 glOrtho(-HEIGHT
, HEIGHT
, -HEIGHT
, HEIGHT
, -1.0, 1.0);
135 static void keyboard(unsigned char key
, int x
, int y
) {
164 static void keyboardUp(unsigned char key
, int x
, int y
) {
181 static void timer(int lastTime
) {
182 int curTime
= glutGet(GLUT_ELAPSED_TIME
);
186 } while(lastTime
+ FRAME
< curTime
);
188 glutTimerFunc(FRAME
- (curTime
- lastTime
), timer
, curTime
);
191 static void init(void) {
192 glClearColor(1.0, 1.0, 1.0, 0.0);
196 int main(int argc
, char *argv
[]) {
197 if(argc
== 2 && *argv
[1] == '1') {
201 glutInitWindowPosition(100, 100);
202 glutInitWindowSize(640, 480);
203 glutInit(&argc
, argv
);
204 glutInitDisplayMode(GLUT_RGBA
| GLUT_DOUBLE
);
205 glutCreateWindow(argv
[0]);
206 glutDisplayFunc(display
);
207 glutReshapeFunc(resize
);
208 glutKeyboardFunc(keyboard
);
209 glutKeyboardUpFunc(keyboardUp
);
210 glutTimerFunc(FRAME
, timer
, glutGet(GLUT_ELAPSED_TIME
));