► минимальное ядро, необходимое для выполнения низкоуровневых функций, таких как, например, прерывания, исключения и очередь;
   ► механизм чтения и записи в постоянную память;
   ► механизм для установки таймеров и отметки времени данных;
   ► доступ на запись/чтение к сетевому соединению устройства;
   ► механизм перехвата ввода с клавиатуры или сенсорного экрана;
   ► минимальная поддержка битовых изображений;
   ► механизм распределения жизненного цикла приложений.
   Эти требования, пусть даже и минимальные, предоставляют достаточно широкий набор средств, который можно использовать для создания MIDP-игр.

http://handango.com/) и найдите какую-нибудь игру. Да, именно Handango, а не Fandango – сайт для заказа билетов в кинотеатр. Большинство игр на этом сайте имеют демо-версии, которые вы можете бесплатно загрузить, перед тем как купить ту или иную игру. Поэтому эта экскурсия не будет вам ничего стоить. Пролистывая списки игр, обратите внимание, может быть, что-то упущено, и у вас, вероятно, появятся идеи создания собственной игры

http://javasun.com/). Также там вы найдете и J2ME Wireless Toolkit, необходимый для разработки игр на Java.
   Приложения, написанные с использованием J2ME, в соответствии со спецификацией MIDP называются мидлеты (MIDlet). Поэтому любая игра, созданная на J2ME, является мидлетами. Классы мидлетов хранятся в файлах байт-кода с расширением. class. Однако перед распространением классы должны быть проверены, чтобы гарантировать невыполнение запрещенных операций. Дело в том, что эта предварительная проверка необходима вследствие ограничений виртуальной машины, используемой в мобильных устройствах. Эта виртуальная машина называется K Virtual Machine, или KVM. Чтобы KVM была как можно меньше и эффективнее, необходимо минимизировать число верификаций, выполняемых во время выполнения приложения. Поэтому некоторые из этих верификаций выполняются еще на стадии разработки в процессе предварительной верификации.
   В копилку Игрока
   Название KVM также имеет отношение к требованиям виртуальной машины к ресурсам: KVM необходимы килобайты памяти, а не мегабайты. Иначе говоря, KVM разработана так, чтобы она помещалась в килобайтах памяти, в отличие от виртуальной машины J2SE, которой могут потребоваться мегабайты.
   Предварительная верификация выполняется непосредственно после компиляции, ее результатом является новый файл класса, который уже проверен и готов к распространению. Мидлеты (MIDlet) должны быть упакованы в специальные архивы JAR (Java Archive – архив Java), они очень похожи на ZIP-архивы, которые вы, вероятно, использовали для сжатия больших файлов. Мидлеты (MIDlet) также требуют дополнительного описания, которое включается в JAR-файл. Ниже перечислена основная информация, обычно включаемая в архив JAR:
   ► классы мидлета;
   ► вспомогательные классы;
   ► ресурсы (изображения, звуки и т. п.);
   ► файлы манифестов (.mf);
   ► дескриптор приложения (.jad).
   В копилку Игрока
   Файлы JAR используются для упаковки Java-классов и последующего более эффективного распространения. Файл манифеста – это текстовый файл с описанием классов, включенных в JAR-архив.
   Дескриптор приложения, файл JAD, – это файл, в котором содержится описание мидлетов, хранящихся в файле JAR. Обратите внимание, что я сказал «мидлеты» (множественное число). Да, зачастую в файле JAR хранится несколько мидлетов. Такой набор мидлетов называется пакетом мидлетов (MIDlet suit). В случае мобильных игр вам, вероятно, захочется предложить несколько игр в качестве единого продукта (например, набор простейших игр), в этом случае вам придется поместить все игры в один файл JAR.
   В основе пакетов мидлетов лежит идея одновременного использования несколькими приложениями доступных ресурсов мобильного устройства. KVM-устройства необходимы для обеспечения навигации и выбора конкретного мидлета из пакета. Файл JAD, включенный в JAR-файл, очень полезен, поскольку в нем содержится информация, необходимая для установки и доступа к конкретному мидлету.
   Я знаю, вы, вероятно, подумали, что этот раздел будет посвящен разработке игр на J2ME, а не устройству файлов JAR или пакетов мидлетов. На самом деле, чтобы понять процесс разработки приложений, вам необходимо знать некоторые основы сборки мидлетов для распространения. Процесс разработки мидлетов можно разбить на следующие стадии:
   1. редактирование;
   2. компиляция;
   3. предварительная верификация;
   4. эмуляция;
   5. тестирование на устройстве;
   6. использование.
   Шаги 1 и 2 должны быть вам хорошо знакомы, поскольку эти стадии обязательны при программировании на любом из языков. Этапы 3 и 4 немного отличаются. Вы уже знаете, что шаг предварительной верификации необходим для подтверждения того, что приложение не выполняет недопустимых действий (например, засорение памяти устройства). На шаге 4 вы проверяете свой мидлет с помощью специального инструмента – эмулятора.
   Эмулятор J2ME представляет собой не то, о чем говорит название. Эмулятор имитирует реальный мобильный телефон в вашем настольном компьютере. Это позволяет тестировать мидлеты, не загружая код в мобильное устройство. Отладку также проще осуществлять, если приложение запущено в эмуляторе. Шаг 5 в процессе разработки мидлета – это его тестирование на реальном устройстве. В реальности, вам, вероятно, придется проверять работоспособность созданного приложения на нескольких различных устройствах, чтобы убедиться, что оно работает правильно. Такая проверка следует сразу после того, как вы устранили все ошибки в игре и близки к распространению приложения как готового продукта. Другими словами, перед тестированием на реальных устройствах приложение проходит тестирование на эмуляторе.
   Последний этап разработки игры – это ее распространение. Распространение игры может быть очень простым, например, вы можете отправить ее по электронной почте друзьям, и они установят игру на своих мобильных телефонах, или весьма сложным, если вы продаете игру и распространяете ее через беспроводные сети. В последнем случае вам придется решить ряд технических проблем, например, убедиться, что ваша игра соответствует стандартам безопасности, а загружаемый файл имеет цифровую подпись с действующим сертификатом безопасности. О распространении мобильных игр вы узнаете из главы 16.
   В копилку Игрока
   Поскольку мобильные игры обычно сильно нагружают процессор мобильного устройства, вам, вероятно, потребуется разрабатывать несколько отличающиеся друг от друга версии игры для различных моделей телефонов. Например, вам придется удалить некоторые элементы игры для менее мощных устройств. Также вам придется предусмотреть отличие экранов на различных моделях. Просто помните, что при тестировании игры на различных моделях телефона вам, вероятно, придется изменять код, чтобы приспособить ее для работы на некоторых из моделей.
   Теперь, когда вы имеете представление о том, как разрабатываются мидлеты, я хотел бы рассказать, какие инструменты необходимы для их сборки:
   ► Java 2 SDK;
   ► J2ME Wireless Toolkit.
   Java 2 SDK – это стандартный инструмент разработки Java. Инструмент J2ME Wireless Toolkit служит дополнением к среде разработки и работает в составе Java 2 SDK и включает верификатор байт-кода и несколько эмуляторов J2ME, необходимых для верификации и проверки мидлетов. Помимо стандартного J2ME Wireless Toolkit, некоторые производители мобильных телефонов предлагают свои инструменты для разработки мидлетов. Например, компания Nokia предлагает различные MIDlet SDK, направленные на каждую из линеек телефонов, поддерживающих Java. Motorola также предлагает пакет SDK для J2ME, ориентированный на телефоны Motorola.
   Обычно набор инструментов, предлагаемый производителями, содержит дополнительные профили устройств, которые помогут вам при эмуляции мидлетов, а также расширения API, поддерживаемые выпускаемыми устройствами. Хотя зачастую эти API очень мощны, я советую использовать стандартные MIDP API, чтобы создаваемые вами игры можно было без проблем распространять между мобильными телефонами.
   В копилку Игрока
   Дополнительные API, доступные на нескольких телефонах, предоставляют большие возможности по сравнению с ограниченными требованиями MIDP. Например, Location API для J2ME содержит классы и интерфейсы для определения физического местоположения мобильного телефона с помощью GPS или близости телефона к передающей станции беспроводной сети.

