11.32.
/// <summary>
/// Прямоугольник, в котором будет отображаться счет игры
/// </summary>
private Rectangle messageRectangle;
/// <summary>
/// Высота панели для счета.
/// </summary>
private int scoreHeight = 15;
// Устанавливаем размеры прямоугольника для счета
messageRectangle = new Rectanglе(0, 0, this.ClientSize.Width, scoreHeight);
Если прямоугольник будет слишком мал для текста, то текст будет обрезаться при отображении.
После того как будут заданы шрифт и область для отображения текстовой информации, пора позаботиться о кисти. Выбирая тип кисти, одновременно указывайте цвет и узор для рисования, как показано в листинге 11.33.
/// <summary>
/// Кисть, используемая для отображения сообщений
/// </summary>
private SolidBrush messageBrush;
// Выбираем красную кисть
messageBrush = new SolidBrush(Color.Red);
Текст счета игры на экране будет отображаться красным цветом. Чтобы вывести сообщение на экран, понадобится вызвать метод DrawString
в событии Form1_Paint
, как показано в листинге 11.34.
/// <summary>
/// Строка для вывода сообщений
/// </summary>
private string messageString = 'Нажмите Старт для начала игры';
g.DrawString(messageString, messageFont, messageBrush, messageRectangle);
Созданная переменная messageString
применяется для вывода сообщений на экран во время игры.
Ведение счета
Теперь нужно научиться обновлять счетчик столкновения томатов в методе updatePosition
. Код для этого приведен в листинге 11.35.
/// <summary>
/// Счет в игре
/// </summary>
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
новый класс будет добавлен в проект.
Класс Sound
будет иметь два метода. Один метод создает экземпляр класса Sound
, читая данные из заданного файла. Второй метод предназначен для проигрывания звука. Также в составе класса будет находиться свойство, позволяющее настраивать громкость звука.
В начале файла Sound.cs
надо расположить строки для подключения используемых пространств имен, как показано в листинге 11.36.
using System.Runtime.InteropServices;
using System.IO;
Наш пример со звуком просто хранит в памяти байтовый массив с аудиоматериалом. Для обращения к этому блоку используется функция операционной системы, способная производить звуки. В классе Sound
блок памяти объявляется так, как показано в листинге 11.37.
/// <summary>
/// массив байтов, содержащий данные о звуке
/// </summary>
private byte[] soundBytes;
Эта конструкция не создает массив, а только объявляет его. Массив будет создан при