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. Это поможет увеличить скорость обработки ввода на треть.
Читать дальше
Конец ознакомительного отрывка
Купить книгу