1
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