http://java.sun.com/products/j2mewtoolkit/ вы можете проверить последние обновления. Пакет состоит из следующих инструментов:
   ► верификатор байт-кода;
   ► эмулятор J2ME;
   ► KToolbar;
   ► инициализирующий сервер.
   Вы уже узнали, что верификатор байт-кода проверяет классы, входящие в состав игры, перед тем как они попадут в распространяемый пакет. Вы также знаете, что эмулятор J2ME используется для тестирования приложений на настольном компьютере, не загружая и не запуская их на реальном мобильном телефоне. Полезные функции эмулятора позволят вам имитировать различные мобильные телефоны. Например, вам, вероятно, понадобится эмулировать мобильный телефон с определенным размером экрана, отличным от стандартных устройств, в этом случае вы просто создаете новую конфигурацию и эмулируете мобильный телефон с новыми параметрами. Эмулятор J2ME также очень полезен при имитации настроек безопасности мобильных телефонов, что позволит создать более реалистичную среду выполнения.
   KToolbar – это среда визуальной разработки, в которой можно собирать, компилировать, упаковывать и тестировать приложения J2ME с графическим интерфейсом. Это контрастирует с другими инструментами J2ME, которые запускаются из командной строки. Далее вы будете часто использовать KToolbar для сборки и тестирования приложений.
   В платформе MIDP 2.0 новинкой является поддержка инициализации Over The Air (по сети), или OTA, которая реализует механизм загрузки приложений в мобильные телефоны через беспроводную сеть. Пакет J2ME Wireless Toolkit включает инициализирующий сервер, который позволяет загружать и устанавливать приложение на эмулируемое устройство точно так же, как это будет делать пользователь, загружая приложение на мобильное устройство.
   В копилку Игрока
   Инициализация (provisioning) – это процесс верификации и установки мидлета на телефон, поддерживающий Java К сожалению, до MIDP 2.0 не было стандарта инициализации мидлетов, поэтому процесс загрузки и инициализации определялся изготовителем телефона.

