Читаем Программирование КПК и смартфонов на .NET Compact Framework полностью

Также метод инициализирует счетчик таймера для отчета длительности присутствия ветчины на экране. Программа использует минимальное время вкупе со случайным периодом. Таким образом, пользователь никогда не будет знать, как долго ветчина будет видима. Каждый раз при обновлении игры программа должна обновлять состояние куска ветчины. Если игрок коснулся изображения ветчины, то надо увеличить счет и удалить изображение. Соответствующий код приведен в листинге 11.52.

Листинг 11.52

///

/// Обновляем состояние ветчины

///

private void hamTick() {

 // ничего не делаем, если ветчина невидима

 if (!hamPresent) {

  return;

 }

 if (breadRectangle.IntersectsWith(bonusHamRectangle)) {

  // при касании игроком куска ветчины

  // прибавляем 100 очков

  scoreValue = scoreValue + 100;

  messageString = "Счет: " + scoreValue + " Жизнь: " + livesLeft;

  // звук касания ветчины

  bonusHamSound.Play();

  // прячем ветчину с экрана

  hamPresent = false;

 } else {

  // Отчитываем время назад

  hamTimerCount--;

  if (hamTimerCount == 0) {

   // время вышло - удаляем ветчину

   hamPresent = false;

  }

 }

}

Также надо изменить код методов Form1_Paint и updatePosition. Если изображения батона и ветчины пересекаются, то нужно увеличить счет и удалить изображение ветчины. В ином случае надо уменьшить время отображения ветчины или удалить это изображение, если соответствующий период времени уже закончился. Соответствующий код приведен в листинге 11.53.

Листинг 11.53

//(Form1_Paint)

// Выводим на экран кусок ветчины

if (hamPresent) {

 g.DrawImage(bonusHamImage, bonusHamRectangle.X, bonusHamRectangle.Y);

}

//(updatePosition)

// Активизируем ветчину

startHam();

//(timerTick)

hamTick();

Но мы можем продолжить улучшение игры, добавляя в нее новые возможности. Все изменения по-прежнему будут происходить в проекте Bouncer. Теперь предстоит создать таблицу лучших результатов, улучшить работу графики и разобраться с применением спрайтов.

Управление таблицей результатов

Созданная программа может показывать лучший результат, достигнутый пользователем. Но после ее перезапуска лучшие результаты теряются, и все приходится начинать сначала. Для устранения этого недостатка нужно добавить возможность сохранения имени пользователя при достижении высокого результата. Также следует сохранять результат и имя пользователя при выходе из программы.

Поэтому понадобится еще одна форма для отображения имен игроков. При достижении лучшего результата эта форма будет показана на экране, чтобы пользователь мог ввести свое имя.

Новую форму надо добавить в проект и задать для нее имя HighScore.cs. На созданной форме следует разместить текстовое поле для ввода имени и меню, которое сигнализирует об окончании ввода. Созданная форма будет отображаться при достижении высокого результата. В этом случае игрок-рекордсмен вводит свое имя и нажимает на пункт меню OK для закрытия формы и сохранения имени.

Переключение между формами

Программа должна выводить форму с результатами поверх основной формы игры, чтобы позволить игроку ввести имя, а затем вернуться к игре. Когда форма с лучшими результатами появляется на экране, основная форма должна быть скрыта. И наоборот, при закрытии окна с результатами основная форма восстанавливается.

При загрузке формы генерируется событие Load. При закрытии формы генерируется событие Closing. Программа должна контролировать эти события для реализации поставленной задачи.

При старте программы создается экземпляр формы HighScore. Данный экземпляр имеет ссылку на родительскую форму. При достижении высокого результата форма HighScore выводится на экран. При этом выполняется метод HighScore_Load, который скрывает родительскую форму. На экране появляется форма, отображающая лучшие результаты, игрок вводит свое имя и выполняет команду меню OK. При этом срабатывает обработчик события для меню OK, которое закрывает форму HighScore. При закрытии формы выполняется метод HighScore_Closing. Основное окно формы снова появляется на экране. Код главной формы извлекает имя игрока из формы HighScore.

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

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