1 package code
.kalter
.longflight
.screen
;
3 import code
.kalter
.longflight
.Arrays
;
4 import code
.kalter
.longflight
.ByteArrayOutputStream
;
5 import code
.kalter
.longflight
.EventListener
;
6 import code
.kalter
.longflight
.Loader
;
7 import code
.kalter
.longflight
.LongFlight
;
8 import code
.kalter
.longflight
.Sprite
;
9 import code
.kalter
.longflight
.game
.Bullet
;
10 import code
.kalter
.longflight
.game
.Enemy
;
11 import code
.kalter
.longflight
.game
.Gamer
;
12 import code
.kalter
.longflight
.game
.bullet
.Collisionable
;
13 import code
.kalter
.longflight
.game
.explosion
.Explosion
;
14 import code
.kalter
.longflight
.rms
.RMS
;
15 import code
.kalter
.longflight
.rms
.RecordNotFoundException
;
16 import java
.io
.IOException
;
17 import javax
.microedition
.lcdui
.Graphics
;
18 import javax
.microedition
.lcdui
.Image
;
19 import javax
.microedition
.rms
.RecordStoreException
;
22 * Игровой экран. Остаётся активным во время паузы и информации о уничтожении. В
23 * меню паузы происходит отрисовка элементов (см. метод
24 * paintElements), а в меню информации о уничтожении происходит и
25 * отрисовка (см. метод updateElements), и обновление, но без
26 * создания новых врагов
30 public class Game
extends Screen
{
32 public static Game link
;
38 private boolean right
;
40 private boolean pointerPressed
;
42 private final Gamer gamer
;
43 private final Bullet bullet
;
44 private final Enemy enemy
;
45 private final Explosion explosion
;
47 private final Sprite rightSoft
;
48 private final Sprite lifeStatus
;
49 private final Sprite overheatStatus
;
50 private final Image downPanel
;
51 private final Image upPanel
;
53 private boolean isPause
; // для проверки на переход в меню паузы
55 public Game() throws IOException
{
56 explosion
= Explosion
.createExplosion("/gfx/boom.png");
57 bullet
= new Bullet(screenH
);
58 gamer
= new Gamer(screenW
, screenH
, bullet
, explosion
);
59 enemy
= new Enemy(screenW
, screenH
, bullet
, explosion
, gamer
);
60 bullet
.setCollisionable(new Collisionable
[]{gamer
, enemy
});
62 Loader loader
= Loader
.getInstance();
65 Image rightSoftImage
= loader
.getImage("/gfx/game/right_soft.png");
66 int rightSoftX
= screenW
- rightSoftImage
.getWidth();
67 int rightSoftY
= screenH
- rightSoftImage
.getHeight();
68 rightSoft
= new Sprite(rightSoftImage
, rightSoftX
, rightSoftY
);
69 rightSoft
.addEvent(new EventListener() {
72 return rightSoft
.isEntrySet(getXPressed(), getYPressed());
82 Image lifeStatusImage
= loader
.getImage("/gfx/game/life.png");
84 int lifeStatusY
= screenH
- 20;
85 lifeStatus
= new Sprite(lifeStatusImage
, lifeStatusX
, lifeStatusY
);
88 Image overheatStatusImage
= loader
.getImage("/gfx/game/overheat.png");
89 int overheatStatusX
= screenW
- overheatStatusImage
.getWidth() - 2;
90 int overheatStatusY
= screenH
- 20;
91 overheatStatus
= new Sprite(overheatStatusImage
,
92 overheatStatusX
, overheatStatusY
);
95 downPanel
= loader
.getImage("/gfx/game/down_panel.png");
96 upPanel
= loader
.getImage("/gfx/game/up_panel.png");
102 public void start() {
104 up
= down
= right
= left
= fire
= pointerPressed
= false;
105 enemy
.activateCreator();
110 explosion
.deactivateAll();
114 setDate(2, screenH
- 9);
115 } catch (Exception e
) {
116 LongFlight
.link
.catchException(e
);
125 while (getGameLoop()) {
130 LongFlight
.link
.sleep(20);
136 LongFlight
.link
.$
setScreen(LongFlight
.CRASH
);
140 public void keyPressed(int keyCode
) {
146 switch (getGameAction(keyCode
)) {
170 public void keyReleased(int keyCode
) {
171 switch (getGameAction(keyCode
)) {
195 public void pointerReleased(int x
, int y
) {
196 pointerPressed
= false;
200 public void pointerPressed(int x
, int y
) {
201 super.pointerPressed(x
, y
);
202 rightSoft
.exciteEvent();
203 pointerPressed
= true;
208 enemy
.deactivateCreator();
212 public Explosion
getExplosion() {
216 public void setNullPause() {
221 final int score
= enemy
.getScore();
223 final RMS rms
= new RMS("longflight", true);
225 final int[] record
= rms
.get(2).toIntArray(5);
226 for (int i
= 0; i
< 5; i
++) {
227 if (score
> record
[i
]) {
228 Arrays
.insertShiftRight(record
, score
, i
);
232 saveRecord(rms
, record
);
233 } catch (RecordNotFoundException e
) {
234 saveRecord(rms
, new int[]{score
, 0, 0, 0, 0});
237 } catch (RecordStoreException e
) {
238 LongFlight
.link
.catchException(e
);
242 private void rightSoftPressed() {
246 private void checkKey() {
247 if (pointerPressed
) {
251 if (isPointerDown()) {
254 if (isPointerLeft()) {
257 if (isPointerRight()) {
260 if (isPointerFire()) {
281 private void update() {
286 private void paint() {
287 space
.paint(graphics
);
288 paintElements(graphics
);
293 public void updateElements() {
300 public void paintElements(Graphics graphics
) {
301 enemy
.paint(graphics
);
302 gamer
.paint(graphics
);
303 bullet
.paint(graphics
);
304 explosion
.paint(graphics
);
307 private void paintGui() {
309 for (int i
= 0; i
< screenW
; i
+= 128) {
310 graphics
.drawImage(upPanel
, i
, 0, 0);
311 graphics
.drawImage(downPanel
, i
, screenH
- 27, 0);
313 overheatStatus
.paint(graphics
);
314 lifeStatus
.paint(graphics
);
315 rightSoft
.paint(graphics
);
319 font
.paint(graphics
, "Score: " + enemy
.getScore(), 2, 2);
322 graphics
.setColor(0xBF0B10);
323 graphics
.fillRect(4, screenH
- 19, gamer
.getLife(), 2);
324 graphics
.setColor(0x001A27);
325 graphics
.fillRect(4 + gamer
.getLife(), screenH
- 19, 1, 2);
328 graphics
.setColor(0xBFCA10);
329 graphics
.fillRect(screenW
- 52, screenH
- 19, gamer
.getOverheat(), 2);
330 graphics
.setColor(0x001A27);
331 graphics
.fillRect(screenW
- 52 + gamer
.getOverheat(), screenH
- 19,
335 private void setPauseScreen() {
337 LongFlight
.link
.setScreen(LongFlight
.PAUSE
);
340 private void saveRecord(RMS rms
, int[] record
) throws RecordStoreException
{
341 final ByteArrayOutputStream byteWriter
= new ByteArrayOutputStream(20);
342 byteWriter
.writeIntArray(record
, 5);
343 rms
.put(2, byteWriter
);