⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 578-588.html

📁 java game programming e-book
💻 HTML
📖 第 1 页 / 共 2 页
字号:
       em.update();                  // update enemies
       am.update();                  // update asteroids
       efm.update();                 // update effects
       repaint();

       Thread.currentThread().yield();
       time = new Date();            // track time
       t2 = time.getTime();
       dt = t2-t1;                   // how long did it take?

                                     // sleep
       try {
       Thread.sleep (REFRESH_RATE-(int)dt < 0
         ? 8
         : REFRESH_RATE-(int)dt);
       } catch (Exception exc) { };

      }

      // else not playing
      else {
       updateOpening();              // update opening
       repaint();
       Thread.currentThread().yield();
       try {
       Thread.sleep (REFRESH_RATE);// sleep
       } catch (Exception exc) { };
      }
    }
  }

/////////////////////////////////////////////////////////////////
// initialize the AstManager and EnemyManager for the
// INSTRUCTIONS screen.
/////////////////////////////////////////////////////////////////
  private void startInstructions() {
    Asteroid a[] = am.getAsts();
    Asteroid p = am.getPowerup();
    // set asteroids in instruction screen
    a[0].setPosition(270,98);
    a[0].setRotationRate(4);
    a[0].setVelocity(1,2);
    a[0].restore();
    a[am.NUM_LARGE].setPosition(330,138);
    a[am.NUM_LARGE].setRotationRate(-4);
    a[am.NUM_LARGE].setVelocity(-1,-1);
    a[am.NUM_LARGE].restore();
    a[am.NUM_LARGE+am.NUM_MEDIUM].setPosition(370,178);
    a[am.NUM_LARGE+am.NUM_MEDIUM].setRotationRate(5);
    a[am.NUM_LARGE+am.NUM_MEDIUM].setVelocity(2,-1);
    a[am.NUM_LARGE+am.NUM_MEDIUM].restore();

    // set powerup in intro screen
    p.setPosition(330,340);
    p.restore();

    // set enemies for intro screen
    Enemy e[] = em.getEnemy();
    e[0].setPosition(10,214);
    e[0].setVelocity(2,0);
    e[0].restore();
    e[1].setPosition(390,254);
    e[1].setVelocity(-3,0);
    e[1].restore();
    e[2].setPosition(7,294);
    e[2].setVelocity(4,0);
    e[2].restore();
  }

/////////////////////////////////////////////////////////////////
// update the opening screens
/////////////////////////////////////////////////////////////////
  private void updateOpening() {
    if (intro_screen == INSTRUCTIONS) {
      am.update();
      Enemy e[] = em.getEnemy();
      e[0].update();
      e[1].update();
      e[2].update();
      efm.update();
    }
    else if (intro_screen == TEST_DRIVE) {
      sm.update();
    }
  }


/////////////////////////////////////////////////////////////////
// update the score. If the score passes threshold
// (every EXTRA_SHIP points) give an extra ship!
/////////////////////////////////////////////////////////////////
  public void updateScore(int val) {
    score += val;
    if ((score / EXTRA_SHIP) > current_extra) {
      sm.extraShip();                   // give extra ship
      current_extra = score/EXTRA_SHIP;
    }
  }

/////////////////////////////////////////////////////////////////
// override update() to eliminate flicker
/////////////////////////////////////////////////////////////////
  public void update(Graphics g) {
    paint(g);                            // don't clear screen
  }

/////////////////////////////////////////////////////////////////
// return a string of n that is 0-padded with the given length
/////////////////////////////////////////////////////////////////
  public String PadNumber(int n,int len) {
    StringBuffer s;
    s = new StringBuffer(Integer.toString(n));
    while (s.length () < len) {
      s.insert(0,"0");
    }
    return s.toString();
  }

/////////////////////////////////////////////////////////////////
// define Strings used in the Opening screens
/////////////////////////////////////////////////////////////////

  // Strings used in INSTRUCTIONS screen
  String javaroidsString = new String("JAVAroids!");
  String galleryString = new String("The Lineup...");
  String largeAstString =
    new String("30 points for Big Asteroid");
  String mediumAstString =
    new String("60 points for Medium Asteroid");
  String smallAstString =
    new String("90 points for Small Asteroid");
  String greenAlienString =
    new String("500 points for Green Alien");
  String redAlienString =
    new String("750 points for Red Alien");
  String orangeAlienString =
    new String("1000 points for Orange Alien");
  String clickMouseString1 =
    new String("Click mouse to continue...");
  String powerupString1 =
    new String("Touch PowerUp for");
  String powerupString2 =
    new String("extra shield strength:");

  // Strings used in the TEST_DRIVE screen
  String shipControlString =
    new String("Test Drive your ship NOW ---> ");
  String rotLeftString = new String("Press 'q' to Rotate Left");
  String rotRightString =
    new String("Press 'w' to Rotate Right");
  String thrustString = new String("Press 'o' to Thrust");
  String fireString = new String("Press 'p' to Fire");
  String shieldString =
    new String("Press <space bar> for Shield");

  String extraShipString =
    new String("Extra Ship every 10,000 points");
  String goodLuckString =
    new String("GOOD LUCK!");
  String clickMouseString =
    new String("Click mouse to begin!");
  String byMeString = new String("by Joel Fan");

  String gameOverString = new String("GAME OVER");
  String clickMouseString2 =
    new String("Click mouse to play again!");

