package pong; import org.lwjgl.LWJGLException; import org.lwjgl.Sys; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; import org.lwjgl.opengl.GL11; public class pong { boolean DEBUG = true; // Player 1 float x = 50; float y = 300; // Player2 float x1 = 750; float y1 = 300; // Ballz float ballX = 400; float ballY = 300; float directionX = -3; float directionY = 0; float speed = 2.0f; float rotation = 0; long lastFrame; int fps; long lastFPS; public void start() { try { Display.setDisplayMode(new DisplayMode(800, 600)); Display.create(); } catch (LWJGLException e) { e.printStackTrace(); System.exit(0); } initGL(); // init OpenGL getDelta(); lastFPS = getTime(); // Update code while (!Display.isCloseRequested()) { int delta = getDelta(); ballMovement(delta); updatePlayer(delta); renderWalls(); renderGL(); renderBall(); Display.update(); Display.sync(60); // cap fps to 60fps } Display.destroy(); } public void ballMovement(int delta) { if (DEBUG == true) if (ballY >= 580) directionY = directionY - 2 * directionY; if (ballY <= 20) directionY = directionY - 2 * directionY; if (ballX >= 800) { ballX = 200; ballY = 300; speed = 2.0f; directionX = 2; directionY = 0; } if (ballX <= 0) { ballX = 600; ballY = 300; speed = 2.0f; directionX = -2; directionY = 0; } /* ************************************************************ */ /* ************************Platform 1**************************** */ /* ************************************************************ */ if (ballX > 10 && ballX < 65 && ballY < y + 50 && ballY > y - 50 && directionX < 0) { if (directionY > 0) { if (Keyboard.isKeyDown(Keyboard.KEY_Q)) { ballX = ballX + directionX; directionY = directionY + 1; directionX = directionX - (2 * directionX) - 1; if (directionX == 0) directionX++; } if (Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionY = directionY - 1; directionX = directionX - (2 * directionX) + 1; if (directionX == 0) directionX++; } if (!Keyboard.isKeyDown(Keyboard.KEY_Q) && !Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionX = directionX - (2 * directionX); } } if (directionY < 0) { if (Keyboard.isKeyDown(Keyboard.KEY_Q)) { ballX = ballX + directionX; directionY = directionY + 1; directionX = directionX - (2 * directionX) + 1; if (directionX == 0) directionX++; } if (Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionY = directionY - 1; directionX = directionX - (2 * directionX) - 1; if (directionX == 0) directionX++; } if (!Keyboard.isKeyDown(Keyboard.KEY_Q) && !Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionX = directionX - (2 * directionX); } } if (directionY == 0) { if (Keyboard.isKeyDown(Keyboard.KEY_Q)) { ballX = ballX + directionX; directionY = directionY + 1; directionX = directionX - (2 * directionX) - 1; if (directionX == 0) directionX++; } if (Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionY = directionY - 1; directionX = directionX - (2 * directionX) - 1; if (directionX == 0) directionX++; } if (!Keyboard.isKeyDown(Keyboard.KEY_Q) && !Keyboard.isKeyDown(Keyboard.KEY_A)) { ballX = ballX + directionX; directionX = directionX - (2 * directionX); } } } /* ************************************************************ */ /* ************************Platform 2**************************** */ /* ************************************************************ */ if (ballX > 735 && ballX < 790 && ballY < y1 + 50 && ballY > y1 - 50 && directionX > 0) { if (directionY > 0) { if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { ballX = ballX - 2 * directionX; directionY = directionY + 1; directionX = directionX - 2 * directionX + 1; if (directionX == 0) directionX--; } if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionY = directionY - 1; directionX = directionX - 2 * directionX - 1; if (directionX == 0) directionX--; } if (!Keyboard.isKeyDown(Keyboard.KEY_UP) && !Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionX = directionX - 2 * directionX; } } if (directionY < 0) { if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { ballX = ballX - 2 * directionX; directionY = directionY + 1; directionX = directionX - 2 * directionX - 1; if (directionX == 0) directionX--; } if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionY = directionY - 1; directionX = directionX - 2 * directionX + 1; if (directionX == 0) directionX--; } if (!Keyboard.isKeyDown(Keyboard.KEY_UP) && !Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionX = directionX - 2 * directionX; } } if (directionY == 0) { if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { ballX = ballX - 2 * directionX; directionY = directionY + 1; directionX = directionX - 2 * directionX + 1; if (directionX == 0) directionX--; } if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionY = directionY - 1; directionX = directionX - 2 * directionX + 1; if (directionX == 0) directionX--; } if (!Keyboard.isKeyDown(Keyboard.KEY_UP) && !Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { ballX = ballX - 2 * directionX; directionX = directionX - 2 * directionX; } } } if (directionX < -3) directionX = -3; if (directionX > 3) directionX = 3; if (directionY < -3) directionY = -3; if (directionY > 3) directionY = 3; speed += 0.001; ballX = ballX + directionX * speed; ballY = ballY + directionY * speed; if (DEBUG == false) { } } public void renderWalls() { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); GL11.glColor3f(0.0f, 1.0f, 0.0f); GL11.glPushMatrix(); /* * GL11.glTranslatef(x, y, 0); GL11.glRotatef(rotation, 0f, 0f, 1f); * GL11.glTranslatef(-x, -y, 0); */ GL11.glBegin(GL11.GL_QUADS); GL11.glVertex2f(800, 600); GL11.glVertex2f(0, 600); GL11.glVertex2f(0, 590); GL11.glVertex2f(800, 590); GL11.glEnd(); GL11.glBegin(GL11.GL_QUADS); GL11.glVertex2f(0, 0); GL11.glVertex2f(0, 10); GL11.glVertex2f(800, 10); GL11.glVertex2f(800, 0); GL11.glEnd(); GL11.glBegin(GL11.GL_QUADS); GL11.glVertex2f(0, 0); GL11.glVertex2f(0, 20); GL11.glVertex2f(800, 40); GL11.glVertex2f(800, 20); GL11.glPopMatrix(); } public void updatePlayer(int delta) { /* ************************************************************ */ /* ************************Player 1**************************** */ /* ************************************************************ */ if (Keyboard.isKeyDown(Keyboard.KEY_Q)) y += 0.35f * delta; if (Keyboard.isKeyDown(Keyboard.KEY_A)) y -= 0.35f * delta; /* ************************************************************ */ /* ************************Player 2**************************** */ /* ************************************************************ */ if (Keyboard.isKeyDown(Keyboard.KEY_UP)) y1 += 0.35f * delta; if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) y1 -= 0.35f * delta; // keep paddle on the screen if (y < 60) y = 60; if (y > 540) y = 540; if (y1 < 60) y1 = 60; if (y1 > 540) y1 = 540; updateFPS(); } public int getDelta() { long time = getTime(); int delta = (int) (time - lastFrame); lastFrame = time; return delta; } public long getTime() { return (Sys.getTime() * 1000) / Sys.getTimerResolution(); } public void updateFPS() { if (getTime() - lastFPS > 1000) { Display.setTitle("FPS: " + fps); fps = 0; lastFPS += 1000; } fps++; } public void initGL() { GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(0, 800, 0, 600, 1, -1); GL11.glMatrixMode(GL11.GL_MODELVIEW); } public void renderBall() { GL11.glEnd(); GL11.glBegin(GL11.GL_POLYGON); GL11.glColor3f(1f, 1.5f, 1f); for (double angle = 0; angle <= Math.PI * 2; angle = angle + 0.01) { // Circumference // of // circle // = // 2PI // * // r GL11.glVertex2d(ballX + Math.sin(angle) * 5, ballY + Math.cos(angle) * 5); } GL11.glEnd(); } public void renderGL() { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); GL11.glPushMatrix(); GL11.glTranslatef(x, y, 0); GL11.glRotatef(rotation, 0f, 0f, 1f); GL11.glTranslatef(-x, -y, 0); GL11.glBegin(GL11.GL_QUADS); /* ************************************************************ */ /* ************************Player 1**************************** */ /* ************************************************************ */ GL11.glColor3f(0.0f, 0.0f, 1.0f); GL11.glVertex2f(x - 10, y - 50); GL11.glVertex2f(x + 10, y - 50); GL11.glVertex2f(x + 10, y + 50); GL11.glVertex2f(x - 10, y + 50); /* ************************************************************ */ /* ************************Player 2**************************** */ /* ************************************************************ */ GL11.glColor3f(1.0f, 0.0f, 0.0f); GL11.glVertex2f(x1 - 10, y1 - 50); GL11.glVertex2f(x1 + 10, y1 - 50); GL11.glVertex2f(x1 + 10, y1 + 50); GL11.glVertex2f(x1 - 10, y1 + 50); GL11.glEnd(); GL11.glPopMatrix(); } public static void main(String[] argv) { pong app = new pong(); app.start(); } }