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 version29;
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        stage.getSoundCache().playSound("missile.wav");
89      }
90      
91      public void fireCluster() {
92        if (clusterBombs == 0)
93          return;
94          
95        clusterBombs--;
96        stage.addActor( new Bomb(stage, Bomb.UP_LEFT, x,y));
97        stage.addActor( new Bomb(stage, Bomb.UP,x,y));
98        stage.addActor( new Bomb(stage, Bomb.UP_RIGHT,x,y));
99        stage.addActor( new Bomb(stage, Bomb.LEFT,x,y));
100       stage.addActor( new Bomb(stage, Bomb.RIGHT,x,y));
101       stage.addActor( new Bomb(stage, Bomb.DOWN_LEFT,x,y));
102       stage.addActor( new Bomb(stage, Bomb.DOWN,x,y));
103       stage.addActor( new Bomb(stage, Bomb.DOWN_RIGHT,x,y));
104     }
105     
106     public int getScore() {   return score; }
107     public void setScore(int i) { score = i;  }
108     public void addScore(int i) { score += i;  }
109   
110     public int getShields() { return shields; }
111     public void setShields(int i) { shields = i;  }
112     public void addShields(int i) {
113       shields += i;
114       if (shields > MAX_SHIELDS) shields = MAX_SHIELDS;
115     }
116     
117     public void collision(Actor a) {
118       if (a instanceof Monster ) {
119         a.remove();
120         addScore(40);
121         addShields(-40);
122       }
123       if (a instanceof Laser ) {
124         a.remove();
125         addShields(-10);
126       }
127       if (getShields() < 0)
128         stage.gameOver();
129     } 
130   
131     public int getClusterBombs() {  return clusterBombs;  }
132     public void setClusterBombs(int i) {  clusterBombs = i; }
133   
134   }
135