Книга: Программирование КПК и смартфонов на .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. Внешний вид игры

Оглавление книги


Генерация: 1.670. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз