/* 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) {} }