/////////////////////////////////////////////////////////////////
// paint to the screen, depending on mode of game
/////////////////////////////////////////////////////////////////
  public void paint(Graphics g) {

    // clear offscreen buffer
    gbuf.setColor(Color.black);
    gbuf.fillRect(0,0,MAX_WIDTH,MAX_HEIGHT);

    if (playing) {

      // if game's not over, show the ship.
      if (!gameOver) {
       sm.paint(gbuf);
      }

      // otherwise, display the Game Over message
      else {
       gbuf.setFont(bigfont);
       gbuf.setColor(Color.cyan);
       gbuf.drawString(byMeString,
                     MAX_WIDTH/2 - 55, MAX_HEIGHT/2-60);

       gbuf.setColor(Color.magenta);
       gbuf.drawString(gameOverString,
                     MAX_WIDTH/2 - 65, MAX_HEIGHT/2);

       gbuf.drawString(clickMouseString2,
                     MAX_WIDTH/2 - 120, MAX_HEIGHT/2+35);
       gbuf.setFont(smallfont);
      }

      // tell other manager classes to paint themselves
      em.paint(gbuf);                     // paint enemies
      am.paint(gbuf);                     // paint asteroids
      efm.paint(gbuf);                    // paint effects

      // draw the score
      gbuf.drawString(PadNumber(score,6),20,20);

      // draw offscreen image to screen
      g.drawImage(im,0,0,this);
    }

    else if (intro_screen == INSTRUCTIONS) {
      paintInstructions(g);
    }

    else if (intro_screen == TEST_DRIVE) {
      paintTestDrive(g);
    }
  }

/////////////////////////////////////////////////////////////////
// paint Instructions screen
//   coordinates are hardcoded for simplicity
/////////////////////////////////////////////////////////////////
  public void paintInstructions(Graphics g) {

    gbuf.setFont(bigfont);

    // set a random color
    gbuf.setColor(new Color(GameMath.getRand(155)+100,
                         GameMath.getRand(155)+100,
                         GameMath.getRand(155)+100));
    gbuf.drawString(javaroidsString,MAX_WIDTH/2 - 60, 30);
    gbuf.setColor(Color.yellow);
    gbuf.setFont(medfont);
    gbuf.setColor(Color.magenta);
    gbuf.setFont(bigfont);
    gbuf.drawString(largeAstString,25,80);
    gbuf.drawString(mediumAstString,25,120);
    gbuf.drawString(smallAstString,25,160);
    gbuf.setColor(Color.green);
    gbuf.drawString(greenAlienString,25,200);
    gbuf.setColor(Color.red);
    gbuf.drawString(redAlienString,25,240);
    gbuf.setColor(Color.orange);
    gbuf.drawString(orangeAlienString,25,280);
    gbuf.setColor(Color.green);
    gbuf.drawString(powerupString1,25,320);
    gbuf.drawString(powerupString2,50,350);
    gbuf.setColor(Color.yellow);
    gbuf.drawString(clickMouseString1,MAX_WIDTH/2-120,385);
    am.paint(gbuf);
    Enemy e[] = em.getEnemy();
    e[0].paint(gbuf);
    e[1].paint(gbuf);
    e[2].paint(gbuf);
    efm.paint(gbuf);
    // dump offscreen buffer to screen
    g.drawImage(im,0,0,this);

  }

/////////////////////////////////////////////////////////////////
// paint the test drive screen
//   coordinates are hardcoded for simplicity
/////////////////////////////////////////////////////////////////
  public void paintTestDrive(Graphics g) {

    gbuf.setFont(smallfont);
    sm.paint(gbuf);            // paint the ship
    gbuf.setFont(bigfont);

    gbuf.setColor(new Color(GameMath.getRand(155)+100,
                         GameMath.getRand(155)+100,
                         GameMath.getRand(155)+100));
    gbuf.drawString(javaroidsString,MAX_WIDTH/2 - 60, 50);
    gbuf.setColor(Color.magenta);
    gbuf.drawString(shipControlString,25,80);
    gbuf.setColor(Color.orange);
    gbuf.drawString(rotLeftString,25,130);
    gbuf.drawString(rotRightString,25,170);
    gbuf.drawString(thrustString,25,210);
    gbuf.drawString(fireString,25,250);
    gbuf.drawString(shieldString,25,290);
    gbuf.setColor(Color.cyan);
    gbuf.drawString(extraShipString,25,340);
    gbuf.setColor(Color.green);
    gbuf.drawString(clickMouseString,MAX_WIDTH/2-120,385);
    g.drawImage(im,0,0,this);

  }

}
</PRE>
<!-- END CODE //-->

<TABLE BORDER="2" BORDERCOLOR="#0000" WIDTH="100%" ALIGN="CENTER">
<TR><TD><FONT SIZE="+1"><B>Recommended Applet Tag to Run JAVAroids</B></FONT>
<P>&lt;applet code=&#147;GameManager.class&#148; width=400 height=400&gt;
</P>
</TABLE>

<P><BR></P>
<CENTER>
<TABLE BORDER>
<TR>
<TD><A HREF="575-577.html">Previous</A></TD>
<TD><A HREF="../ewtoc.html">Table of Contents</A></TD>
<TD><A HREF="588-590.html">Next</A></TD>
</TR>
</TABLE>
</CENTER>


</BODY>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -