import java.applet.*; import java.awt.*; import java.util.*; public class Game extends Applet implements Runnable { public static final int SLEEP = 10; public final int BallNum = 3; Region region[]; PBall Ball[]; Polygon p1, p2; Flipper LB, RB; boolean LBarUp = false, RBarUp = false; Graphics g; BallTrack BTrack; int LMouseX, LMouseY; AudioClip hitSound; Rectangle resetarea; int Red = 0; int Green = 0; int Blue = 200; int colorstep = 20; int grade = 0; Image bkimage, offscreen1, offscreen2; MediaTracker tracker; Thread displaythread; public void init () { Graphics offg; super.init (); hitSound = getAudioClip (getDocumentBase(), "Sound.au"); bkimage = getImage (getDocumentBase(), "background3.jpg"); tracker = new MediaTracker (this); tracker.addImage(bkimage, 0); try { tracker.waitForID(0); } catch (InterruptedException e) {}; g = getGraphics(); resetarea = new Rectangle (20, 350, 100, 60); region = new Region[10]; region[0] = new Region (this, 160, 390, 80, 30, Region.ENDREGION); region[1] = new Region (this, 55, 50, 290, 340, Region.BOUNDARY); region[2] = new Region (this, 50, 260, 160, 350, 50, 350); region[3] = new Region (this, 350, 260, 240, 350, 350, 350); region[4] = new Region (this, 125, 177, 20); region[5] = new Region (this, 275, 177, 20); region[6] = new Region (this, 200, 133, 20); region[7] = new Region (this, 55, 50, 345, 195); region[8] = new Region (this, 50, 350, 110-2, 50, Region.RECTANGLE); region[9] = new Region (this, 240+2, 350, 110, 50, Region.RECTANGLE); LMouseX = 0; LMouseY = 0; LB = new Flipper (160, 350, region[2].tangle, this, Flipper.LEFT); RB = new Flipper (240, 350, region[3].tangle, this, Flipper.RIGHT); Ball = new PBall[BallNum]; BTrack = new BallTrack (this, Ball); newGame (); offscreen1 = createImage (size().width, size().height); offscreen2 = createImage (size().width, size().height); offg = offscreen1.getGraphics (); drawbackground (offg); offg = offscreen2.getGraphics (); offg.drawImage (offscreen1, 0, 0, null); offg.dispose (); LB.start(); RB.start(); } public void paint (Graphics g) { g.drawImage (offscreen2, 0, 0, this); LB.showBar (g, Color.red, Color.lightGray); RB.showBar (g, Color.red, Color.lightGray); if (BTrack.Ready) BTrack.BallReady (); } public void newGame () { grade = 0; for (int i=0; i 0) && (y > LMouseY)) { BTrack.DownTBar (); } return true; } public boolean mouseUp (Event e, int x, int y) { if (LMouseY > 0) { BTrack.start (); LMouseY = 0; } else { LBarUp = false; RBarUp = false; } return true; } public void hitplay () { hitSound.play (); } public void drawbackground (Graphics g) { int i; g.drawImage (bkimage, 0, 0, this); for (i=0; i<10; i++) { g.setColor(new Color(Red+i*colorstep,Green+i*colorstep,Blue)); g.drawLine(35+i,195,35+i,260); g.drawLine(345+i,195,345+i,208); g.drawLine(345+i,210+2*(PBall.ria+3),345+i,260); g.drawArc(35+i+1, 30+i+1, 330-2*(i+1), 330-2*(i+1), 180,-180); g.drawLine(35+i,260,140+i,350); g.drawLine(345+i,260,240+i,350); g.drawLine(140+i,350,140+i,420-i); g.drawLine(240+i,350,240+i,400+i); g.drawLine(140+i,420-i,260-i,420-i); g.drawArc (295+i, 190+i, 140-2*i, 140-2*i, 0, 90); g.drawArc (315+2*(PBall.ria+3)+i, 210+2*(PBall.ria+3)+i, 100-4*(PBall.ria+3)-2*i, 100-4*(PBall.ria+3)-2*i, 0, 90); g.setColor(new Color(Red+(9-i)*colorstep,Green+(9-i)*colorstep,Blue)); g.drawLine(45+i,195,45+i,260); g.drawLine(355+i,195,355+i,208); g.drawLine(355+i,210+2*(PBall.ria+3),355+i,260); g.drawArc(45+i+1, 40+i+1, 310-2*(i+1), 310-2*(i+1), 180,-180); g.drawLine(45+i,260,150+i,350); g.drawLine(355+i,260,250+i,350); g.drawLine(150+i,350,150+i,410-i); g.drawLine(250+i,350,250+i,410+i); g.drawLine(150+i,410-i,250-i,410-i); g.drawArc (305+i, 200+i, 120-2*i, 120-2*i, 0, 90); g.drawArc (325+2*(PBall.ria+3)+i, 220+2*(PBall.ria+3)+i, 80-4*(PBall.ria+3)-2*i, 80-4*(PBall.ria+3)-2*i, 0, 90); } for (i=0; i<10; i++) { g.setColor(new Color(Red+i*colorstep,Green+i*colorstep,Blue)); g.drawLine(365-i, 190+i, 366, 190+i); g.drawLine(345+i, 210+2*(PBall.ria+3)+i, 366, 210+2*(PBall.ria+3)+i); g.drawLine(395-2*(PBall.ria+3)+i+1, 260, 395-2*(PBall.ria+3)+i+1, 300); g.drawLine(395+2*(PBall.ria+3)+i+3, 260, 395+2*(PBall.ria+3)+i+3, 300); g.setColor(new Color(Red+(9-i)*colorstep,Green+(9-i)*colorstep,Blue)); g.drawLine(355-i, 200+i, 366, 200+i); g.drawLine(355+i, 220+2*(PBall.ria+3)+i, 366, 220+2*(PBall.ria+3)+i); g.drawLine(405-2*(PBall.ria+3)+i+1, 260, 405-2*(PBall.ria+3)+i+1, 300); g.drawLine(405+2*(PBall.ria+3)+i+3, 260, 405+2*(PBall.ria+3)+i+3, 300); g.setColor(new Color(Blue, Red+i*colorstep,Green+i*colorstep)); g.fillRect (360, 10+3*i, 40, 3); g.fillArc (330+3*i, 10+3*i, 60-6*i, 60-6*i, 90, 180); g.fillArc (370+3*i, 10+3*i, 60-6*i, 60-6*i, 90, -180); g.setColor(new Color(Blue, Red+(9-i)*colorstep,Green+(9-i)*colorstep)); g.fillRect (360, 40+3*i, 40, 3); g.setColor(new Color(Green+i*colorstep, Blue, Red+i*colorstep)); g.fillRect (50, 350+3*i, 40, 3); g.fillArc (20+3*i, 350+3*i, 60-6*i, 60-6*i, 90, 180); g.fillArc (60+3*i, 350+3*i, 60-6*i, 60-6*i, 90, -180); g.setColor(new Color(Green+(9-i)*colorstep, Blue, Red+(9-i)*colorstep)); g.fillRect (50, 380+3*i, 40, 3); } g.setFont (new Font("Helvetica", Font.BOLD, 16)); g.setColor (Color.white); g.drawString ("New Game", 30, 385); g.setColor (Color.black); g.drawString ("New Game", 29, 384); for (i=0; i