You have just been hired by the Object-Oriented Language Development Company (OLD Co.) They have begun development of what they believe to be a radically new computer game, with the wholly original name of Pong. Figure 1 shows a picture of the OLD Co. Pong game:
Pong is a two player game in which each player attempts to prevent the pong-ball from reaching the wall behind his pong-paddle. A player deflects the pong-ball before it reaches the wall by placing his pong-paddle into path of the pong-ball. This causes the ball to bounce off of the paddle in the opposite direction. If the ball reaches the wall behind a player's paddle, the opponent scores. The number of points scored is dependent on the region of the wall contacted by the ball. The closer to the center of the wall the greater the number of points scored.
The high-paid software engineers at OLD Co. have spent years designing the Pong program. They have identified the classes that describe the objects the program will use. They have carefully defined the public interfaces of each of the objects. The specifications for these classes were handed off to the programmers who completed the majority of the implementation. However, just before the project was completed, all of the programmers were offered huge salaries by start-up dot com companies and simply quit on the spot! In exchange for a big check I agreed to write these classes for OLD Co. But being, ever the educator, I decided that writing these classes would be a good experience for you. Of course, I keep the check from OLD Co!
The remainder of this lab describes how to get setup to complete the Pong game and the details of the classes you must write.
Before beginning the lab you will need to do the following things:
These files contain the Graphics and Test classes for OLD Co.'s nearly complete version of the Pong game.
Your assignment is to write and test three classes that are missing from the Pong game. These classes are the PongScore
, PongPaddle
and PongBall
classes.
The PongBall
Class:
Description:
The PongBall
class describes the object which the Pong application uses to represent the ball that bounces around the screen. The following class diagram illustrates the information and operations that are defined by the PongBall
class.
When the Pong application is executed it creates a new PongBall
object that is positioned at the center of the playing field. Approximately every 10th of a second the Pong application calls the move()
method on its PongBall
object causing the ball to update its position. Following the call to move()
the Pong application uses the getX()
and getY()
methods to find the new location of the ball. If the Pong application determines that the ball would have collided with a wall or a paddle it will invoke the bounceX()
or the bounceY()
method to change the horizontal or vertical direction of the ball. Finally, the Pong application will draw the ball on the screen at its new location and the process will be repeated again in another 10th of a second.
Implementation:
Add a new "Empty Java File" to your project and implement the PongBall
class in the file PongBall.java
in your project.
To implement the PongBall
class you will need to define instance data for the x and y position of the ball as well as the velocity of the ball in the x and y directions. Additional information about the constructors and instance methods of the PongBall
class can be found in the Java Documentation for the PongBall
class. Your implementation of the PongBall
class must meet the specifications given in the Java Documentation, so please study it carefully.
Testing:
One way to test the PongBall
class would be to add it to the Pong application and see if the ball begins moving correctly. However, because we do not know precisely how the Pong application uses the PongBall
class, it would be very difficult to determine simply by watching the Pong application if the PongBall
class behaves correctly in every situation. Thus, before adding the PongBall
class to the Pong application we will test its behavior independently.
To test the PongBall
class you will need to use a class named PongBallTest
that contains a main
method. The main
method in the PongBallTest
class creates several PongBall
objects and test their instance methods. For example, the following snippet of code will create a PongBall
object and test the getX()
, getY()
and move()
methods:
Notice that the output of the test program indicates both the correct values and the actual values that are computed. Writing your test programs in this way makes it easy to tell if the class you are testing is working correctly. Please test your PongBall
class by using PongBallTest
and then Run|Run File.
The PongScore
Class:
Description:
The PongScore
class describes the object that the Pong application uses to keep track of the score for each player. The following class diagram illustrates the information and operations that are defined by the PongScore
class.
When the Pong application is executed it creates two PongScore
objects, one for the blue player and one for the green player. Each time the ball contacts the end wall behind the blue paddle, the scorePoints(...)
method of the green player's PongScore
object is invoked, and vice versa. When invoking the scorePoints(...)
method, the Pong application passes it an argument corresponding to the number of points indicated in the region of the wall that was contacted. The Pong application will then invoke the getScore()
method to determine the score to be displayed beside the player's name below the playing field.
Implementation:
Add a new "Empty Java File" to your project and implement the PongScore
class in the file PongScore.java
in your project.
Your implementation must meet the specifications given in the Java Documentation for the PongScore
class.
Testing:
To test the PongScore
class use the class named PongScoreTest
that contains a main
method. Your PongScoreTest
program uses a format similar to that used in PongBallTest
. Please test your PongScore
class by using PongScoreTest
and then Run|Run File.
The PongPaddle
Class:
Description:
The PongPaddle
class describes the objects that the Pong application uses to keep track of the size and location of the pong paddles. The following class diagram illustrates the the information and operations that are defined by the PongPaddle
class:
When the Pong application is run it creates two new PongPaddle
objects: one for the blue player positioned at the left end of the playing field, the other for the green player positioned at the right end of the playing field. When the blue player presses the "A" key, the Pong application invokes the moveUp(...)
method of the blue player's PongPaddle
object. Conversely, when the blue player presses the "Z" key the Pong application invokes the moveDown(...)
method. Similar actions are taken using the green player's PongPaddle
object when the "M" and "K" keys are pressed. The Pong application then uses the getLeftX()
, getTopY()
, getRightX()
and getBottomY()
methods to determine where on the screen the blue and green paddles should be drawn. These methods are also used by the Pong application to determine when the ball collides with one of the paddles.
Implementation:
Add a new "Empty Java File" to your project and implement the PongPaddle
class in the file PongPaddle.java
in your project. Your implementation must meet the specifications given in the Java Documentation for the PongPaddle
class.
Bonus [+5 pts.]: Implement the PongPaddle
class using a java.awt.Rectangle
object for instance data instead of the four values shown in the class diagram. Note: the public interface of the PongPaddle
class must not change.
Testing:
To test the PongPaddle
class use the class named PongPaddleTest
that contains a main
method. Your PongPaddleTest
program uses a format similar to that used in PongBallTest
. Please test your PongPaddle
class by using PongPaddleTest
and then Run|Run File.
When the Pong application is run, pressing the "B" key begins the ball bouncing. When the "A" or "Z" keys are pressed the blue paddle will move up or down. Similarly, when the "K" or "M" keys are pressed the green paddle will move up or down.
Congratulations! You now have a complete working Pong application!
This lab will be worth 200 points.