I am trying to make a Pong game, and everything is functioning correctly, but when I try to add a way to keep the score in the game, everything compiles but the scenario isn't running. Here is my code.
import greenfoot.*; public class PongGame extends World { private int p1score; private int p2score; private Paddle leftPaddle; private Paddle rightPaddle; public PongGame() { // Create a new world with 600x400 cells with a cell size of 1x1 pixels. super(600, 400, 1); p1score = 0; p2score = 0; addBall(); addScore(); addPaddle(true); addPaddle(false); } public void addPaddle(boolean isLeft) { if (isLeft == true) { Paddle leftPaddle = new Paddle(true); leftPaddle.turn(270); addObject(leftPaddle, 40, 200); } else if (isLeft == false) { Paddle rightPaddle = new Paddle(false); rightPaddle.turn(270); addObject(rightPaddle, 560, 200); } } public void addBall() { Ball ball = new Ball(5); addObject(ball, 240, 200); } public void addScore() { Score score = new Score(); addObject(score, 250, 50); } public int getP1score() { return p1score; } public int getP2score() { return p2score; } public void setP1score(int score) { p1score = score; } public void setP2score(int score) { p2score = score; } public String toString(int p1score) { return Integer.toString(p1score); } }
import greenfoot.*; import java.awt.Font; public class Score extends Actor { private String points; public void act() { setText(points); } public Score() { PongGame world = (PongGame) getWorld(); int p1score = world.getP1score(); int p2score = world.getP2score(); points = p1score + "\t" + p2score; GreenfootImage image = new GreenfootImage(150, 20); float fontSize = 12f; image.setColor(Color.WHITE); image.drawString(points, 2, 15); setImage(image); } public void checkForScore() { PongGame world = (PongGame) getWorld(); int margin = getImage().getWidth() / 2; if (getX() - margin <= 0) { int p2score = world.getP2score(); p2score++; world.setP2score(p2score); } else if (getX() + margin >= 600) { int p1score = world.getP1score(); p1score++; world.setP1score(p1score); } setText(points); } public void setText(String text) { GreenfootImage image = getImage(); image.clear(); image.drawString(text, 2, 20); } }
import greenfoot.*; public class Ball extends Actor { private int moveX; private int moveY; public void act() { move(); bounce(); checkForScore(); } public Ball() { moveX = 5; moveY = 5; } public Ball(int speed) { moveX = speed; moveY = speed; } public void move() { int newX = getX() + moveX; int newY = getY() + moveY; setLocation(newX, newY); } public boolean checkForScore() { PongGame world = (PongGame) getWorld(); int margin = getImage().getWidth() / 2; if (getX() - margin <= 0) { int p2score = world.getP2score(); p2score++; world.setP2score(p2score); world.removeObject(this); world.addBall(); return true; } else if (getX() + margin >= 600) { int p1score = world.getP1score(); p1score++; world.setP1score(p1score); world.removeObject(this); world.addBall(); return true; } else { return false; } } public void bounce() { int margin = getImage().getHeight() / 2; if (getY() - margin <= 0 || getY() + margin >= 400) { moveY = -moveY; } if (isTouching(Paddle.class) == true) { moveX = -moveX; } } }
import greenfoot.*; public class Paddle extends Actor { private boolean left; private int moveDistance; public void act() { move(); } public Paddle(boolean isLeft) { left = isLeft; moveDistance = 5; } public Paddle(boolean isLeft, int speed) { left = isLeft; moveDistance = speed; } public void move() { if (left == true) { if (Greenfoot.isKeyDown("w")) { move(moveDistance); } else if (Greenfoot.isKeyDown("s")) { move(-moveDistance); } } else { if (Greenfoot.isKeyDown("up")) { move(moveDistance); } else if (Greenfoot.isKeyDown("down")) { move(-moveDistance); } } } public void moveLeft() { if (Greenfoot.isKeyDown("w") ) { move(moveDistance); } else if (Greenfoot.isKeyDown("s")) { move(-moveDistance); } } public void moveRight() { if (Greenfoot.isKeyDown("up")) { move(moveDistance); } else if (Greenfoot.isKeyDown("down")) { move(-moveDistance); } } }