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

📄 561-570.html

📁 java game programming e-book
💻 HTML
📖 第 1 页 / 共 2 页
字号:
        gameOver = true;
      }
      waitPeriod = 50;                // set wait period
      clearKeyState();                // clear key buffer
                                      // create explosion
      efm.addShipExplosion(s.locx,s.locy);
    }
  }

/////////////////////////////////////////////////////////////////
// clear key buffers
/////////////////////////////////////////////////////////////////
  private void clearKeyState() {
    for (int i=0; i<keyState.length; i++) {
      keyState[i] = false;
    }
  }

/////////////////////////////////////////////////////////////////
// Pad a number n with zeroes, up to the given length 1
/////////////////////////////////////////////////////////////////

  public String PadNumber(int n,int 1) {
    StringBuffer s;
    s = new StringBuffer(Integer.toString(n));
    while (s.length () < 1) {
      s.insert(0,"0");
    }
    return s.toString();
  }

/////////////////////////////////////////////////////////////////
// Paint all information related to the Ship:
//   Ship sprite
//   Fire sprites
//   Shield
//   Shield status
//   Ships left
/////////////////////////////////////////////////////////////////

  // text Strings needed
  String shieldString = new String("Shield:");
  String noShieldString = new String("No Shield");
  String shipsLeftString = new String("Ships Left:");

  public void paint(Graphics g) {
    g.setColor(Color.yellow);

    // draw ships left indicator
    g.drawString(shipsLeftString,69,20);
    g.drawString(PadNumber(shipsLeft,1),135,20);

    // if ship's alive:
    if (shipAlive) {

      // if shield's on, draw it!
      if (keyState[SHIELDINDEX] && shieldStrength > 0) {
       g.setColor(Color.green);
       g.drawOval(s.locx-15,s.locy-15,30,30);
       g.drawOval(s.locx-17,s.locy-17,34,34);
      }

      // draw shield status
      if (shieldStrength > 0) {
       g.setColor(Color.green);
       g.drawString(shieldString,153,20);
       g.fillRect(199,15,shieldStrength, 5);
      }

      else {
       g.setColor(Color.red);
       g.drawString(noShieldString,153,20);
      }

      // paint the Ship sprite
      s.paint(g);

      // paint the Fire sprites
      for ( int i=0 ; i<MAX_SHOTS; i++) {
       f[i].paint(g);
      }
    }
  }

/////////////////////////////////////////////////////////////////
// Translate keyboard input into Ship sprite actions
/////////////////////////////////////////////////////////////////

  // declare the key buffer
  static boolean keyState[] = new boolean[5];

  // key bindings
  static final int LEFTINDEX = 0;
  static final int LEFT = 'q';         // rotate left

  static final int RIGHTINDEX = 1;
  static final int RIGHT = 'w';        // rotate right

  static final int THRUSTINDEX = 2;
  static final int THRUST = 'o';       // thrust

  static final int FIREINDEX = 3;
  static final int FIRE = 'p';         // fire

  static final int SHIELDINDEX = 4;
  static final int SHIELD = ' ';       // shield



/////////////////////////////////////////////////////////////////
// update Ship and Fire sprites based on key buffer
/////////////////////////////////////////////////////////////////

  public void update() {

    // update fire sprites
    for ( int i=0 ; i<MAX_SHOTS; i++) {
      f[i].update();
    }

    // if ship's alive
    if (shipAlive) {

      // check the key buffer and perform the
      //   associated action

      if (keyState[LEFTINDEX])
       s.rotateLeft();
      if (keyState[RIGHTINDEX])
       s.rotateRight();
      if (keyState[THRUSTINDEX])
       s.thrust();
      if (keyState[FIREINDEX])
       handleFire();
      if (keyState[SHIELDINDEX])
       updateShield();

      // update the Ship sprite
      s.update();
    }

    // otherwise, the ship's not alive!
    else {

      // if the waiting period's over,
      //   initialize a new Ship sprite
      if (!gameOver && (waitPeriod-- <= 0)) {
       s.setAngle(270);
       s.setPosition(width/2,height/2);
       s.setVelocity(0,0);
       s.rotate(0);
       shieldStrength = 100;
       shipAlive = true;
       s.restore();
      }
    }
  }

/////////////////////////////////////////////////////////////////
// initialize parameters for a new game
/////////////////////////////////////////////////////////////////

  public void newGame() {
       s.setAngle(270);
       s.setPosition(width/2,height/2);
       s.setVelocity(0,0);
       s.rotate(0);
       shieldStrength = 100;
       shipAlive = true;
       shipsLeft = 2;
       gameOver = false;
       s.restore();
      }

/////////////////////////////////////////////////////////////////
// increase Shield strength (when the Ship touches a powerup
/////////////////////////////////////////////////////////////////

  public void increaseShield() {
    shieldStrength += 30;
    if (shieldStrength > 250)
      shieldStrength = 250;
  }

/////////////////////////////////////////////////////////////////
// handle keyDown events by setting the appropriate
//   field in the key buffer
/////////////////////////////////////////////////////////////////

  public void keyDown(Event e,int k) {
    switch(k) {
    case LEFT:
      keyState[LEFTINDEX] = true;
      break;
    case RIGHT:
      keyState[RIGHTINDEX] = true;
      break;
    case FIRE:
      keyState[FIREINDEX] = true;
      break;
    case THRUST:
      keyState[THRUSTINDEX] = true;
      break;
    case SHIELD:
      keyState[SHIELDINDEX] = true;
      break;

    default:
      break;
    }
  }

/////////////////////////////////////////////////////////////////
// handle keyDown events by setting the appropriate
//   field in the key buffer
/////////////////////////////////////////////////////////////////

  public void keyUp(Event e,int k) {
    switch(k) {
    case LEFT:
      keyState[LEFTINDEX] = false;
      break;
    case RIGHT:
      keyState[RIGHTINDEX] = false;
      break;
    case FIRE:
      keyState[FIREINDEX] = false;
      break;
    case THRUST:
      keyState[THRUSTINDEX] = false;
      break;
    case SHIELD:
      keyState[SHIELDINDEX] = false;
      break;

    default:
      break;
    }
  }

/////////////////////////////////////////////////////////////////
// update Shield strength (when the player's activating Shield)
/////////////////////////////////////////////////////////////////

  private void updateShield() {
    if (--shieldStrength <= 0) {
      shieldStrength = 0;
    }
  }

/////////////////////////////////////////////////////////////////
// start a new Fire sprite
/////////////////////////////////////////////////////////////////

  private void handleFire() {
    for (int i=0; i<MAX_SHOTS; i++) {
      if (!f[i].isActive()) {

      // start fire from ship's nose at angle theta
     f[i].initialize(s.p.xpoints[0],s.p.ypoints[0],s.theta);
     break;
      }
    }
  }
}
</PRE>
<!-- END CODE //-->
<P><BR></P>
<CENTER>
<TABLE BORDER>
<TR>
<TD><A HREF="547-561.html">Previous</A></TD>
<TD><A HREF="../ewtoc.html">Table of Contents</A></TD>
<TD><A HREF="570-575.html">Next</A></TD>
</TR>
</TABLE>
</CENTER>


</BODY>

⌨️ 快捷键说明

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