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

}

}

else {

// The record store doesn\'t exist, so initialize the scores to 0

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

hiScores[i] = 0;

}

}

Метод readHiScores() начинается попыткой открытия хранилища записей, которое называется «HiScores». Второй параметр метода (false) означает, что новое хранилище не нужно создавать, если хранилище с указанным именем не найдено. Если хранилище открыто успешно, то метод readHiScores() продолжает работу с хранилищем и считывает последовательно данные в массив целых чисел. После того как список рекордов считан, хранилище записей закрывается. Обратите внимание, что если хранилища с указанным именем не существует, то массив hiScores инициализируется 0. Этот вариант работает только при первом запуске игры.

Другое, но очень важное изменение метода start() игры Space Out 2 касается работы метода в случае ранее наступившего окончания игры. В исходной версии игры Space Out игра начинается сразу при запуске мидлета.

В игре Space Out 2 заставка и список рекордов отображаются при первом запуске игры. Иначе говоря, игра Space Out 2 начинается в режиме «окончания игры». Поэтому в методе start() больше не вызывается метод newGame(), а переменной gameOver присваивается значение true:

gameOver = true;

Подобно тому, как список рекордов считывается в методе start(), он записывается в методе stop():

writeHiScores();

Метод writeHiScores() записывает целочисленный массив в хранилище записей. В листинге 19.2 приведен код этого метода: Листинг 19.2. Метод writeHiScores() записывает целочисленный массив HiScores в хранилище данных

private void writeHiScores()

{

// удалить предыдущее хранилище записей

try {

RecordStore.deleteRecordStore("HiScores"); //Сначала удаляется хранилище записей

}

catch (Exception e) {

}

// создать новое хранилище записей

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore("HiScores", true); //Значение true говорит о том, что если хранилище записей с указанным именем не будет найдено, то будет создано новое хранилище

}

catch (Exception e) {

System.err.println("Failed creating hi score record store!");

}

// записать рекорды

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

// подготовить данные для записи

byte[] recordData = Integer.toString(hiScores[i]).getBytes(); //Преобразовать целое число в массив байтов, чтобы записать его в хранилище

try {

// записать данные в хранилище

rs.addRecord(recordData, 0, recordData.length);

}

catch (Exception e) {

System.err.println("Failed writing hi scores!");

}

}

// закрыть хранилище

try {

rs.closeRecordStore();

}

catch (Exception e) {

System.err.println("Failed closing hi score record store!");

}

}

Метод writeHiScores() использует уникальную методику записи рекордов. Вместо того чтобы заменить отдельную запись в хранилище, заменяется все хранилище целиком. Хотя такой подход может показаться грубым, он значительно упрощает код игры. Это и объясняет, почему в начале метода writeHiScores() удаляется хранилище записей.

После того как хранилище записей удалено, метод writeHiScores() создает новое хранилище, для чего вторым параметром при вызове метода openRecordStore() передается true. Затем выполняется цикл по всем элементам массива hiScores, каждый из элементов записывается в хранилище. Когда все рекорды записаны, хранилище закрывается, для чего вызывается метод closeRecordStore().