📄 561-570.html
字号:
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 + -