Читаем Создание игр для мобильных телефонов полностью

for (int i = 0; i < 4; i++) {

// переместить спрайты автомобилей

carSprite[i].move(0, carYSpeed[i]);

checkBounds(carSprite[i], true);

// проверить столкновение спрайта цыпленка и спрайтов автомобилей

if (chickenSprite.collidesWith(carSprite[i], true)) {

// воспроизвести звук в случае гибели цыпленка

AlertType.ERROR.playSound(display);

// Check for a game over

if (–numLives == 0) {

gameOver = true;

} else {

// восстановить исходное положение цыпленка

chickenSprite.setPosition(2, 77); //Если игра не закончена, цыпленок возвращается в исходное положение, чтобы еще раз попытаться перейти дорогу.м

}

// не нужно обновлять спрайты автомобилей

break;

}

}

Все спрайты автомобилей перемещаются в вертикальном направлении, их скорости хранятся в массиве carYSpeed. Затем выполняется проверка, достиг ли автомобиль противоположной стороны экрана, для чего вызывается метод checkBounds() со вторым параметром true. Наиболее важный код – это детектирование столкновений спрайтов цыпленка и автомобилей. Если они столкнулись, то воспроизводится звук «ошибка» и переменная numLives уменьшается на 1. Если значение переменной равно 0, то игра закончена, значение переменной gameOver приравнивается true. Если нет, положение спрайта цыпленка обнуляется, а игра возобновляется. Важно отметить, что при столкновении спрайтов цикл прерывается, потому что нет необходимости проверять, был ли сбит цыпленок еще раз. Поскольку в игре используется не так много графики, метод draw() класса HCanvas очень прост. Первое, что он выполняет, – выводит фоновое изображение:

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);

Спрайты автомобилей нарисовать также несложно, просто вызывайте метод paint() внутри цикла:

for (int i = 0; i < 4; i++) carSprite[i].paint(g);

И, наконец, последнее, что остается вывести, – это сообщение «game over» (игра закончена), но его необходимо отображать только в случае, если игра закончена. Ниже приведен код, выполняющий это:

if (gameOver) {

// вывести сообщение о конце игры и счет

g.setColor(255, 255, 255); // white

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);

}

Для каждой строки текста используется шрифт разного размера, поэтому сообщение «game over» больше, нежели набранное число очков. Больше ничего особенного в этом коде нет. Последний фрагмент кода, который я хотел бы выделить, – это код нового улучшенного метода checkBounds(), который или возвращает спрайт в исходное положение, или ограничивает его дальнейшее перемещение:

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT