Чтение онлайн

на главную - закладки

Жанры

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

Новую форму надо добавить в проект и задать для нее имя

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

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

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

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

При загрузке формы генерируется событие

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

При старте программы создается экземпляр формы

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

Итак, метод

HighScore_Load
должен скрыть родительскую форму. Для этого метод должен использовать ссылку на главное окно. Ссылка на родительское окно передается в форму
HighScore
при ее создании, как показано в листинге 11.54.

Листинг 11.54

/// <summary>

/// Родительское окно, из которого вызывается данное окно.

/// Используется при закрытии данного окна.

/// </summary>

private Form parentForm;

public HighScore(Form inParentForm) {

 // Сохраняем родительское окно при закрытии окна лучших

 // результатов.

 parentForm = inParentForm;

 InitializeComponent;

}

Этот код является конструктором формы

HighScore
. Когда идет создание формы, то передается ссылка на родительскую форму.

Код метода

HighScore_Load
приведен в листинге 11.55.

Листинг 11.55

private void HighScore_Load(object sender, System.EventArgs e) {

 parentForm.Hide;

}

При загрузке формы родительское окно автоматически прячется. При закрытии формы надо вернуть родительскую форму на экран. Для этого применяется код, приведенный в листинге 11.56.

Листинг 11.56

private void HighScore_Closing(object sender,

 System.ComponentModel.CancelEventArgs e) {

 parentForm.Show;

}

После

ввода имени игрок выполняет команду меню
OK
для закрытия формы. Обработчик этого события приведен в листинге 11.57.

Листинг 11.57

private void doneMenuItem_Click(object sender, System.EventArgs e) {

 Close;

}

После закрытия окна вызывается обработчик события, который выводит главное окно на экран.

Отображение дочернего окна

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

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

Листинг 11.58

/// <summary>

/// Форма для ввода имени игрока с лучшим результатом.

/// </summary>

private HighScore highScore;

// Создаем форму для лучших результатов

highScore = new HighScore(this);

В этом коде ключевое слово

this
является ссылкой на текущий экземпляр основной формы, который должен быть закрыт при открытии формы
highScore
и восстановлен при закрытии формы
highScore
. Код для отображения формы
highScore
приведен в листинге 11.59.

Листинг 11.59

if (scoreValue > highScoreValue) {

 timer1.Enabled=false;

 // Показываем форму для лучших результатов

 highScore.ShowDialog;

 timer1.Enabled=true;

}

Если игрок побил текущий лучший результат, то программа останавливается при помощи отключения таймера. Для отображения формы

highScore
вызывается метод
ShowDialog
. Игра должна сделать паузу, пока игрок вводит свое имя. После этого игра продолжается.

Получение имени игрока

Игрок вводит свое имя в текстовое поле формы

highScore
. Чтобы получить доступ к имени пользователя во время игры, необходимо иметь доступ к экземпляру формы
HighScore
. В классе
HighScore
надо создать свойство, с помощью которого можно получить введенное пользователем имя. Этот код приведен в листинге 11.60.

Листинг 11.60

/// <summary>

/// Имя игрока, введенное в текстовом поле.

Поделиться:
Популярные книги

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Один на миллион. Трилогия

Земляной Андрей Борисович
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Один на миллион. Трилогия

Помещицы из будущего

Порохня Анна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Помещицы из будущего

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Император

Рави Ивар
7. Прометей
Фантастика:
фэнтези
7.11
рейтинг книги
Император

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри