Предыдущая Следующая
if (level > 8) level = 1;
Рис. 22.6. Табло игры
break;
356 Последние штрихи
Добавим в игру логику 357
Как видите, у нас в коде добавляется новый экран VictoryScreen, представленный классом с одноименным названием. Исходный код этого класса фактически идентичен заставкам и меню игры, с той лишь разницей, что на экране присутствуют всего три команды: Продолжить, Меню и Выход. Техника обработки этих команд идентична схеме работы меню игры. Этот код нужно вызвать в основном цикле игры, чтобы он обновлялся на каждой итерации. Полный исходный код окончательной версии игры вы найдете на компакт-диске в папке Code\Final3d\ Footballarrows.
Если игрок упустит мяч на поле, то в работу включается уже другая конструкция кода.
if(ball[i].position.Y < -32)
{
ball[i].position.Y = ball[i].position.Y; gameState = CurentGameState.GameOverScreen; Sound.PlayCue(soundList.Over);
Здесь мы имеем также новую заставку GameOverScreen и новый класс GameOverScreen. Этот класс однотипен и похож на все заставки и меню игры, разобраться самостоятельно с ним вам не составит труда. Единственное, на что я еще хочу обратить ваше внимание, - так это на новый механизм обработки нажатия кнопки мыши в классе Game1.
Дело в том, что у мыши ситуация с длительностью удержания нажатой кнопки абсолютно аналогична рассмотренной нами ситуации с нажатием клавиш на клавиатуре. В связи с этим нам необходимо добавить в код идентификатор отпускания нажатой кнопки мыши. Специального метода у мыши, как у клавиатуры, для этих целей нет, поэтому мы прибегаем к небольшой хитрости.
Сначала объявляем в глобальных переменных новый объект, следящий за состоянием мыши.
MouseState oldMouseState;
А затем в методе MouseClick() проверяем состояние нажатой и отпущенной кнопки мыши:
void MouseClick()
// проверяем состояние мыши
if(mouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)
{
Sound.PlayCue(soundList.Shot);
Ray pickRay = GetPickRay();
Nullable<float> result0 = pickRay.Intersects(bb[0]); if(result0.HasValue == true)
{
ball[0].position.X = rand.Next(-(rand.Next(0, 80)), rand.Next(0, 80));
ball[0].position.Y = rand.Next(0, 80);
ball[0].position.Z = rand.Next(-(rand.Next(0, 50)), rand.Next(0, 150)); score0 += 1;
}
Nullable<float> result1 = pickRay.Intersects(bb[1]); if (result1.HasValue == true)
{
ball[1].position.X = rand.Next(-(rand.Next(0, 80)), rand.Next(0, 80)); Предыдущая Следующая
|