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

Вы создали код, считывающий список рекордов в начале игры, и записывающий список в хранилище по окончании игры. Но я не упомянул о том, как обновляется список рекордов. При окончании игры метод update() вызывает метод updateHiScores(), обновляющий список рекордов:

if (carsLeft– == 0) {

// остановить музыку

try {

musicPlayer.stop();

}

catch (MediaException me) {

}

// воспроизвести звук окончания игры

try {

gameoverPlayer.start();

}

catch (MediaException me) {

}

// спрятать спрайт автомобиля

playerSprite.setVisible(false);

// обновить список рекордов

updateHiScores(); //Вызов метода updateHiScores() – это все, что необходимо для обновления списка рекордов

gameOver = true;

return;

}

Метод updateHiScores() – это вспомогательный метод, который проверяет, попадает ли результат игрока в список рекордов. Если да, то он добавляет этот результат, удаляя наименьший рекорд. В листинге 19.3 приведен код этого метода. Листинг 19.3. Метод updateHiScores() обновляет список рекордов

private void updateHiScores() {

// проверить, попадает ли результат игрока в список рекордов

int i;

for (i = 0; i < 5; i++)

if (score > hiScores[i]) //Если счет больше, чем текущий рекорд, то поместить результат игры в список рекордов

break;

// поместить результат в список рекордов.

if (i < 5) {

for (int j = 4; j > i; j–) { //Цикл смещает меньшие результаты в конец списка рекордов

hiScores[j] = hiScores[j – 1];

}

hiScores[i] = score;

}

}

Метод updateHiScores() сначала проверяет, попадает ли результат, набранный игроком, в список рекордов. Если да, то он добавляется в список рекордов, при этом наименьший результат удаляется из списка. В списке рекордов содержится не более 5 записей, поэтому прежние рекорды уступают место новым. Помните, что список рекордов временно хранится в памяти телефона, пока игра существует, данные не будут помещены в хранилище, если не будет вызван метод stop().

Последнее необходимое изменение кода игры Space Out 2 касается метода draw(), который будет выводить список рекордов на игровой заставке. В листинге 19.4 приведен код метода draw().

Листинг 19.4. Метод draw() выводит заставку и список рекордов по окончании игры

private void draw(Graphics g) {

// вывести фоновое изображение звездного неба

g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);

// вывести слои

layers.paint(g, 0, 0);

if (gameOver) {

// вывести изображение заставки и список рекордов

g.drawImage(splash, 90, 10, Graphics.TOP | Graphics.HCENTER);

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

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

Font.SIZE_LARGE));

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

g.drawString(Integer.toString(hiScores[i]), 90, 90 + (i * 15),

Graphics.TOP | Graphics.HCENTER);

}

else {

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

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);

}

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