Cursos y Másters | ||
| Inicio Profesores Aulas Testimonios Cursos Masters Tecnologías Cursos Gratuitos Solicitar Información Ofertas de Empleo |
| Página Anterior - Puntuación | Página Actual - 23 - Muriendo | Página Siguiente - La venganza de los monstruos |
| Índice de cursos Java gratuitos |
MuriendoUn juego en el que nunca podemos perder no tiene ninguna gracia, así que ya es hora de afrontar este doloroso momento. En este paso haremos que cada vez que un monstruo choca con el jugador, el nivel de escudos disminuya en cierta cantidad. Si el nivel llega a cero y el jugador recibe otro golpe, el juego termina. En primer lugar implementaremos un indicador de "juego finalizado" en la clase principal. Cualquiera puede levantar ese indicador llamando al método gameOver():
. . .
29 public class Invaders extends Canvas implements Stage, KeyListener {
30
31 private BufferStrategy strategy;
32 private long usedTime;
33
34 private SpriteCache spriteCache;
35 private ArrayList actors;
36 private Player player;
37
39
. . .
64 public void gameOver() {
65 gameEnded = true;
66 }
. . .
185 public void paintGameOver() {
186 Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
187 g.setColor(Color.white);
188 g.setFont(new Font("Arial",Font.BOLD,20));
189 g.drawString("GAME OVER",Stage.WIDTH/2-50,Stage.HEIGHT/2);
190 strategy.show();
191 }
. . .
206 public void game() {
207 usedTime=1000;
208 initWorld();
210 long startTime = System.currentTimeMillis();
211 updateWorld();
212 checkCollisions();
213 paintWorld();
214 usedTime = System.currentTimeMillis()-startTime;
215 try {
216 Thread.sleep(SPEED);
217 } catch (InterruptedException e) {}
218 }
220 }
. . .
Cuando el juego termina, simplemente pintamos "GAME OVER" sobre la pantalla y nos quedamos esperando a que el usuario cierre la ventana. Por supuesto, en un juego más profesional se supone que haríamos alguna otra cosa : ofcere la posibilidad de reiniciar el juego, volver a algún menún inicial, apuntar la puntuación conseguida, etc... Veamos ahora los cambios en la clase Player
1 /** 2 * Curso B?sico de desarrollo de Juegos en Java - Invaders 3 * 4 * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducci?n 5 * 6 * http://www.planetalia.com 7 * 8 */ 9 package version23; 10 11 import java.awt.event.KeyEvent; 12 13 public class Player extends Actor { 14 public static final int MAX_SHIELDS = 200; 15 public static final int MAX_BOMBS = 5; 16 protected static final int PLAYER_SPEED = 4; 17 protected int vx; 18 protected int vy; 19 private boolean up,down,left,right; 20 private int clusterBombs; 21 private int score; 22 private int shields; 23 24 25 public Player(Stage stage) { 26 super(stage); 27 setSpriteNames( new String[] {"nave.gif"}); 28 clusterBombs = MAX_BOMBS; 29 shields = MAX_SHIELDS; 30 score = 0; 31 } 32 33 public void act() { 34 super.act(); 35 x+=vx; 36 y+=vy; 37 if (x < 0 ) 38 x = 0; 39 if (x > Stage.WIDTH - getWidth()) 40 x = Stage.WIDTH - getWidth(); 41 if (y < 0 ) 42 y = 0; 43 if ( y > Stage.PLAY_HEIGHT-getHeight()) 44 y = Stage.PLAY_HEIGHT - getHeight(); 45 } 46 47 public int getVx() { return vx; } 48 public void setVx(int i) {vx = i; } 49 public int getVy() { return vy; } 50 public void setVy(int i) {vy = i; } 51 52 53 protected void updateSpeed() { 54 vx=0;vy=0; 55 if (down) vy = PLAYER_SPEED; 56 if (up) vy = -PLAYER_SPEED; 57 if (left) vx = -PLAYER_SPEED; 58 if (right) vx = PLAYER_SPEED; 59 } 60 61 public void keyReleased(KeyEvent e) { 62 switch (e.getKeyCode()) { 63 case KeyEvent.VK_DOWN : down = false;break; 64 case KeyEvent.VK_UP : up = false; break; 65 case KeyEvent.VK_LEFT : left = false; break; 66 case KeyEvent.VK_RIGHT : right = false;break; 67 } 68 updateSpeed(); 69 } 70 71 public void keyPressed(KeyEvent e) { 72 switch (e.getKeyCode()) { 73 case KeyEvent.VK_UP : up = true; break; 74 case KeyEvent.VK_LEFT : left = true; break; 75 case KeyEvent.VK_RIGHT : right = true; break; 76 case KeyEvent.VK_DOWN : down = true;break; 77 case KeyEvent.VK_SPACE : fire(); break; 78 case KeyEvent.VK_B : fireCluster(); break; 79 } 80 updateSpeed(); 81 } 82 83 public void fire() { 84 Bullet b = new Bullet(stage); 85 b.setX(x); 86 b.setY(y - b.getHeight()); 87 stage.addActor(b); 88 } 89 90 public void fireCluster() { 91 if (clusterBombs == 0) 92 return; 93 94 clusterBombs--; 95 stage.addActor( new Bomb(stage, Bomb.UP_LEFT, x,y)); 96 stage.addActor( new Bomb(stage, Bomb.UP,x,y)); 97 stage.addActor( new Bomb(stage, Bomb.UP_RIGHT,x,y)); 98 stage.addActor( new Bomb(stage, Bomb.LEFT,x,y)); 99 stage.addActor( new Bomb(stage, Bomb.RIGHT,x,y)); 100 stage.addActor( new Bomb(stage, Bomb.DOWN_LEFT,x,y)); 101 stage.addActor( new Bomb(stage, Bomb.DOWN,x,y)); 102 stage.addActor( new Bomb(stage, Bomb.DOWN_RIGHT,x,y)); 103 } 104 105 public int getScore() { return score; } 106 public void setScore(int i) { score = i; } 107 public void addScore(int i) { score += i; } 108 109 public int getShields() { return shields; } 110 public void setShields(int i) { shields = i; } 111 public void addShields(int i) { 112 shields += i; 113 if (shields > MAX_SHIELDS) shields = MAX_SHIELDS; 114 } 115 116 public int getClusterBombs() { return clusterBombs; } 117 public void setClusterBombs(int i) { clusterBombs = i; } 118 119 Dado que ahora mismo los monstruos aparecen lejos de nosotros y se mueven en horizontal, la única posibilidad de probar lo que acabamos de añadir es chocándose adrede contra los bichos:
|
||||||||||||||
¿Quieres ser notificado cuando salan nuevos tutoriales y cursos?. Pulsa aquí
| Bomb.java | Bullet.java | Stage.java | Monster.java |
| SpriteCache.java | Invaders.java | Actor.java | Player.java |
| Página Anterior - Puntuación | Página Actual - 23 - Muriendo | Página Siguiente - La venganza de los monstruos |
| Índice de cursos Java gratuitos |
(c) 2004 Planetalia S.L. Todos los derechos reservados. Prohibida su reproducción