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 version20;
10    
11    import java.awt.event.KeyEvent;
12    
13    public class Player extends Actor {
14      protected static final int PLAYER_SPEED = 4;
15      protected int vx;
16      protected int vy;
17      private boolean up,down,left,right;
18      private int clusterBombs; 
19        
20      
21      public Player(Stage stage) {
22        super(stage);
23        setSpriteNames( new String[] {"nave.gif"});
24        clusterBombs = 5;
25      }
26      
27      public void act() {
28        super.act();
29        x+=vx;
30        y+=vy;
31        if (x < 0 || x > Stage.WIDTH)
32          vx = -vx;
33        if (y < 0 || y > Stage.HEIGHT)
34          vy = -vy;
35      }
36    
37      public int getVx() { return vx; }
38      public void setVx(int i) {vx = i; }
39      public int getVy() { return vy; }
40      public void setVy(int i) {vy = i; }
41      
42      
43      protected void updateSpeed() {
44        vx=0;vy=0;
45        if (down) vy = PLAYER_SPEED;
46        if (up) vy = -PLAYER_SPEED;
47        if (left) vx = -PLAYER_SPEED;
48        if (right) vx = PLAYER_SPEED;
49      }
50      
51      public void keyReleased(KeyEvent e) {
52        switch (e.getKeyCode()) {
53          case KeyEvent.VK_DOWN : down = false;break;
54          case KeyEvent.VK_UP : up = false; break;
55          case KeyEvent.VK_LEFT : left = false; break; 
56          case KeyEvent.VK_RIGHT : right = false;break;
57        }
58        updateSpeed();
59      }
60      
61      public void keyPressed(KeyEvent e) {
62        switch (e.getKeyCode()) {
63          case KeyEvent.VK_UP : up = true; break;
64          case KeyEvent.VK_LEFT : left = true; break;
65          case KeyEvent.VK_RIGHT : right = true; break;
66          case KeyEvent.VK_DOWN : down = true;break;
67          case KeyEvent.VK_SPACE : fire(); break;
68          case KeyEvent.VK_B : fireCluster(); break;
69        }
70        updateSpeed();
71      }
72      
73      public void fire() {
74        Bullet b = new Bullet(stage);
75        b.setX(x);
76        b.setY(y - b.getHeight());
77        stage.addActor(b);
78      }
79      
80      public void fireCluster() {
81        if (clusterBombs == 0)
82          return;
83          
84        clusterBombs--;
85        stage.addActor( new Bomb(stage, Bomb.UP_LEFT, x,y));
86        stage.addActor( new Bomb(stage, Bomb.UP,x,y));
87        stage.addActor( new Bomb(stage, Bomb.UP_RIGHT,x,y));
88        stage.addActor( new Bomb(stage, Bomb.LEFT,x,y));
89        stage.addActor( new Bomb(stage, Bomb.RIGHT,x,y));
90        stage.addActor( new Bomb(stage, Bomb.DOWN_LEFT,x,y));
91        stage.addActor( new Bomb(stage, Bomb.DOWN,x,y));
92        stage.addActor( new Bomb(stage, Bomb.DOWN_RIGHT,x,y));
93      }
94      
95    }
96