Использование KToolbar

   В этом уроке я часто буду обращаться к среде разработки и показывать, как она улучшает и ускоряет процесс разработки и сборки мидлетов. KToolbar – это самая простая среда визуальной разработки, поддерживающая J2ME. Она настолько проста, что даже не содержит редактора кода. KToolbar сфокусирован на управлении файлами кода и автоматизации процесса сборки и тестирования. Используя приложение KToolbar, вы можете преодолеть необходимость использования командной строки инструментов J2ME и выполнить компиляцию, верификацию и эмуляцию в одной среде. На рис. 2.1 показано приложение KToolbar, в котором открыт проект J2ME.
   Рис. 2.1. KToolbar предоставляет минимальные средства для разработки игр на J2ME
 
   Хотя инструмент KToolbar – это минимальная визуальная среда, его достоинство заключается в том, что он бесплатно поставляется вместе с J2ME Wireless Toolkit. Просто помните, что вам придется найти подходящий текстовый редактор (например, Блокнот (Notepad) в операционной системе Windows) для редактирования файлов кода. С другой стороны, если у вас уже есть визуальная среда разработки Java, даже если она не поддерживает J2ME, ее полезно использовать для редактирования файлов кода J2ME.

Управление проектами J2ME

   KToolbar предлагает простой способ управления проектами мидлетов и настройками сборки. Когда вы создаете новый проект в KToolbar, он автоматически появляется в папке apps, расположенной в папке установки J2ME Wireless Toolkit. Так, например, если Wireless Toolkit установлен в папке WTK21, то все приложения будут создаваться в папке WTK21\apps. Чтобы создать новый проект, щелкните по кнопке New Project (Новый проект), расположенной на панели инструментов. На рис. 2.2 показано диалоговое окно, в котором запрашивается название проекта и имя класса мидлета.
   Рис. 2.2. Чтобы создать новый проект в KToolbar, просто введите имя проекта и название класса мидлета
 
   Имя проекта будет использовано для названия JAR-файла, который устанавливается на мобильный телефон. Помните, что имя проекта может применяться ко всему пакету мидлетов, в то время как имя класса идентифицирует отдельный мидлет внутри пакета. В большинстве случаев в проекте содержится лишь один мидлет, поэтому вы можете использовать одно и то же имя как для класса мидлета, так и для приложения.
   Чтобы открыть существующий проект в KToolbar, на панели инструментов щелкните по кнопке Open Project (Открыть проект). Будут отображены проекты, созданные в папке apps, расположенной в папке установки J2ME Wireless Toolkit. На рис. 2.3 показано диалоговое окно Open Project (Открыть проект), в котором вы можете выбрать проект, хранящийся в папке apps.
   Рис. 2.3. В KToolbar можно открывать только те проекты, которые находятся в папке apps пакета J2ME Wireless Toolkita
 
   После того как проект открыт в KToolbar, вы можете изменить его настройки, для чего щелкните по кнопке Settings (Настройки), расположенной на панели инструментов. Откроется диалоговое окно Settings (Настройки), показанное на рис. 2.4.
   Рис. 2.4. Диалоговое окно Settings (Настройки) инструмента KToolbar предоставляет вам доступ к большому числу настроек проекта
 
   Пока настройки проекта не очень важны, поскольку в большинстве случаев подходят и настройки по умолчанию. Возможно, единственное, чему стоит уделить внимание, так это закладке MIDlet, на которой показаны мидлеты, входящие в состав проекта. На рис. 2.5 показаны три различных мидлета, содержащихся внутри одного проекта.
   Рис. 2.5. Проект в KToolbar может состоять из нескольких мидлетов, при этом проект представляет собой пакет мидлетов
 
   Игровой проект, показанный на рис. 2.5, содержит две игры-головоломки и игру Worm. Давайте, используя KToolbar, откомпилируем и упакуем эти игры, а потом протестируем их.

