Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
- Название:Программирование КПК и смартфонов на .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-91180-270-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание
Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?
Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование КПК и смартфонов на .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
private void placeTomatoes() {
for (int i = 0; i < tomatoes.Length; i++) {
tomatoes[i].rectangle.Y = tomatoDrawHeight;
tomatoes[i].visible = true;
}
}
Этот метод вызывается один раз при старте игры, а после этого он запускается после уничтожения очередного ряда томатов. Метод обновляет высоту с новым значением и делает изображения томатов видимыми. Вызов данного метода также размещается в конструкторе формы.
Итак, сейчас позиции всех томатов определены. Нужно вывести их изображения помидоров на экран. Код, приведенный в листинге 11.28, встраивается в обработчик события Form1_Paint
.
for (int i = 0; i < tomatoes.Length; i++) {
if (tomatoes[i].visible) {
g.DrawImage(tomatoImage, tomatoes[i].rectangle.X, tomatoes[i].rectangle.Y);
}
}
Каждый раз, когда страница перерисовывается, этот код перерисовывает все видимые томаты. Естественно, для отображения всех томатов используется одно и то же изображение.
Чтобы сделать игру реалистичнее, нужно переместить начальную высоту батона чуть ниже, чтобы игрок мог сразу играть в игру с более подходящей позиции. Этот код приведен в листинге 11.29.
breadRectangle = new Rectanglе(
(this.ClientSize.Width - breadImage.Width) / 2,
this.ClientSize.Height — breadImage.Height,
breadImage.Width, breadImage.Height);
Теперь игра выглядит так, как показано на рис. 11.7

Рис. 11.7. Внешний вид игры
Уничтожение томатов
К сожалению, в данный момент при столкновении сыра с помидорами ничего не происходит. Ситуацию надо исправить при помощи кода, добавленного в метод updatePosition
, который приведен в листинге 11.30.
// Уничтожаем помидоры при столкновении с сыром
for (int i = 0; i < tomatoes.Length; i++) {
if (!tomatoes[i].visible) {
continue;
}
if (cheeseRectangle.IntersectsWith(tomatoes[i].rectangle)) {
// прячем томат
tomatoes[i].visible = false;
// отражаемся вниз
goingDown = true;
// только удаляем помидор
break;
}
}
Код выполняется, когда сыр двигается вверх. При этом проверяются позиции каждого помидора и куска сыра при помощи метода IntersectsWith
. Если произошло столкновение сыра с томатом, то томат делается невидимым, для чего свойству Visiblе
присваивается значение False
. При следующей перерисовке экрана этот томат не появится на экране. Сыр должен отскакивать от помидора, как от стенок или от батона.
Счет игры
Итак, это уже похоже на игру. Но пока ей не хватает увлекательности. Нужно добавить подсчет результатов. Отображение результатов игры — не самая сложная задача. Мы можем выводить текст на экран с помощью метода DrawString
. Но при этом потребуется указать шрифт, кисть и координаты вывода текста. Начать стоит со шрифта. Его надо инициализировать в конструкторе формы при помощи кода, приведенного в листинге 11.31.
///
/// Шрифт для вывода счета
///
private Font messageFont = null;
// Создадим шрифт для показа набранных очков
messageFont = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular);
Теперь необходимо выбрать прямоугольник, в котором будет отображаться текст. Нужно зарезервировать 15 пикселов в верхней части экрана для отображения текущего счета. При этом потребуется модифицировать игру, чтобы двигающиеся объекты не попадали в эту область.
Используя переменную для хранения этой высоты, можно легко изменить размеры информационной панели, если понадобится. Прямоугольник инициализируется при загрузке формы, как показано в листинге 11.32.
///
/// Прямоугольник, в котором будет отображаться счет игры
///
private Rectangle messageRectangle;
///
/// Высота панели для счета.
///
private int scoreHeight = 15;
// Устанавливаем размеры прямоугольника для счета
messageRectangle = new Rectanglе(0, 0, this.ClientSize.Width, scoreHeight);
Если прямоугольник будет слишком мал для текста, то текст будет обрезаться при отображении.
После того как будут заданы шрифт и область для отображения текстовой информации, пора позаботиться о кисти. Выбирая тип кисти, одновременно указывайте цвет и узор для рисования, как показано в листинге 11.33.
///
/// Кисть, используемая для отображения сообщений
///
private SolidBrush messageBrush;
// Выбираем красную кисть
messageBrush = new SolidBrush(Color.Red);
Текст счета игры на экране будет отображаться красным цветом. Чтобы вывести сообщение на экран, понадобится вызвать метод DrawString
в событии Form1_Paint
, как показано в листинге 11.34.
///
/// Строка для вывода сообщений
///
private string messageString = "Нажмите Старт для начала игры";
g.DrawString(messageString, messageFont, messageBrush, messageRectangle);
Созданная переменная messageString
применяется для вывода сообщений на экран во время игры.
Ведение счета
Теперь нужно научиться обновлять счетчик столкновения томатов в методе updatePosition
. Код для этого приведен в листинге 11.35.
///
/// Счет в игре
///
private int scoreValue = 0;
private void updatePositions() {
if (cheeseRectangle.IntersectsWith(tomatoes[i].rectangle)) {
// прячем томат
tomatoes[i].visible = false;
// отражаемся вниз
goingDown = true;
// обновляем счет
scoreValue = scoreValue + 10;
messageString = "Счет: " + scoreValue;
break;
}
}
За каждый уничтоженный томат начисляется 10 очков. Эти данные постоянно обновляются и выводятся на экран.
Звуковые эффекты
Неплохо бы добавить в игру звуковые эффекты. К сожалению, библиотека .NET Compact Framework пока не поддерживает воспроизведение звуковых файлов при помощи управляемого кода. Поэтому придется воспользоваться механизмом Platform Invoke (P/Invoke). В главе, посвященной вызовам функций Windows API, эта тема будет освещаться подробнее
Для воспроизведения звуков можно встроить звуковой файл в саму программу, как это делалось с изображениями, либо проигрывать сам звуковой файл, который расположен где-то в файловой системе.
В этом проекте требуется создать отдельный класс для воспроизведения звуков. Нужно щелкнуть правой кнопкой мыши на проекте Bouncer
в окне Solution Explorer
и выполнить команду контекстного меню Add►New Item...
В открывшемся окне нужно выбрать элемент Class
и задать имя Sound.cs
. После нажатия кнопки Add
новый класс будет добавлен в проект.
Интервал:
Закладка: