End If
End Sub
'–
'This event-sink is to get called when a game event occurs
'–
Sub GameEventOccured(ByVal gameUpdateMessage As _
PlayFieldManager.GameUpdate)
'The level was completed succesfully
If (gameUpdateMessage = PlayFieldManager.GameUpdate. _
levelSuccesfullyCompleted) Then
ButtonNextLevel.Visible = True
End If
End Sub
'Загружаем в проект файлы изображений по такой схеме:
'Создаём объект myAssembly класса Assembly и присваиваем ему
'ссылку на исполняемую сборку нашего приложения:
Public myAssembly As Assembly = Assembly.GetExecutingAssembly
'Создаём объект myAssemblyName
'класса System.Reflection.AssemblyName и присваиваем ему
'имя сборки, которое состоит из имени проекта,
'Version, Culture, PublicKeyToken:
Public myAssemblyName As AssemblyName = myAssembly.GetName
'Из имени сборки при помощи свойства Name
'выделяем имя проекта типа string:
Public myName_of_project As String = myAssemblyName.Name
В панели Properties (для Form1) на вкладке Events дважды щёлкаем по имени события Load. Появившийся шаблон метода после записи нашего кода принимает следующий вид.
Листинг 22.2. Метод для загрузки изображений.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Visible = False
'–
'Load and cache the global object we need
'–
g_InitializeGlobals
Me.Visible = True
'–
'Place the textbox off the screen
'–
TextBox1.Width = 4
TextBox1.Multiline = True
TextBox1.Left = -20
'Start the game
StartGame
End Sub
В панели Properties (для Form1) на вкладке Events дважды щёлкаем по имени события FormClosing. Появившийся шаблон после записи нашего кода принимает следующий вид.
Листинг 22.3. Метод для закрытия формы.
Private Sub Form1_FormClosing(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) _
Handles MyBase.FormClosing
' '–
' 'Cleanup
' '–
'–
'Free up the form based objects
'–
m_playfieldManager = Nothing
If Not (m_myFormsGraphics Is Nothing) Then
m_myFormsGraphics.Dispose
m_myFormsGraphics = Nothing
End If
'–
'Free up all the global objects
'–
g_DisposeAndFreeGlobals
End Sub
На форме дважды щёлкаем по кнопке Button с номером 1 и текстом “Новая игра” (или в панели Properties, для этого элемента, на вкладке Events дважды щёлкаем по имени соответствующего события). Появившийся шаблон после записи нашего кода принимает следующий вид.
Листинг 22.4. Метод-обработчик щелчка кнопки.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
StartGame
End Sub
На форме дважды щёлкаем по кнопке Button с текстом Уровень (или в панели Properties, для этого элемента, на вкладке Events дважды щёлкаем по имени соответствующего события). Появившийся шаблон метода после записи нашего кода принимает следующий вид.
Листинг 22.5. Метод-обработчик щелчка кнопки.
Private Sub ButtonNextLevel_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles ButtonNextLevel.Click
'–
'Starts a new level of play
'–
'Ask the current level what it's next level is
m_playfieldManager = m_playfieldManager.GetNextLevel
'Start the level running
InitializeNewLevel
End Sub
На форме дважды щёлкаем по кнопке Button с текстом Помощь (или в панели Properties, для этого элемента, на вкладке Events дважды щёлкаем по имени соответствующего события). Появившийся шаблон метода после записи нашего кода принимает следующий вид.
Листинг 22.6. Метод-обработчик щелчка кнопки.
Private Sub buttonInstructions_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles buttonInstructions.Click
MsgBox("Правила игры: Соберите все факелы и " + _
"принесите их Еве. Очки засчитываются " + _
"за каждый факел данного уровня, " + _
"за оставшееся время бонуса и за энергию игрока, " _
+ "оставшуюся в конце каждого уровня.")
MsgBox("Адам потеряет энергию, если он будет поражён " + _
"валуном или птицей. Адам будет подскакивать, " + _
"чтобы не быть поражённым этими объектами. " + _
"Адам также потеряет энергию, " + _
"если он упадёт с большой высоты.")
MsgBox("Управление Адамом состоит в том, " + _
"чтобы щёлкать по экрану. После каждого щелчка " + _
"появляется пунктирная линия, показывающая, " + _
"куда пойдёт Адам. Чтобы Адам подпрыгнул " + _
"от валуна или птицы, " + _
"следует нажать клавишу пробела.")
'Bring the focus back to the textbox
'so it gets the keyboard input
TextBox1.Focus
End Sub
В панели Properties, для элемента TextBox, на вкладке Events дважды щёлкаем по имени события KeyDown. Появившийся шаблон после записи нашего кода принимает следующий вид.
Листинг 22.7. Метод-обработчик события.
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown
'–
'This textbox is a way to get the keyboard input
'for the game becuase:
' 1. When you hit the "START" button, it get's the focus
'(so the form no longer gets keydown events)
' 2. The Start Button does not get key-down events
'–
If (m_playfieldManager Is Nothing) Then
Return
End If
Dim i As Integer
i = e.KeyValue