Майкл Моррисон - Создание игр для мобильных телефонов
- Название:Создание игр для мобильных телефонов
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Моррисон - Создание игр для мобильных телефонов краткое содержание
Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона.
Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.
В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки.
Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас!
Перевод: К. Михалкин
Создание игр для мобильных телефонов - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
display.setCurrent(this);
// инициализация фонового изображения
try {
background[0] = Image.createImage("/LighthouseOff.png");
background[1] = Image.createImage("/LighthouseOn.png");
}
catch (IOException e) {
System.err.println("Failed loading images!");
}
// инициализация режима и таймера
mode = 0;
morseTimer = 0;
// запуск сетевого сервиса
if (isServer) { //Начиная с этой точки, мидлет работает в режиме сервера или клиента
server = new LHServer(this);
server.start();
}
else {
client = new LHClient(this);
client.start();
}
// начало потока анимации
sleeping = false;
Thread t = new Thread(this);
t.start();
}После того как фоновые изображения инициализированы, метод start() инициализирует таймер и режим. Переменная mode инициализируется 0, что соответствует погашенному огню маяка (нет сообщения), в то время как переменная morseTimer обнуляется, несмотря на то что она не используется в отсутствие сообщения.
Наиболее важная часть кода метода start() реализует режим сервера или клиента. В зависимости от значения переменной isServer создается экземпляр класса LHServer или LHClient. После этого создается сетевой объект, вызывается метод старт, запускающий поток соединения.
Метод start() инициализирует мидлет Lighthouse, а метод update() обрабатывает пользовательский ввод и позволяет вам отправлять сообщения, закодированные азбукой Морзе. В листинге 14.6 приведен код метода update().
Листинг 14.6. Метод update() класса LHCanvas отправляет сообщения, закодированные азбукой Морзе, в соответствии с нажатыми клавишамиprivate void update() {
// обработка пользовательского ввода
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
if (isServer) //Передать точку на другой телефон
server.sendMessage("Dot");
else
client.sendMessage("Dot");
status = "Dot";
}
else if ((keyState & RIGHT_PRESSED) != 0) {
if (isServer) //Передать тире на другой телефон
server.sendMessage("Dash");
else
client.sendMessage("Dash");
status = "Dash";
}
// обновить таймер кода Морзе
if (mode != 0) {
morseTimer++;
// тайм-аут точки
if (mode == 1 && morseTimer > 3)
mode = 0;
// тайм-аут тире
else if (mode == 2 && morseTimer > 9)
mode = 0;
}
}Метод update() проверяет нажатие клавиш и в соответствии с нажатыми клавишами отправляет нужный знак. Клавиша влево соответствует точке, а клавиша вправо – тире. Чтобы отправить код азбуки Морзе, метод update() просто вызывает метод sendMessage() сетевого объекта (клиента или сервера).
После проверки нажатий клавиш и отправки сообщения, если необходимо, метод update() обновляет таймер Морзе. Если значение переменной mode равно 1, то выводится точка, затем значение таймера увеличивается до 3, после чего выводится изображение маяка с погашенным огнем. Если значение переменной mode равно 2, выводится тире, при этом счетчик будет увеличиваться до 9. И наконец, если значение переменной mode равно 0, то следует вывести изображение маяка с погашенным огнем, таймер не изменяется.
Метод draw() выводит изображение маяка на экран (листинг 14.7).
Листинг 14.7. Метод draw() класса LHCanvas выводит на экран нужное изображение маякаprivate void draw(Graphics g) {
// вывести фоновое изображение
if (mode == 0) //В зависимости от режима маяк светится или нет
g.drawImage(background[0], 0, 0, Graphics.TOP | Graphics.LEFT);
else
g.drawImage(background[1], 0, 0, Graphics.TOP | Graphics.LEFT);
// вывести сообщение о статусе
g.setColor(255, 255, 255); // white
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_MEDIUM));
g.drawString(status, getWidth() / 2, 5, Graphics.TOP | Graphics.HCENTER); // В верхней части экрана выводится статусное сообщение
// вывести содержимое буфера на экран
flushGraphics();
}Метод draw() начинается с проверки значения переменной mode, которая определяет, какое изображение маяка следует вывести. Если значение этой переменной равно 0, то выводится изображение маяка с погашенным огнем, в противном случае выводится изображение маяка с включенным огнем. Остальной код выводит в нижней части экрана сообщение о статусе соединения. Сообщение о текущем статусе выводится функцией setStatus():
public void setStatus(String s) {
// установить текущий статус
status = s;
}Последний метод класса LHCanvas – это метод receiveMessage(), принимающий сообщение, закодированное азбукой Морзе, и в соответствии с сообщением настраивает холст. В листинге 14.8 приведен код этого метода: Листинг 14.8. Метод receiveMessage() класса LHCanvas получает сообщение, отправленное по сети
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»), которая очень хорошо подходит в данном случае.
Читать дальшеИнтервал:
Закладка: