Так как, в отличие от указанного выше оригинала, в нашем проекте при загрузке графических файлов имя проекта будет определяться в программе, то сейчас в окне Name можно записать любое имя. Создаётся проект, появляется форма Form1 в режиме проектирования (рис. 22.10). Оставляем по умолчанию или проектируем форму, как подробно описано в параграфе “Методика проектирования формы”. Например, в панели Properties (для Form1) в свойстве Font увеличиваем размер шрифта до 10. За маркеры увеличиваем размеры формы таким образом, чтобы в свойстве Size были, например, такие величины: 405; 456.
С панели инструментов Toolbox переносим в нижнюю часть формы элемент управления типа окна текста TextBox.
Ниже размещаем кнопку Button с номером 1. В панели Properties (для этого элемента) в свойстве Text записываем “Новая игра”.
Правее размещаем кнопку Button. В панели Properties (для этого элемента) в свойстве Name записываем ButtonNextLevel, а в свойстве Text записываем Уровень.
Правее размещаем кнопку Button. В панели Properties (для этого элемента) в свойстве Name записываем buttonInstructions, а в свойстве Text записываем Помощь.
Свойства и формы, и этих элементов управления можно изменять, как описано ранее.
Переносим таймер Timer. В панели Properties (для этого невидимого на форме компонента) в свойстве Name записываем timerGame, в свойстве Enabled выбираем True, а свойству Interval задаём значение 40 миллисекунд, что соответствует 25 кадрам в секунду по стандарту телевещания России.
Теперь добавляем в проект графические файлы по обычной схеме: в панели Solution Explorer выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, Existing Item (или Project, Add Existing Item), в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим (например, в папке с загруженными из Интернета файлами) и с нажатой клавишей Ctrl выделяем файлы и щёлкаем кнопку Add, чтобы после этого добавления в панели Solution Explorer были файлы, показанные на рис. 22.9.
В панели Solution Explorer выделяем все графические файлы (с нажатой клавишей Ctrl), а в панели Properties в свойстве Build Action (Действие при построении) вместо заданного по умолчанию выбираем значение Embedded Resource (Встроенный ресурс) для всех этих файлов.
Если в игре применяются несколько звуковых файлов, то их целесообразно разместить в одной папке с именем, например, Sounds. Для добавления в проект этой папки, в панели Solution Explorer выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, New Folder, в поле появившегося значка папки записываем имя папки и нажимаем клавишу Enter.
Добавляем в эту папку звуковые файлы по стандартной схеме: выполняем правый щелчок по имени этой папки, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим (например, в папке с загруженными из Интернета файлами) и с нажатой клавишей Ctrl выделяем файлы и щёлкаем кнопку Add. В панели Solution Explorer мы увидим эти файлы.
Рис. 22.10. Форма Form1 в режиме проектирования. Рис. 22.11. Панель Solution Explorer.
22.4. Код и запуск программы
Открываем файл Form1.vb (например, по схеме: File, Open, File) и в самом верху импортируем пространства имён для управления соответствующими классами:
Imports System.Reflection 'Для класса Assembly.
В классе Form1 нашего проекта записываем следующие переменные и методы.
Листинг 22.1. Переменные и методы.
'–
'Offsets on form where we should draw the playfield
'–
Const GAME_SCREEN_DX = 2
Const GAME_SCREEN_DY = 1
'Current playfield
Private m_playfieldManager As PlayFieldManager
'Gfx object of the form that we will render the playfield to
Dim m_myFormsGraphics As Graphics
'–
'Does the things we need to get get a round running
'–
Sub InitializeNewLevel
'Add a game event handler to get updates on the game
AddHandler m_playfieldManager.GameStateChanged, _
AddressOf GameEventOccured
'Start the game
timerGame.Enabled = True
ButtonNextLevel.Visible = False
'–
'Give the text-box focus so we can get keyboard events
'–
TextBox1.Focus
End Sub
'–
'Starts a new game
'–
Sub StartGame
'Мелодия начала игры с ожиданием окончания мелодии:
'My.Computer.Audio.Play("..\..\Sounds\drumpad-crash.wav", _
' AudioPlayMode.WaitToComplete)
'Мелодия начала игры без ожидания её окончания:
My.Computer.Audio.Play("..\..\Sounds\drumpad-crash.wav")
'–
'Create Graphics object and cache it
'–
If (m_myFormsGraphics Is Nothing) Then
m_myFormsGraphics = Me.CreateGraphics
End If
'–
'Create the playfield level we want to start on
'–
m_playfieldManager = New Playfield_Level2
'–
'Start the level running
'–
InitializeNewLevel
End Sub
Sub PictureBoxPlayField_MouseDown( _
ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)
'If Hank's around, give him a new destination
'If Not (m_HankTheWonderCaveMan Is Nothing) Then
If Not (m_playfieldManager Is Nothing) Then
m_playfieldManager.HankTheWonderCaveman. _
setHanksDestination(e.X, e.Y)