Майкл Моррисон - Создание игр для мобильных телефонов
- Название:Создание игр для мобильных телефонов
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Моррисон - Создание игр для мобильных телефонов краткое содержание
Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона.
Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.
В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки.
Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас!
Перевод: К. Михалкин
Создание игр для мобильных телефонов - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
}
public void run() {
Graphics g = getGraphics();
// основной игровой цикл
while (!sleeping) {
update();
draw(g);
try {
Thread.sleep(frameDelay);
}
catch (InterruptedException ie) {}
}
}
private void update() {
// проверить, перезапущена ли игра
if (gameOver) {
int keyState = getKeyStates();
if ((keyState & FIRE_PRESSED) != 0) {
// Start a new game
chickenSprite.setPosition(2, 77);
gameOver = false;
score = 0;
numLives = 3;
}
// игра окончена, нет необходимости обновления
return;
}
// обработать пользовательский ввод
if (++inputDelay > 2) {
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
chickenSprite.move(-6, 0);
chickenSprite.nextFrame();
}
else if ((keyState & RIGHT_PRESSED) != 0) {
chickenSprite.move(6, 0);
chickenSprite.nextFrame();
}
if ((keyState & UP_PRESSED) != 0) {
chickenSprite.move(0, -6);
chickenSprite.nextFrame();
}
else if ((keyState & DOWN_PRESSED) != 0) {
chickenSprite.move(0, 6);
chickenSprite.nextFrame();
}
checkBounds(chickenSprite, false);
// обнулить задержку ввода
inputDelay = 0;
}
// проверить, перешел ли цыпленок через шоссе
if (chickenSprite.getX() > 154) {
// воспроизвести звук, если цыпленок преодолел шоссе
AlertType.WARNING.playSound(display);
// вернуть спрайт цыпленка в исходное положение и увеличить счет
chickenSprite.setPosition(2, 77);
score += 25;
}
// обновить спрайты автомобилей
for (int i = 0; i < 4; i++) {
// переместить спрайты автомобилей
carSprite[i].move(0, carYSpeed[i]);
checkBounds(carSprite[i], true); //Значение true, передаваемое вторым параметром, говорит о том, что автомобили при достижении границы экрана появятся у противоположного края
// проверить столкновения между спрайтами автомобилей и спрайтом цыпленка
if (chickenSprite.collidesWith(carSprite[i], true)) {
// воспроизвести звук при гибели цыпленка
AlertType.ERROR.playSound(display);
// проверить, не закончена ли игра
if (–numLives == 0) {
gameOver = true;
} else {
// вернуть спрайт цыпленка в исходное положение
chickenSprite.setPosition(2, 77);
}
// нет необходимости обновлять спрайты автомобилей
break;
}
}
}
private void draw(Graphics g) {
// вывести фоновое изображение
g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);
// вывести число оставшихся жизней
for (int i = 0; i < numLives; i++) //Ряд маленьких изображений цыплят отражает число оставшихся жизней
g.drawImage(chickenHead, 180 – ((i + 1) * 8), 170, Graphics.TOP |
Graphics.LEFT);
// нарисовать спрайт цыпленка
chickenSprite.paint(g);
// нарисовать спрайт автомобиля
for (int i = 0; i < 4; i++)
carSprite[i].paint(g);
if (gameOver) {
// вывести сообщение о конце игры и счет
g.setColor(255, 255, 255); // белый
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
Font.SIZE_LARGE));
g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
Font.SIZE_MEDIUM));
g.drawString("You scored " + score + " points.", 90, 70, Graphics.TOP |
Graphics.HCENTER);
}
// вывести содержимое буфера на экран
flushGraphics();
}
private void checkBounds(Sprite sprite, boolean wrap) {
// переместить/остановить спрайт
if (wrap) {
// переместить спрайт в исходное положение
if (sprite.getX() < -sprite.getWidth())
sprite.setPosition(getWidth(), sprite.getY());
else if (sprite.getX() > getWidth())sprite.setPosition(-sprite.getWidth(), sprite.getY());
if (sprite.getY() < -sprite.getHeight())
sprite.setPosition(sprite.getX(), getHeight());
else if (sprite.getY() > getHeight())
sprite.setPosition(sprite.getX(), -sprite.getHeight());
}
else {
// остановить спрайт у края экрана
if (sprite.getX() < 0)
sprite.setPosition(0, sprite.getY());
else if (sprite.getX() > (getWidth() – sprite.getWidth()))
sprite.setPosition(getWidth() – sprite.getWidth(), sprite.getY());
if (sprite.getY() < 0)
sprite.setPosition(sprite.getX(), 0);
else if (sprite.getY() > (getHeight() – sprite.getHeight()))
sprite.setPosition(sprite.getX(), getHeight() – sprite.getHeight());
}
}
}
Я надеюсь, что длина приведенного кода вас не испугала. Если вы потратите немного времени на его изучение, то поймете, что вы уже с ним знакомы. В этом листинге просто собраны все элементы кода, рассмотренные ранее.
Класс HenwayMIDlet – это класс мидлета, который создает экземпляр класса HCanvas. По этой причине я опущу рассмотрение кода класса мидлета. Помните, что полный код мидлета Henway, а также прочих программ, рассматриваемых в книге, можно найти на прилагаемом компакт-диске.
Тестирование игры
Игру Henway намного веселее тестировать, чем программу UFO. Henway – это первая созданная вами полноценная игра, что делает этот мидлет очень привлекательным для пользователя.
Это экшн-игра, такие игры необходимо тщательно тестировать, потому что сложно предугадать, как поведет себя спрайт в той или иной ситуации. Вы должны немного поиграть в игру и убедиться, что ничего из ряда вон выходящего не происходит.
На рис. 7.5 показано начало игры, ваш храбрый цыпленок готов к переходу через шоссе.
Рис. 7.5. Игра Henway начинается с того, что цыпленок готов к переходу через шоссеЧтобы начать игру, просто проведите вашего цыпленка через дорогу, для чего используйте клавиши со стрелками на мобильном телефоне (или клавиши со стрелками на клавиатуре). Если вы успешно перевели цыпленка через шоссе, ваш счет увеличится на 25 очков.
Конечно, даже лучшие игроки Henway рано или поздно теряют цыпленка под колесами автомобиля. Когда такое случается, подается звуковой сигнал, а цыпленок возвращается на старт. Еще более важно, что игрок видит, что число жизней уменьшилось (рис. 7.6).
Рис. 7.6. Попасть под машину не так уж страшно, как вы могли бы подумать. При этом лишь уменьшается число жизнейСовет Разработчику
Если вы обнаружите, что реакция на нажатия клавиш на клавиатуре очень замедлена, попробуйте уменьшить значение переменной inputDelay до 1. Это поможет увеличить скорость обработки ввода на треть.
Если вы потеряете всех трех цыплят, то игра заканчивается. На рис. 7.7 показан конец игры, на экране просто выводится ваш счет и строка «game over» (игра закончена).
Рис. 7.7. Если вы потеряли всех цыплят, то игра закончена
Вам, может быть, жаль цыплят, погибших под колесами автомобилей на шоссе, но это всего лишь игра. Несмотря на кажущуюся простоту, Henway – это кульминация всего, что вы уже изучили. В дальнейшем вы еще многому научитесь и будете создавать еще более захватывающие игры.
Резюме
Правда жизни такова, что теория бесполезна, если нет практики. Эта глава показала, что все изложенное ранее можно применить на практике – в вашей первой полноценной мобильной игре. В игре Henway используется методика обработки пользовательского ввода, о которой шла речь в предыдущей главе, а также все, что вы узнали о спрайтах. К счастью, теперь, когда есть MIDP 2.0, вы можете с легкостью создавать интересные мобильные игры при минимальных усилиях. Но мидлет Henway, не самый интересный, все только начинается!
Хотя в игре Henway вы уже воспроизвели несколько звуков, в следующей главе речь пойдет о возможностях работы со звуком в J2ME. Вы узнаете, как воспроизводить цифровые звуки, и улучшите игру Henway, добавив соответствующее звуковое сопровождение.
В заключение
В игру Henway можно добавить одну интересную деталь – канализационные люки, которые часто можно увидеть на дорогах. Проходя по такому люку, цыпленок может провалиться в него. Необходимо проверять столкновение спрайта цыпленка со спрайтом люка. Ниже приведены шаги, которые необходимо выполнить, чтобы добавить люки смерти в игру:
Читать дальшеИнтервал:
Закладка: