📄 578-588.html
字号:
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><applet code=“GameManager.class” width=400 height=400>
</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 + -