float ballX = 320; float ballY = 240; float ballVelocityX = 1; float ballVelocityY = 0; float ballSpeed = 2.5; float leftPaddleY = 240; float rightPaddleY = 240; float paddleSize = 50; float leftPaddleMovement = 0; float rightPaddleMovement = 0; float paddleSpeed = 2.5; boolean gameOver = false; int points = 0; int highScore = 0; int lastScore = 0; boolean highScoreSaved = false; void setup() { size(640, 480); loadLastAndHighScore(); } void draw() { background(#000000); strokeWeight(1); stroke(#FFFFFF); fill(#FFFFFF); rect(5, leftPaddleY - paddleSize / 2, 5, paddleSize); rect(width - 10, rightPaddleY - paddleSize / 2, 5, paddleSize); strokeWeight(1); stroke(#FFFFFF); line(width / 2, 0, width / 2, height); strokeWeight(10); stroke(#FFFFFF); point(ballX, ballY); textAlign(LEFT, TOP); textSize(16); fill(#FFFFFF); text("Points: " + points + ", LastScore: " + lastScore + ", HighScore: " + highScore, 5, 0); if (gameOver) { textAlign(CENTER, TOP); textSize(96); fill(#FF0000); text("GAME OVER", 320, 0); saveScore(); return; } leftPaddleY = constrain(leftPaddleY + leftPaddleMovement * paddleSpeed, 0, height); rightPaddleY = constrain(rightPaddleY + rightPaddleMovement * paddleSpeed, 0, height); ballX = constrain(ballX + ballVelocityX * ballSpeed, 0, width); ballY = constrain(ballY + ballVelocityY * ballSpeed, 0, height); if (ballX == 0 || ballX == width) { gameOver = true; } if (ballX <= 10 && ballY > leftPaddleY - paddleSize / 2 && ballY < leftPaddleY + paddleSize / 2) { ballVelocityX *= -1; points++; ballVelocityY = (leftPaddleY - ballY) / (paddleSize / 2f); } if (ballX >= width - 10 && ballY > rightPaddleY - paddleSize / 2 && ballY < rightPaddleY + paddleSize / 2) { ballVelocityX *= -1; points++; ballVelocityY = -1 * (rightPaddleY - ballY) / (paddleSize / 2f); } if (ballY == 0 || ballY == height) { ballVelocityY *= -1; } } void keyPressed() { if (keyCode == UP) { rightPaddleMovement = -1; } else if (keyCode == DOWN) { rightPaddleMovement = 1; } if (key == 'w') { leftPaddleMovement = -1; } else if (key == 's') { leftPaddleMovement = 1; } } void keyReleased() { if (keyCode == UP || keyCode == DOWN) { rightPaddleMovement = 0; } if (key == 'w' || key == 's') { leftPaddleMovement = 0; } } int[] loadInts(String fileName) { int[] ints = new int[0]; try { String[] strings = loadStrings(fileName); ints = new int[strings.length]; for (int i = 0; i < strings.length; i++) { ints[i] = int(strings[i]); } } catch (Exception e) { } return ints; } void saveInts(String fileName, int[] ints) { try { String[] strings = new String[ints.length]; for (int i = 0; i < strings.length; i++) { strings[i] = "" + ints[i]; } saveStrings(fileName, strings); } catch (Exception e) { } } void loadLastAndHighScore() { int[] scores = loadInts("points.txt"); if (scores.length <= 0) return; lastScore = scores[scores.length - 1]; highScore = lastScore; } void saveScore() { if (highScoreSaved) return; int[] oldScores = loadInts("points.txt"); int[] newScores = new int[oldScores.length + 1]; for (int i = 0; i < oldScores.length; i++) { newScores[i] = oldScores[i]; } newScores[oldScores.length] = points; saveInts("points.txt", newScores); highScoreSaved = true; }