private extern static int WCE_PlaySoundBytes( byte[] szSound,
IntPtr hMod, int flags);
Теперь, когда создан экземпляр класса
Sound
, можно воспроизводить звук при столкновении сыра с батоном хлеба. Соответствующий код приведен в листинге 11.42.
Листинг 11.42
// если сыр движется вниз
if (cheeseRectangle.IntersectsWith(breadRectangle)) {
// столкновение
// воспроизводим удар
batHitSound.Play;
}
Можете запустить проект, чтобы проверить работу звука. Также можно добавить звук при столкновении сыра с помидорами. Этот код приведен в листинге 11.43.
Листинг 11.43
if (cheeseRectangle.IntersectsWith(tomatoes[i].rectangle)) {
// воспроизводим звук столкновения сыра с помидором
tomatoHitSound.Play;
}
Дальнейшие улучшения
Но игру все еще можно улучшить. В следующем списке указаны дополнительные возможности, которые необходимо реализовать.
□ Режим «attract», включающийся, когда пользователь не играет.
□ Потеря жизни, если сыр ударился о нижнюю границу экрана.
□ При уничтожении всех томатов они должны появиться чуть ниже, и скорость игры должна возрасти.
□ Добавление в игру случайных элементов.
В программу надо ввести булеву переменную
gameLive
, которая имеет значение
True
, когда пользователь ведет игру. Если значение переменной равно
False
, то сыр будет двигаться по экрану, но никаких игровых действий производиться не будет.
Для этого потребуется изменить метод, выполняющийся при старте игры. Новая версия приведена в листинге 11.44.
Этот код возвращает все объекты на исходные позиции и начинает новую игру. Батон располагается в середине экрана, а сыр чуть выше него. Этот метод связан с пунктом меню, позволяющим начать игру.
Теперь надо добавить код, который проверяет, не коснулся ли сыр нижней границы экрана. В этом случае вызывается метод
loseLife
, который уменьшает количество жизней у игрока.
Соответствующий код приведен в листинге 11.45.
Листинг 11.45
if ((cheeseRectangle.Y + cheeseImage.Height) >= this.Height) {
// сыр достиг нижней границы экрана
loseLife;
goingDown = false;
}
Метод
loseLife
подсчитывает количество оставшихся жизней и заканчивает игру, если все жизни были израсходованы. Также метод может показывать лучший достигнутый счет игры. Его код приведен в листинге 11.46.