Создание игр для мобильных телефонов - Майкл Моррисон
Шрифт:
Интервал:
Закладка:
public void receiveMessage(String message) {
// установить режим
if (message.equals("Dash")) // Изменить режим в соответствие с сообщением
mode = 2;
else if (message.equals("Dot"))
mode = 1;
else
mode = 0;
// обнулить таймер
morseTimer = 0;
// очистить сообщение о статусе
status = ""; // При отображении символов азбуки Морзе нет необходимости выводить статусное сообщение
}Параметр метода receiveMessage() – это отправленное сообщение. Это сообщение всегда точка (Dot) или тире (Dash). В последнем случае значение переменной mode становится равным 2, в то время как в первом случае – 1. Если по какой-либо причине сообщение не содержит ни один из возможных вариантов, его значение переменной mode становится равным 0. После этого обнуляется таймер, обеспечивающий правильную работу мидлета. Мидлет Lighthouse
Последний функциональный представляющий интерес фрагмент кода мидлета Lighthouse – это сам класс мидлета, в котором есть код, отличающий его от всех созданных ранее в книге мидлетов. В листинге 14.9 приведен код класса LighthouseMIDlet.
Листинг 14.9. Класс LighthouseMIDlet при загрузке приложения позволяет пользователю выбрать режим работы: клиент или серверpublic class LighthouseMIDlet extends MIDlet implements CommandListener {
private Form initForm; // Объект типа Form используется для реализации интерфейса
private ChoiceGroup choices;
private LHCanvas gameCanvas;
public void startApp() {
// создать стартовую форму
initForm = new Form("Connect 4");
// добавить выбор устройства
String[] peerNames = { "Server", "Client" }; // Создать группу выбора с двумя опциями: Клиент и Сервер
choices = new ChoiceGroup("Please select peer type:", Choice.EXCLUSIVE,
peerNames, null);
initForm.append(choices);
// добавить команды Play и Exit
Command exitCommand = new Command("Exit", Command.EXIT, 0);
initForm.addCommand(exitCommand);
Command playCommand = new Command("Play", Command.OK, 0);
initForm.addCommand(playCommand);
initForm.setCommandListener(this);
// вывести форму на экран
Display.getDisplay(this).setCurrent(initForm);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {
gameCanvas.stop();
}
public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT) {
destroyApp(true);
notifyDestroyed();
}
else if (c.getCommandType() == Command.OK) {
// определить тип функционирования приложения
String name = choices.getString(choices.getSelectedIndex()); // Когда выполняется команда Play, отображается холст игры, в который передается тип работы (клиент или сервер)
// создать новый игровой холст
if (gameCanvas == null) {
gameCanvas = new LHCanvas(Display.getDisplay(this), name);
Command exitCommand = new Command("Exit", Command.EXIT, 0);
gameCanvas.addCommand(exitCommand);
gameCanvas.setCommandListener(this);
}
// запустить игровой холст
gameCanvas.start();
}
}
}Класс LighthouseMIDlet реализует пользовательский интерфейс в дополнение к основному холсту, в результате пользователь может выбрать режим функционирования приложения (клиент или сервер). Класс MIDP, который называется Form, используется для создания этого интерфейса в виде формы. На формах вы можете размещать стандартные элементы управления, например, кнопки и группы выбора. В мидлете Lighthouse используется группа выбора, предлагающая два варианта («Server» или «Client»), которая очень хорошо подходит в данном случае.
Группа выбора создается как объект типа ChoiceGroup, инициализируемый строковым массивом peerNames. Созданная группа применяется к форме и становится ее неотъемлемой частью. Затем к форме добавляются две команды Play (Играть) и Exit (Выход). Команда Exit завершает работу мидлета, а команда Play запускает мидлет, применяя выбранный режим работы. Команда Play связана с константой Command.OK, в результате выполнения команды создается объект класса LHCanvas. Это основной разработанный вами холст.
Важно отметить, что выбранный режим функционирования передается в качестве второго параметра конструктору класса LHCanvas. Именно так холст узнает, в каком режиме он должен функционировать, в соответствии с этим переменной isServer присваивается нужное значение.Тестирование приложения
Мидлет Lighthouse – это, вероятно, самое мудреное приложение, которое вы тестировали, поскольку оно требует наличия двух мобильных телефонов, или двух запущенных эмуляторов J2ME. Несмотря на то что я настоятельно рекомендую тестировать приложение на реальных устройствах, J2ME позволяет наглядно протестировать мидлет на двух расположенных рядом виртуальных телефонах. Чтобы протестировать мидлет Lighthouse, запустите два раза эмулятор J2ME. На одном из виртуальных телефонов выберите режим функционирования «сервер», а на другом – «клиент». На рис. 14.1 на виртуальном телефоне выбран режим сервера.
Рис. 14.1. При запуске мидлета Lighthouse пользователь должен указать желаемый режим работы: клиент или сервер
После того как выбран режим сервера, пользователь видит сообщение о том, что сервер готов к работе и ожидает подключения клиента (рис. 14.2).
Рис. 14.2. В режиме «сервера» мидлет ожидает подключения клиентаВ другой части сетевого уравнения находится мидлет-клиент, запускаемый на другом телефоне. Когда между клиентом и сервером установлено соединение, строка статуса выводит информацию об этом.
На рис. 14.3 показано, как выглядит экран клиентского приложения после установления соединения.
Рис. 14.3. В режиме клиента мидлет выводит сообщение об успешном установлении соединенияКогда соединение установлено, пользователи могу начать отправлять сообщения, используя азбуку Морзе, нажимая клавиши соответствующие точкам и тире. На рис. 14.4 показано, как клиент отправляет сообщение точка (dot) нажатием клавиши влево.
Рис. 14.4. Игрок на клиентском устройстве отправляет сообщениеКак показано на рисунке, на экран выводится слово Dot (точка), означающее, что сообщение было отправлено. В это время сервер принимает это сообщение и появляется короткая вспышка света (рис. 14.5).
Рис. 14.5. На серверном устройстве маяк зажигает огонь ненадолго, что соответствует точкеПересылка сигналов азбуки Морзе продолжается до тех пор, пока клиент и сервер не завершат соединение. Хотя вы, вероятно, посчитаете, что с другим человеком проще поговорить по телефону, мидлет Lighthouse демонстрирует альтернативный способ коммуникации посредством беспроводной сети. Этот мидлет послужит основой для разработки специфических игровых соединений, речь о которых пойдет в следующей главе.
Резюме
Эта глава началась с рассказа о сетевом программировании в мобильных играх. Вы узнали, что MIDP API значительно упрощает сетевое программирование, предоставляя стандартные классы, которые выполняют большинство работы. Мы начали эту главу с изучения основ сетевых игр, после чего перешли к тому, как средствами MIDP API можно создать беспроводное соединение. Эта глава завершилась созданием мидлета, использующим мобильную сеть. Этот мидлет позволяет осуществить коммуникацию посредством азбуки Морзе и мигающих маяков.
В следующей главе продолжится разговор о сетевых беспроводных соединениях, вы создадите игру Connect 4.
Экскурсия
Мидлет Lighthouse, созданный в этой главе, познакомил вас с азбукой Морзе. Уверен, что вы вряд ли придумаете ситуацию, когда можно столкнуться с ней, однако это не такой уж и плохой способ коммуникации, если знать, как им пользоваться. В школе я использовал азбуку Морзе для переговоров с друзьями из класса перестуками по парте. Азбука Морзе позволяет общаться людям в полной тишине, используя лишь мигающие огни, или перестукиванием, если нельзя говорить. Цель моего повествования, чтобы вы занялись изучением азбуки Морзе, и в этом случае мидлет Lighthouse станет для вас куда более интересным приложением.Глава 15 Connect 4: классическая игра по беспроводной сети
...Архив Аркад
Я до сих пор отчетливо помню момент, когда впервые увидел аркаду Dragon's Lair (Логово Дракона). В то время аркада с мультипликационной графикой казалась чем-то невероятным. Dragon's Lair была создана компанией Cinematronics в 1983 году, в год выпуска игра произвела фурор благодаря великолепной графике и сюжету. Игроки поняли, что Dragon's Lair – это скорее игра, в которой игрок определяет ход игры, а не простая видеоигра. Игра предоставляла массу возможностей выбора, а следовательно, вариантов развития сюжета. Dragon's Lair по сей день является значительным моментом развития графики видеоигр, и очевидно, почему на разработку игры потребовалось 6 лет.
В предыдущей главе вы научились создавать беспроводные сетевые подключения в мидлете, который реализует концепцию клиент-сервер. В этой главе тема сетевых подключений будет продолжена. Вы пройдете через все этапы создания пошаговой сетевой игры. В игре Connect 4 вы бросаете шарики в вертикальные столбцы на игровом поле. Ваша цель положить 4 шарика в линию быстрее противника.
В этой главе вы:
► научитесь основам игры в Connect 4;
► разработаете сетевую версию игры Connect 4;
► создадите мобильную игру Connect 4, использующую датаграммное соединение;
► научитесь тестировать сетевые игры.
Обзор игры Connect 4
Если вы ни разу не играли в Connect 4, давайте вкратце рассмотрим ее правила. Это очень простая игра, похожая на крестики-нолики; ваша цель – разместить в ряд, столбец или по диагонали 4 фишки. Игра происходит на поле размером 7х6 ячеек. Фишки – это цилиндры, похожие на шашки. На рис. 15.1 показана доска для игры в Connect 4.