×
Traktatov.net » Создание игр для мобильных телефонов » Читать онлайн
Страница 220 из 246 Настройки

layers.paint(g, 0, 0);

// вывод оставшегося числа автомобилей и счета

for (int i = 0; i < carsLeft; i++)

g.drawImage(smallCar, 2 + (i * 20), 2, Graphics.TOP | Graphics.LEFT); //Этот код выводит число оставшихся автомобилей

g.setColor(255, 255, 255); // white

g.setFont(Font.getFont(Font.FACE_SYSTEM,

Font.STYLE_PLAIN, Font.SIZE_MEDIUM));

g.drawString(Integer.toString(score), 175, 2,

Graphics.TOP | Graphics.RIGHT);

if (gameOver) {

// вывести сообщение о конце игры и счет

g.setColor(255, 255, 255); // white

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,

Font.SIZE_LARGE));

g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,

Font.SIZE_MEDIUM));

g.drawString("Final Score : " + score, 90, 70, Graphics.TOP |

Graphics.HCENTER);

}

// вывести графику на экран

flushGraphics();

}

Первая часть кода выводит фоновое изображение на экран – звездное небо в пустыне. Затем одной строкой кода выводятся слои, за которыми следуют вывод оставшихся автомобилей и счет в игре. Если игра окончена, то выводится соответствующее сообщение, состоящее из слов «GAME OVER» и числа набранных очков.

Начало новой игры

Несколько раз я уже упоминал о методе newGame() при обсуждении кода игры Space Out. В листинге 18.4 приведен код этого метода:

Листинг 18.4. Метод newGame() класса SOCanvas инициализирует игровые переменные и запускает музыку

private void newGame() {

// Initialize the game variables

gameOver = false;

score = 0;

carsLeft = 3;

// Initialize the player car sprite

playerSprite.setPosition(0, getHeight() – playerSprite.getHeight() – 10); //Поместить спрайт автомобиля в центре пустыни (по высоте)

playerSprite.setXSpeed(4);

playerSprite.setYSpeed(0);

playerSprite.setVisible(true);

// Initialize the alien and explosion sprites

for (int i = 0; i < 3; i++) { //При запуске игры пришельцы не видны

blobboSprite[i].setVisible(false);

jellySprite[i].setVisible(false);

timmySprite[i].setVisible(false);

explosionSprite[i].setVisible(false);

}

// Initialize the missile sprites

for (int i = 0; i < 10; i++) {

missileSprite[i].setVisible(false);

}

// Start the music (at the beginning)

try {

musicPlayer.setMediaTime(0);

musicPlayer.start();

}

catch (MediaException me) {

}

}

Метод newStart() начинается с инициализации трех основных переменных: gameOver, score и carsLeft. Спрайт игрока устанавливается в исходное положение и становится видимым – это необходимо сделать, поскольку спрайт скрывается по окончании игры. Все пришельцы, взрывы и ракеты в начале игры скрыты. Метод newGame() завершается запуском звукового проигрывателя, для чего вызываются методы setMediaTime() и start().

Добавление пришельцев, ракет и взрывов

Оставшаяся часть кода добавляет пришельцев, ракеты и взрывы. Этот код разделен на три метода, первый из которых – это addAlien(). В листинге 18.5 приведен код метода addAlien(), который отвечает за добавление пришельцев в игру.

Листинг 18.5. Метод addAlien() класса SOCanvas добавляет пришельца в игру

private void addAlien() {

switch (Math.abs(rand.nextInt() % 3)) {