try {
int len;
byte[] recordData = new byte[8]; //В размере записи (8 байт) нет ничего магического – это просто предположение о среднем размере записи
for (int i = 1; i <= rs.getNumRecords(); i++) {
// выделить память при необходимости
if (rs.getRecordSize(i) > recordData.length) //Если размер записи больше 8 байт, этот код выделяет необходимый объем памяти
recordData = new byte[rs.getRecordSize(i)];
// считать данные в массив
len = rs.getRecord(i, recordData, 0);
// Do something with the record data
... //Здесь вы напишете игровой код, конвертирующий и сохраняющий данные в обычный формат, например, int
}
}
catch (Exception e) {
System.err.println("Failed reading hi scores!");
}Этот код показывает, как пройти по всем записям хранилища, считывая по одной записи. Важно отметить, что при необходимости выделяется память для записи. Обычно этого не требуется при работе со списком рекордов, поскольку все записи в данном случае имеют приблизительно одинаковый размер, но осторожность не повредит. Есть ряд ситуаций, когда может потребоваться удалить все хранилище записей. К счастью, в классе RecordStore для этого есть статический метод deleteRecordStore(). Все, что необходимо сделать, – это передать ему название хранилища записей, например, так:
try {
Rs.deleteRecordStore("HiScores");
}
catch (Exception e) {
System.err.println("Failed deleting record store!");
}Метод deleteRecordStore() полезен в тех случаях, когда вам не нужны данные старого хранилища, а вы хотите записать новое. Этот прием будет использован дальше в этой главе, когда вы будете обновлять содержимое списка рекордов игры Space Out. Вместо того чтобы искать и изменять конкретную запись в хранилище, игра Space Out 2 удаляет старое хранилище и записывает новое. Об этом вы узнаете чуть позже в этой главе. Тем временем метод closeRecord() – последний метод класса RecordStore, который интересен с точки зрения программирования мобильных игр. Этот метод необходим для закрытия хранилища записей по окончании работы с ним:
try {
rs.closeRecordStore();
}
catch (Exception e) {
System.err.println("Failed closing hi score record store!");
}Хотя про хранилища записей и поддержку MIDP API Системы управления записями можно сказать намного больше, вам необходимо знать лишь то, что поможет добавить интересные штрихи в создаваемые вами мобильные игры. Поэтому оставшаяся часть главы посвящена добавлению списка рекордов в игру Space Out, разработанную в предыдущей главе.
Подготовка списка рекордов к хранению
Я бы хотел научить вас создавать список рекордов (одну из особенностей классических аркад), в который можно вводить ваше имя или инициалы. К сожалению, эта задача достаточно сложна с точки зрения программирования. Если быть более точным, то необходимо отступить от темы повествования, не углубляясь в детали. Поэтому вместо списка рекордов, хранящего имена и счет лучших пяти игроков, вы создадите список рекордов, содержащий лишь лучшие 5 результатов. Хотя при этом имена рекордсменов будут неизвестны, тем не менее такой способ хорош для отражения лучших достижений.