Книга: Программирование КПК и смартфонов на .NET Compact Framework
Размещение помидоров
Разделы на этой странице:
Размещение помидоров
Нужно создать массив помидоров для размещения на экране, как показано в листинге 11.25.
Листинг 11.25
/// <summary>
/// Расстояние между помидорами.
/// Устанавливаем один раз для игры
/// </summary>
private int tomatoSpacing = 4;
/// <summary>
/// Высота, на которой рисуется помидор
/// Высота может меняться в процессе игры
/// Начинаем с верхней части экрана
/// </summary>
private int tomatoDrawHeight = 4;
/// <summary>
/// Количество помидоров на экране.
/// Устанавливается при старте игры
/// методом initialiseTomatoes.
/// </summary>
private int noOfTomatoes;
/// <summary>
/// Позиции всех помидоров на экране
/// </summary>
private tomato[] tomatoes;
При усложнении игры помидоры должны отображаться все ниже и ниже, заставляя пользователя действовать интуитивно. Переменная tomatoDrawHeight
будет отвечать за эту задачу. Для инициализации местоположения помидоров нужно создать функцию initialiseTomatos
, которая использует размеры помидоров и экрана. Ее код приведен в листинге 11.26.
Листинг 11.26
/// <summary>
/// Вызывается один раз для установки всех помидоров
/// </summary>
private void initialiseTomatoes() {
noOfTomatoes =
(this.ClientSize.Width - tomatoSpacing) /
(tomatoImage.Width + tomatoSpacing);
// создаем массив, содержащий позиции помидоров
tomatoes = new tomato[noOfTomatoes];
// Координата x каждого помидора
int tomatoX = tomatoSpacing / 2;
for (int i = 0; i < tomatoes.Length; i++) {
tomatoes[i].rectangle =
new Rectangle(tomatoX, tomatoDrawHeight,
tomatoImage.Width, tomatoImage.Height);
tomatoX = tomatoX + tomatoImage.Width + tomatoSpacing;
}
}
Вызов этого метода следует разместить в конструкторе формы. Метод подсчитывает количество помидоров, создает массив структур и задает прямоугольники, определяющие позицию каждого помидора на экране. Теперь их надо разместить на форме в один ряд. Код, отвечающий за эти действия, приведен в листинг 11.27.
Листинг 11.27
/// <summary>
/// Вызывается для создания ряда помидоров.
/// </summary>
private void placeTomatoes() {
for (int i = 0; i < tomatoes.Length; i++) {
tomatoes[i].rectangle.Y = tomatoDrawHeight;
tomatoes[i].visible = true;
}
}
Этот метод вызывается один раз при старте игры, а после этого он запускается после уничтожения очередного ряда томатов. Метод обновляет высоту с новым значением и делает изображения томатов видимыми. Вызов данного метода также размещается в конструкторе формы.
Итак, сейчас позиции всех томатов определены. Нужно вывести их изображения помидоров на экран. Код, приведенный в листинге 11.28, встраивается в обработчик события Form1_Paint
.
Листинг 11.28
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.
Листинг 11.29
breadRectangle = new Rectanglе(
(this.ClientSize.Width - breadImage.Width) / 2,
this.ClientSize.Height — breadImage.Height,
breadImage.Width, breadImage.Height);
Теперь игра выглядит так, как показано на рис. 11.7
Рис. 11.7. Внешний вид игры
- Начало работы
- Добавление изображения в программу
- Использование встроенных ресурсов
- Вывод картинки на экран
- Создание анимации
- Отражения
- Управление скоростью движения объекта
- Добавляем новый объект
- Устранение мерцания
- Хлеб — всему голова
- Обнаружение столкновений
- Столкновения батона и мяча
- Новые объекты
- Размещение помидоров
- Уничтожение томатов
- Счет игры
- Ведение счета
- Звуковые эффекты
- Дальнейшие улучшения
- И опять добавляем новые объекты
- Управление таблицей результатов
- Переключение между формами
- Отображение дочернего окна
- Получение имени игрока
- Хранение лучших результатов
- Улучшение графики
- Спрайты
- Как выбрать сетевое размещение?
- Размещение публикаций в сетевых СМИ
- Размещение пресс-релизов
- На что влияет сетевое размещение?
- 12.11.2 Размещение серверов DNS
- 7.2. Взаимное размещение текстовых блоков
- 7.1. Размещение текста на носителе
- Управление размещением формы на экране
- Шаг 1. Размещение резюме в Интернете
- Шаг 3. Размещение резюме
- 2.4. Оригинальное размещение традиционной рекламы
- Размещение рекламы в кинофильмах и на телевидении