1. Trang chủ
  2. » Công Nghệ Thông Tin

Black Art of Java Game Programming PHẦN 7 docx

98 340 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 98
Dung lượng 6,15 MB

Nội dung

Black Art of Java Game Programming:Building the JAVAroids Game // 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 file:///D|/Downloads/Books/Computer/Java/Bla 0Java%20Game%20Programming/ch13/561-570.html (7 von 10) [13.03.2002 13:19:18] Black Art of Java Game Programming:Building the JAVAroids Game 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; } ///////////////////////////////////////////////////////////////// file:///D|/Downloads/Books/Computer/Java/Bla 0Java%20Game%20Programming/ch13/561-570.html (8 von 10) [13.03.2002 13:19:18] Black Art of Java Game Programming:Building the JAVAroids Game // 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: file:///D|/Downloads/Books/Computer/Java/Bla 0Java%20Game%20Programming/ch13/561-570.html (9 von 10) [13.03.2002 13:19:18] Black Art of Java Game Programming:Building the JAVAroids Game 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; } } } } Previous Table of Contents Next file:///D|/Downloads/Books/Computer/Java/Bl Java%20Game%20Programming/ch13/561-570.html (10 von 10) [13.03.2002 13:19:18] Black Art of Java Game Programming:Building the JAVAroids Game Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1571690433 Pub Date: 11/01/96 Previous Table of Contents Next The Enemy Manager By now, you should be getting a better idea of how these managers are organized! The EnemyManager class is responsible for the Enemy sprites and their Fire sprites, which it initializes in its constructor. The update() method checks for collisions between the enemy objects and the ship (and this code is really similar to the AstManager’s update()). In addition, update() starts new enemy ships, using the method NewEnemy(), and initiates enemy firing at random intervals. Finally, the paint() method cycles through all enemy ship sprites and enemy fire sprites, and tells each one to paint itself. Listing 13-16 shows the EnemyManager class. Listing 13-16 EnemyManager class ///////////////////////////////////////////////////////////////// // // EnemyManager responsible for controlling the // Enemy alien sprites, and Enemy Fire // ///////////////////////////////////////////////////////////////// public class EnemyManager extends Object { // constants to define two sizes of enemy ships static final int LARGE = 0; static final int SMALL = 1; static final int SRATX = 3; // x-ratio of large to small static final int SRATY = 2; // y-ratio of large to small // the enemy ship templates // x-coordinate template static final int tpx[][] = { {14,11,8,-8,-11,-14,-6,6,14,-14}, {14/SRATX,11/SRATX,8/SRATX,-8/SRATX,-11/SRATX,-14/SRATX, -6/SRATX,6/SRATX,14/SRATX,-14/SRATX} } ; file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (1 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming:Building the JAVAroids Game // y-coordinate template static final int tpy[][] = { {0,3,6,6,3,0,-4,-4,0,0}, {0/SRATY,3/SRATY,6/SRATY,6/SRATY,3/SRATY,0/SRATY,-4/SRATY, -4/SRATY,0/SRATY,0/SRATY} } ; // screen boundaries static int width,height; // constants parameters for enemy ships static final int MAX_ENEMIES = 3; static final int MAX_SHOTS_PER_ENEMY = 2; static final int MAX_SHOTS = MAX_ENEMIES*MAX_SHOTS_PER_ENEMY; // arrays for color, length, and value of various enemy ships static final Color ENEMY_COLOR[] = {Color.green,Color.red,Color.orange}; static final int ENEMY_LENGTH[] = {14,14,5}; static final int VALUE[] = {500,750,1000}; // maximum speed static final int MAX_VX = 9, MAX_VY = 9; // how often enemies appear, and how often they fire static double enemy_freq = 0.995 ; static double fire_freq = 0.995; // array of Enemy sprites private Enemy e[] = new Enemy[MAX_ENEMIES]; // array of Fire sprites private Fire f[] = new Fire[MAX_SHOTS_PER_ENEMY*MAX_ENEMIES]; // references to other game objects ShipManager sm; EffManager efm; Ship ship; Fire[] shipfire; GameManager game; ///////////////////////////////////////////////////////////////// // EnemyManager constructor ///////////////////////////////////////////////////////////////// public EnemyManager(int width,int height, ShipManager sm, EffManager efm, file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (2 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming:Building the JAVAroids Game GameManager g) { ship = sm.getShip(); // get ship needed for // collision detection shipfire = sm.getFire(); // get ship's fire for this.sm = sm; // collision detection this.efm = efm; game = g; // initialize the three enemy sprites e[0] = new Enemy(tpx[0],tpy[0],tpx[0].length, // template 0,0, // initial loc ENEMY_COLOR[0], // color width,height, // screen bounds ENEMY_LENGTH[0],VALUE[0]); // length,value e[1] = new Enemy(tpx[0],tpy[0],tpx[0].length, 0,0,ENEMY_COLOR[1], width,height, ENEMY_LENGTH[1],VALUE[1]); e[2] = new Enemy(tpx[1],tpy[1],tpx[1].length, 0,0, ENEMY_COLOR[2], width,height, ENEMY_LENGTH[2],VALUE[2]); // suspend the three enemy sprites for (int i=0; i<MAX_ENEMIES; i++) { e[i].suspend(); } // create and suspend the Fire sprites for ( int i=0 ; i<MAX_SHOTS; i++) { f[i] = new Fire(ENEMY_COLOR[i/MAX_SHOTS_PER_ENEMY], width,height); f[i].suspend(); } // save screen bounds this.width = width; this.height = height; } ///////////////////////////////////////////////////////////////// // initialize for new game ///////////////////////////////////////////////////////////////// public void newGame() { file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (3 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming:Building the JAVAroids Game for (int i=0; i<MAX_ENEMIES; i++) { e[i].suspend(); } for (int i=0 ; i<MAX_SHOTS; i++) { f[i] = new Fire(ENEMY_COLOR[i/MAX_SHOTS_PER_ENEMY], width,height); f[i].suspend(); } } ///////////////////////////////////////////////////////////////// // update enemy ships and enemy fire // CHECK FOR COLLISIONS WITH SHIP OR SHIP FIRE ///////////////////////////////////////////////////////////////// public void update() { // check if any of the fire sprites hit the Player's ship. // If so, tell the ShipManager to destroy the ship for ( int i=0 ; i<MAX_SHOTS; i++) { f[i].update(); if (f[i].intersect(ship)) { sm.destroyShip(); } } ///////////////////////////////////////////////////////////////// // cycle through all enemies for ( int i=0 ; i<MAX_ENEMIES; i++) { // place a new enemy on the screen at random intervals if (!e[i].isActive()) { if (Math.random() > enemy_freq) { NewEnemy(i); } } // else update and check for collisions else { e[i].update(); // if it intersects the ship if (e[i].intersect(ship)) { // increase score game.updateScore(e[i].value); file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (4 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming:Building the JAVAroids Game // tell sm to destroy ship sm.destroyShip(); // suspend enemy and create explosion e[i].suspend(); efm.addEnemyExplosion(e[i].locx,e[i].locy); } // check if enemy intersect's ship's fire for (int j=0; j<shipfire.length; j++) { if (e[i].intersect(shipfire[j])) { sm.stopFire(j); // stop fire sprite e[i].suspend(); // stop enemy sprite efm.addEnemyExplosion(e[i].locx,e[i].locy); game.updateScore(e[i].value); } } // create new enemy fire at random intervals if (Math.random() > fire_freq) { Fire(i); } } } } ///////////////////////////////////////////////////////////////// // Accessor methods ///////////////////////////////////////////////////////////////// public Enemy[] getEnemy() { return e; } public Fire[] getFire() { return f; } public void destroyEnemy(int i) { e[i].suspend(); } public void stopFire(int i) { f[i].suspend(); } ///////////////////////////////////////////////////////////////// file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (5 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming:Building the JAVAroids Game // make new enemy at slot i of the Enemy array e ///////////////////////////////////////////////////////////////// private void NewEnemy(int i) { // set the enemy speed e[i].setVelocity(GameMath.getRand(2*MAX_VX)-MAX_VX, GameMath.getRand(2*MAX_VY)-MAX_VY); // set the enemy position int px = (Math.random() > 0.5) ? 0 : width; int py = GameMath.getRand(height); e[i].setPosition(px,py); // restore the sprite e[i].restore(); } ///////////////////////////////////////////////////////////////// // initialize enemy fire for enemy ship i ///////////////////////////////////////////////////////////////// private void Fire(int i) { for (int j = i*MAX_SHOTS_PER_ENEMY; j < (i+1)*MAX_SHOTS_PER_ENEMY; j++) { // if there's a slot in enemy fire array, // initialize and restore the fire sprite if (!f[j].isActive()) { f[j].initialize(e[i].locx,e[i].locy, GameMath.getRand(360)); // random angle f[j].restore(); } } } ///////////////////////////////////////////////////////////////// // paint the enemy ships and their fire ///////////////////////////////////////////////////////////////// public void paint(Graphics g) { for ( int i=0 ; i<MAX_ENEMIES; i++) { e[i].paint(g); } for ( int i=0 ; i<MAX_SHOTS; i++) { f[i].paint(g); } file:///D|/Downloads/Books/Computer/Java/Blac 20Java%20Game%20Programming/ch13/570-575.html (6 von 7) [13.03.2002 13:19:19] [...].. .Black Art of Java Game Programming: Building the JAVAroids Game } } Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 570 - 575 .html (7 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming: Building the JAVAroids Game Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub... Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 575 - 577 .html (3 von 3) [13.03.2002 13:19:20] Black Art of Java Game Programming: Building the JAVAroids Game Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub Date: 11/01/96 Previous Table of Contents Next The Game Manager The GameManager class... Art of Java Game Programming: Building the JAVAroids Game Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/588-590.html (2 von 2) [13.03.2002 13:19:21] Black Art of Java Game Programming: Daleks! Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub Date: 11/01/96 Previous Table of Contents... file:///D|/Downloads/Books/Computer /Java/ Bl Java% 2 0Game% 2 0Programming/ ch13/ 578 -588.html (11 von 12) [13.03.2002 13:19:21] Black Art of Java Game Programming: Building the JAVAroids Game } Recommended Applet Tag to Run JAVAroids Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Bl Java% 2 0Game% 2 0Programming/ ch13/ 578 -588.html (12 von 12) [13.03.2002 13:19:21] Black. .. through an HTML tag) Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch14/591-596.html (4 von 4) [13.03.2002 13:19:22] Black Art of Java Game Programming: Daleks! Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub Date: 11/01/96 Previous Table of Contents Next Animating the Title Screen... objects that need it most Previous Table of Contents Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch14/596-599.html (3 von 3) [13.03.2002 13:19:23] Black Art of Java Game Programming: Daleks! Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub Date: 11/01/96 Previous Table of Contents Next The Animation Loop Now that... (12 von 12) [13.03.2002 13:19:21] Black Art of Java Game Programming: Building the JAVAroids Game Black Art of Java Game Programming by Joel Fan Sams, Macmillan Computer Publishing ISBN: 1 571 690433 Pub Date: 11/01/96 Previous Table of Contents Next Suggestion Box This game s only a starting point Here are a few ideas for further extensions and improvements to the game: • Make the enemy ships more intelligent... next screen of introduction // if game' s being played, restart the game public boolean mouseUp(Event e,int x,int y) { if (intro_screen == INSTRUCTIONS) { intro_screen = TEST_DRIVE; sm.getShip().setPosition(385 ,75 ); file:///D|/Downloads/Books/Computer /Java/ Bla 0Java% 2 0Game% 2 0Programming/ ch13/ 578 -588.html (4 von 12) [13.03.2002 13:19:21] Black Art of Java Game Programming: Building the JAVAroids Game sm.getShip().restore();... 36); offScreenGC.setFont(titleFont); titleX = halfWayX - offScreenGC.getFontMetrics().stringWidth(gameTitle) ⇐ / 2; file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch14/596-599.html (1 von 3) [13.03.2002 13:19:23] Black Art of Java Game Programming: Daleks! titleY = (int)(totalHeight * 0.3); The value of halfWayX is the horizontal center of the applet window in pixels (number of. .. ///////////////////////////////////////////////////////////////// // paint the explosions by stepping through the // explosions Vector file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 575 - 577 .html (2 von 3) [13.03.2002 13:19:20] Black Art of Java Game Programming: Building the JAVAroids Game ///////////////////////////////////////////////////////////////// public void paint (Graphics g) { Enumeration e; e = explosions.elements(); . Next file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 570 - 575 .html (7 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming: Building the JAVAroids Game Black Art of Java Game Programming. } ///////////////////////////////////////////////////////////////// file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 570 - 575 .html (5 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming: Building the JAVAroids Game // make new enemy at slot i of the. } file:///D|/Downloads/Books/Computer /Java/ Blac 2 0Java% 2 0Game% 2 0Programming/ ch13/ 570 - 575 .html (6 von 7) [13.03.2002 13:19:19] Black Art of Java Game Programming: Building the JAVAroids Game } } Previous Table of Contents

Ngày đăng: 12/08/2014, 09:21

TỪ KHÓA LIÊN QUAN