Curso - Programación de un Space Invaders en Java

  Página Anterior - Barra de estado Página Actual - 22 - Puntuación   Página Siguiente - Muriendo
  Índice del curso  

Puntuación

(c) Alexander Hristov

El paso que daremos a continuación es prácticamente trivial. Cuando matamos a un monstruo, queremos que nuestra puntuación aumente en - por ejemplo - 20 puntos. Este cambio lo haremos en el método de la clase Monster que se llama cuando ocurre una colisión. Sin embargo hay un pequeño problema y es que la puntuación es un atributo del jugador, y la clase Monster no tiene acceso a esta variable. Dado que podemos necesitar acceder a la instancia del jugador desde multitud de sitios distintos, por ejemplo para aumentar el número de bombas, para disminuir los escudos, etc., lo que haremos es añadir un método a la clase Stage para obtener a la instancia del jugador desde cualquier punto del programa


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 version22;
10    
11    import java.awt.image.ImageObserver;
12    
13    public interface Stage extends ImageObserver {
14      public static final int WIDTH=640;
15      public static final int HEIGHT=480;
16      public static final int PLAY_HEIGHT = 400; 
17      public static final int SPEED=10;
18      public SpriteCache getSpriteCache();
19      public void addActor(Actor a);
20 public Player getPlayer();
21 } 22

Por supuesto este método hay que implementarlo en la clase Invaders:


           . . .  
81      
82      public Player getPlayer() {
83        return player;
84      }
85      
           . . .  

Ahora que podemos obtener una referencia al jugador, utilizamos este método para aumentar la puntuación cada vez que un monstruo es destruido:


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 version22;
10    
11    public class Monster extends Actor {
12      protected int vx;
13      
14      public Monster(Stage stage) {
15        super(stage);
16        setSpriteNames( new String[] {"bicho0.gif","bicho1.gif"});
17        setFrameSpeed(35);
18      }
19      
20      public void act() {
21        super.act();
22        x+=vx;
23        if (x < 0 || x > Stage.WIDTH)
24          vx = -vx;
25      }
26    
27      public int getVx() { return vx; }
28      public void setVx(int i) {vx = i; }
29      
30      public void collision(Actor a) {
31        if (a instanceof Bullet || a instanceof Bomb) {
32          remove();
33 stage.getPlayer().addScore(20);
34 } 35 } 36 } 37


Lista de archivos Java del programa en este paso

Actor.java Bomb.java Bullet.java Invaders.java
Monster.java Player.java SpriteCache.java Stage.java

Lista de recursos

bicho.gif bicho0.gif bicho1.gif bicho2.gif
bombD.gif bombDL.gif bombDR.gif bombL.gif
bombR.gif bombU.gif bombUL.gif bombUR.gif
disparo.gif disparo0.gif disparo1.gif disparo2.gif
explosion.wav misil.gif missile.wav musica.wav
nave.gif oceano.gif photon.wav Thumbs.db

  Página Anterior - Barra de estado Página Actual - 22 - Puntuación   Página Siguiente - Muriendo
  Índice del curso  

(c) 2004 Planetalia S.L. Todos los derechos reservados. Prohibida su reproducción