Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Game programming (http://www.go4expert.com/forums/game-programming-forum/)
-   -   Need help with simple ping pong game (http://www.go4expert.com/forums/help-simple-ping-pong-game-t27831/)

StressedStudent 19Feb2012 03:38

Need help with simple ping pong game
 
Hi, I am new to the forum and as from my name you can guess why i signed up, i realise i am not as experianced as some poeple that may visit this site, actually i litterally only use eclipse and JAVA in my education but I am struggling to understand any of it, i have made it through simple tasks and this last one i cannot grasp. I am not looking for answers just explanations of what i need to do so I have some clue of what it means, I would appriciate readers taking a look at the following code an possibly tell me how to get it working, no fancy changes need to be made to the layout or game itself just the code, Thankyou for taking the time to help me out.
Code:


package engine;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import screens.GameConstants;
import screens.PingPongGreenTable;
/**
* This class is a mouse and keyboard listener.
* It calculates ball and racket movements,
* changes their coordinates.
*/
public class PingPongGameEngine implements Runnable,
MouseMotionListener, KeyListener, GameConstants{
 
private PingPongGreenTable table;//reference to table
private int kidRacket_Y = KID_RACKET_Y_START;
private int computerRacket_Y=COMPUTER_RACKET_Y_START;
private int kidScore;
private int computerScore;
private int ballX; // ball's X position
private int ballY; // ball's Y position
private boolean movingLeft = true;
private boolean ballServed = false;
 
//Value in pixels of the vertical ball movement
private int verticalSlide;
// Constructor. Stores a reference to the table
public PingPongGameEngine(
PingPongGreenTable greenTable){
table = greenTable;
Thread worker = new Thread(this);
worker.start();
}
// Methods required by MouseMotionListener
// interface (some of them are empty, but must be
//included in the class anyway)
public void mouseDragged(MouseEvent e) {
}
 
public void mouseMoved(MouseEvent e) {
int mouse_Y = e.getY();
// If a mouse is above the kid's racket and the racket did not go over the
// table top move it up, otherwise move it down
if (mouse_Y<kidRacket_Y && kidRacket_Y>TABLE_TOP){
kidRacket_Y -= RACKET_INCREMENT;
}else if (kidRacket_Y < TABLE_BOTTOM) {
kidRacket_Y += RACKET_INCREMENT;
}
 
// Set the new position of the racket on the table
table.setKidRacket_Y(kidRacket_Y);
}
 
// Methods required by KeyListener interface
public void keyPressed(KeyEvent e){
char key = e.getKeyChar();
if ('n' == key || 'N' == key){
startNewGame();
} else if ('q' == key || 'Q' == key){
endGame();
} else if ('s' == key || 'S' == key){
kidServe();
}
}
public void keyReleased(KeyEvent e){}
 
public void keyTyped(KeyEvent e){}
 
// Start a new Game
public void startNewGame(){
computerScore=0;
kidScore=0;
table.setMessageText("Score Computer: 0 Kid: 0");
kidServe();
}
// End the game
public void endGame(){
System.exit(0);
}
//Method run() is required by Runnable interface
public void run(){
 
boolean canBounce=false;
while (true) {
 
if(ballServed){ // if ball is moving
 
//Step 1. Is ball moving o the left?
if ( movingLeft && ballX > BALL_MIN_X){
 
canBounce = (ballY >= computerRacket_Y &&
ballY < (computerRacket_Y + RACKET_LENGTH)?
true: false);
ballX-=BALL_INCREMENT;
// Add up or down slide to any left/right ball
// movement
ballY-=verticalSlide;
table.setBallPosition(ballX,ballY);
// Can bounce?
if (ballX <= COMPUTER_RACKET_X && canBounce){
movingLeft=false;
}
}
// Step 2. Is ball moving to the right?
if ( !movingLeft && ballX <= BALL_MAX_X){
canBounce = (ballY >= kidRacket_Y && ballY <
(kidRacket_Y + RACKET_LENGTH)?true:false);
 
ballX+=BALL_INCREMENT;
table.setBallPosition(ballX,ballY);
// Can bounce?
if (ballX >= KID_RACKET_X_START && canBounce){ movingLeft=true;
}
}
 
// Step 3. Move computer's racket up or down
// to block the ball
if (computerRacket_Y < ballY
&& computerRacket_Y < TABLE_BOTTOM){
computerRacket_Y +=RACKET_INCREMENT;
}else if (computerRacket_Y > TABLE_TOP){
computerRacket_Y -=RACKET_INCREMENT;
}
table.setComputerRacket_Y(computerRacket_Y);
// Step 4. Sleep a little
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
 
// Step 5. Update the score if the ball is in the
// green area but is not moving
if (isBallOnTheTable()){
if (ballX > BALL_MAX_X ){
computerScore++;
displayScore();
}else if (ballX < BALL_MIN_X){
kidScore++;
displayScore();
}
}
} // End if ballServed
} // End while
}// End run()
// Serve from the current position of the kid's racket
private void kidServe(){
ballServed = true;
ballX = KID_RACKET_X_START-1;
ballY=kidRacket_Y;
if (ballY > TABLE_HEIGHT/2){
verticalSlide=-1;
}else{
verticalSlide=1;
}
table.setBallPosition(ballX,ballY);
table.setKidRacket_Y(kidRacket_Y);
}
private void displayScore(){
ballServed = false;
 
if (computerScore ==WINNING_SCORE){
table.setMessageText("Computer won! " +
computerScore + ":" + kidScore);
}else if (kidScore ==WINNING_SCORE){
table.setMessageText("You won! "+ kidScore +
":" + computerScore);
}else{
table.setMessageText("Computer: "+ computerScore
+ " Kid: " + kidScore);
}
}
// check if ball did not cross the top or bottom
// borders of the table
private boolean isBallOnTheTable(){
if (ballY >= BALL_MIN_Y && ballY <= BALL_MAX_Y){
return true;
}else {
return false;
}
}
}



All times are GMT +5.5. The time now is 10:51.