/* Kevin Fleming
Final Exam
Due 5/11/98
Tennis Game
*/
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Tennis2 extends Applet implements KeyListener {
private int ballX = 10, ballY = 100, left = 0, right = 500, top = 0, bottom = 300, hit = 0;
public static int paddle1X = 490, paddle1Y = 100, paddleWidth = 5, paddleHeight = 40;
public int paddle2X = 10, paddle2Y = 100;
private int sleepTime = 0, moveX = 10, moveY =0;
private Image court, buffer, rScore, lScore, lSet1, lSet2, lSet3, rSet1, rSet2, rSet3;
private MediaTracker imageTracker;
private int currentImage = 0, rCount = 0, lCount = 0,
serve = 0, serving = 0, lSet1Count = 0, rSet1Count = 0,lSet2Count = 0, rSet2Count = 0, lSet3Count = 0, rSet3Count = 0;
private Thread animate;
private Graphics gContext;
public void init()
{
serving = 0;
lSet1Count = 0;
rSet1Count = 0;
lSet2Count = 0;
rSet2Count = 0;
lSet3Count = 0;
rSet3Count = 0;
court = getImage(getDocumentBase(), "court.jpg");
rScore = getImage(getDocumentBase(), "score" + rCount + ".jpg");
lScore = getImage(getDocumentBase(), "score" + lCount + ".jpg");
lSet1 = getImage(getDocumentBase(), "setScore" + lSet1Count + ".jpg");
lSet2 = getImage(getDocumentBase(), "setScore" + lSet2Count + ".jpg");
lSet3 = getImage(getDocumentBase(), "setScore" + lSet3Count + ".jpg");
rSet1 = getImage(getDocumentBase(), "setScore" + rSet1Count + ".jpg");
rSet2 = getImage(getDocumentBase(), "setScore" + rSet2Count + ".jpg");
rSet3 = getImage(getDocumentBase(), "setScore" + rSet3Count + ".jpg");
hit = 0;
buffer = createImage(600, 400);
gContext = buffer.getGraphics();
gContext.setColor(Color.white);
gContext.fillRect(0, 0, 500, 300);
imageTracker = new MediaTracker(this);
imageTracker.addImage(court, 0);
try{ imageTracker.waitForID(0); }
catch(InterruptedException e) {}
addKeyListener(this);
requestFocus();
}
public void start()
{
gContext.drawImage(court, 0, 0, this);
gContext.drawImage(rScore, 132, 350, this);
gContext.drawImage(lScore, 132, 313, this);
gContext.drawImage(rSet1, 238, 350, this);
gContext.drawImage(rSet2, 285, 350, this);
gContext.drawImage(rSet3, 335, 350, this);
gContext.drawImage(lSet1, 238, 313, this);
gContext.drawImage(lSet2, 285, 313, this);
gContext.drawImage(lSet3, 335, 313, this);
}
public void score1()
{
serve = 0;
moveY = 0;
paddle1X = 490;
paddle1Y = 100;
paddle2X = 10;
paddle2Y = 100;
if(lCount >= 3 && rCount < 3)
{
if(lSet1Count < 6 && rSet1Count < 6)
lSet1Count++;
else if((lSet1Count == 6 || rSet1Count == 6) && lSet2Count < 6 && rSet2Count < 6)
lSet2Count++;
else if((lSet1Count == 6 || rSet1Count == 6) && (lSet2Count == 6 || rSet2Count == 6) && lSet3Count < 5 && rSet3Count < 6)
lSet3Count++;
else if(lSet1Count == 6 && lSet2Count == 6 && lSet3Count == 5)
{
lSet3Count++;
showStatus("Left Player Wins!");
serve = -1;
}
rCount = 0;
lCount = 0;
lScore = getImage(getDocumentBase(), "score" + lCount + ".jpg");
rScore = getImage(getDocumentBase(), "score" + rCount + ".jpg");
lSet1 = getImage(getDocumentBase(), "setScore" + lSet1Count + ".jpg");
lSet2 = getImage(getDocumentBase(), "setScore" + lSet2Count + ".jpg");
lSet3 = getImage(getDocumentBase(), "setScore" + lSet3Count + ".jpg");
rSet1 = getImage(getDocumentBase(), "setScore" + rSet1Count + ".jpg");
rSet2 = getImage(getDocumentBase(), "setScore" + rSet2Count + ".jpg");
rSet3 = getImage(getDocumentBase(), "setScore" + rSet3Count + ".jpg");
if(serving == 0)
{
setX();
hit = 1;
ballX = 490;
ballY = 100;
serving = 1;
}
else
{
ballX = 10;
ballY = 100;
serving = 0;
hit = 0;
}
}
else
{
lCount++;
lScore = getImage(getDocumentBase(), "score" + lCount + ".jpg");
if(serving == 0)
{
ballX = 10;
ballY = 100;
hit = 0;
}
else
{
setX();
ballX = 490;
ballY = 100;
hit = 1;
}
}
}
public void score2()
{
serve = 0;
moveY = 0;
paddle1X = 490;
paddle1Y = 100;
paddle2X = 10;
paddle2Y = 100;
if(rCount >= 3 && lCount < 3)
{
if(rSet1Count < 6 && lSet1Count < 6)
rSet1Count++;
else if((rSet1Count == 6 || lSet1Count == 6) && rSet2Count < 6 && lSet2Count < 6)
rSet2Count++;
else if((rSet1Count == 6 || lSet1Count == 6) && (rSet2Count == 6 || lSet2Count == 6) && rSet3Count < 5 && lSet3Count < 6)
rSet3Count++;
else if(rSet1Count == 6 && rSet2Count == 6 && rSet3Count == 5)
{
rSet3Count++;
showStatus("Right Player Wins!");
serve = -1;
}
rCount = 0;
lCount = 0;
rScore = getImage(getDocumentBase(), "score" + rCount + ".jpg");
lScore = getImage(getDocumentBase(), "score" + lCount + ".jpg");
lSet1 = getImage(getDocumentBase(), "setScore" + lSet1Count + ".jpg");
lSet2 = getImage(getDocumentBase(), "setScore" + lSet2Count + ".jpg");
lSet3 = getImage(getDocumentBase(), "setScore" + lSet3Count + ".jpg");
rSet1 = getImage(getDocumentBase(), "setScore" + rSet1Count + ".jpg");
rSet2 = getImage(getDocumentBase(), "setScore" + rSet2Count + ".jpg");
rSet3 = getImage(getDocumentBase(), "setScore" + rSet3Count + ".jpg");
if(serving == 0)
{
hit = 1;
ballX = 490;
ballY = 100;
serving = 1;
}
else
{
setX();
ballX = 10;
ballY = 100;
serving = 0;
hit = 0;
}
}
else
{
rCount++;
rScore = getImage(getDocumentBase(), "score" + rCount + ".jpg");
if(serving == 0)
{
setX();
ballX = 10;
ballY = 100;
hit = 0;
}
else
{
ballX = 490;
ballY = 100;
hit = 1;
}
}
}
public void setValues1(int x, int y)
{
paddle1X = x;
paddle1Y = y;
}
public void setValues2(int x, int y)
{
paddle2X = x;
paddle2Y = y;
}
public void setX()
{
moveX *= -1;
}
public void paint(Graphics g)
{
g.drawImage(buffer, 0, 0,this);
if(imageTracker.checkID(currentImage, true))
{
gContext.fillRect(0, 0, 500, 300);
gContext.drawImage(court, 0, 0, this);
gContext.drawImage(rScore, 132, 313, this);
gContext.drawImage(lScore, 132, 350, this);
gContext.drawImage(rSet1, 238, 313, this);
gContext.drawImage(rSet2, 285, 313, this);
gContext.drawImage(rSet3, 335, 313, this);
gContext.drawImage(lSet1, 238, 350, this);
gContext.drawImage(lSet2, 285, 350, this);
gContext.drawImage(lSet3, 335, 350, this);
gContext.setColor(Color.yellow);
gContext.fillOval(ballX, ballY, 7, 7);
gContext.setColor(Color.black);
gContext.fillRect(paddle1X, paddle1Y, 5, 40);
gContext.fillRect(paddle2X, paddle2Y, 5, 40);
if(serve == 1)
{
if(hit == 0)
{
if(ballX == paddle1X)
{
if(ballY >= paddle1Y && ballY < (paddle1Y + 15))
{
moveY = (-1);
setX();
hit = 1;
}
else if(ballY >= (paddle1Y + 15) && ballY < (paddle1Y + 24))
{
moveY = 0;
setX();
hit = 1;
}
else if(ballY >= (paddle1Y + 24) && ballY < (paddle1Y + 40))
{
moveY = 1;
setX();
hit = 1;
}
}
else if(ballX > 495)
score1();
else if((ballY < 0 || ballY > 300) && (ballX > 250))
{
score1();
}
else if((ballY < 0 || ballY > 300) && (ballX < 250))
{
setX();
score2();
}
ballX += moveX;
ballY += moveY;
}
if(hit == 1)
{
if(ballX == paddle2X)
{
if(ballY >= paddle2Y && ballY < (paddle2Y + 15))
{
moveY = (-1);
setX();
hit = 0;
}
else if(ballY >= (paddle2Y + 15) && ballY < (paddle2Y + 24))
{
moveY = 0;
setX();
hit = 0;
}
else if(ballY >= (paddle2Y + 24) && ballY < (paddle2Y + 40))
{
moveY = 1;
setX();
hit = 0;
}
}
else if(ballX <= 0)
{
score2();
}
else if((ballY < 0 || ballY > 300) && (ballX > 250))
{
setX();
score1();
}
else if((ballY < 0 || ballY > 300) && (ballX < 250))
{
score2();
}
ballX += moveX;
ballY += moveY;
}
}
else
showStatus("Press ENTER to serve");
}
try { Thread.sleep(sleepTime); }
catch(InterruptedException e) { showStatus(e.toString()); }
repaint();
}
public void update(Graphics g) {paint(g);}
public void keyPressed(KeyEvent e)
{
if((e.getKeyText(e.getKeyCode())).equals("D"))
{
setValues2((paddle2X + 10), paddle2Y);
}
else if((e.getKeyText(e.getKeyCode())).equals("W"))
{
setValues2((paddle2X), (paddle2Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("X"))
{
setValues2((paddle2X), (paddle2Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("A"))
{
setValues2((paddle2X - 10), (paddle2Y));
}
else if((e.getKeyText(e.getKeyCode())).equals("C"))
{
setValues2((paddle2X + 10), (paddle2Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("E"))
{
setValues2((paddle2X + 10), (paddle2Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("Q"))
{
setValues2((paddle2X - 10), (paddle2Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("Z"))
{
setValues2((paddle2X - 10), (paddle2Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-6"))
{
setValues1((paddle1X + 10), paddle1Y);
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-8"))
{
setValues1((paddle1X), (paddle1Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-2"))
{
setValues1((paddle1X), (paddle1Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-4"))
{
setValues1((paddle1X - 10), (paddle1Y));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-3"))
{
setValues1((paddle1X + 10), (paddle1Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-9"))
{
setValues1((paddle1X + 10), (paddle1Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-7"))
{
setValues1((paddle1X - 10), (paddle1Y - 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("NumPad-1"))
{
setValues1((paddle1X - 10), (paddle1Y + 10));
}
else if((e.getKeyText(e.getKeyCode())).equals("Enter"))
{
if(serve == 0)
serve = 1;
else
showStatus("Game Over");
}
else
showStatus(e.getKeyText(e.getKeyCode()));
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}