Сборка мидлета

   Теперь вы подошли, вероятно, к самой трудной части главы: компиляции примера мидлета игры. На самом деле мы будем компилировать все три мидлета игр, входящие в проект J2ME Wireless Toolkit. Я пошутил, говоря, что это будет очень сложно. Достаточно щелкнуть по кнопке Build (Собрать), расположенной на панели инструментов, и проект будет собран. На рис. 2.6 показан процесс сборки в KToolbar.
   Рис. 2.6. Использовать KToolbar для сборки мидлетов или их пакетов очень просто, для этого щелкните по кнопке Build (Собрать), расположенной на инструментальной панели
 
   Хотя процесс сборки включает в себя несколько отдельных шагов, они обычно выполняются так быстро, что их очень трудно различить. На рис. 2.6 показана завершающая стадия построения проекта. Теперь у вас есть верифицированный, откомпилированный и собранный пакет мидлетов, который можно установить и запустить на мобильном телефоне или протестировать в эмуляторе J2ME.

Тестирование игрового мидлета

   Эмулятор J2ME бесценен при тестировании мидлетов игр в процессе разработки. Эмулятор целесообразно использовать ввиду трудностей, возникающих при загрузке кода на реальное устройство снова и снова. Намного эффективнее тестировать мидлеты на настольном компьютере, а к проверке работы на реальных устройствах переходить на поздних этапах отладки.
   Чтобы запустить эмулятор J2ME в KToolbar, на инструментальной панели щелкните по кнопке Run (Запустить). На рис. 2.7 показано, как игры из пакета мидлетов отображаются в эмуляторе.
   Рис. 2.7. По умолчанию в эмуляторе J2ME имитируется телефон с разноцветной лицевой панелью и экраном с размерами 180х210
 
   Как показано на рис. 2.7, эмулятор J2ME отображает изображение телефона, на экране которого выводится состав тестируемого пакета мидлетов. Чтобы запустить одно из приложений мидлета, выберите нужный, щелкая мышью по кнопкам телефона, после чего нажмите кнопку Launch (Запустить). Вы можете также использовать клавиши со стрелками на клавиатуре компьютера, после чего нажать клавишу Enter (Ввод). На рис. 2.8 показана игра Worm при ее выполнении в эмуляторе с настройками телефона по умолчанию.