Реферат: Программирование логической игры на visual basic
If k = 16 Then Label23.ForeColor = Label56.ForeColor
If k = 17 Then Label24.Caption = Label56.Caption
If k = 17 Then Label24.BackColor = Label56.BackColor
If k = 17 Then Label24.ForeColor = Label56.ForeColor
If k = 18 Then Label25.Caption = Label56.Caption
If k = 18 Then Label25.BackColor = Label56.BackColor
If k = 18 Then Label25.ForeColor = Label56.ForeColor
If k = 19 Then Label26.Caption = Label56.Caption
If k = 19 Then Label26.BackColor = Label56.BackColor
If k = 19 Then Label26.ForeColor = Label56.ForeColor
If k = 20 Then Label27.Caption = Label56.Caption
If k = 20 Then Label27.BackColor = Label56.BackColor
If k = 20 Then Label27.ForeColor = Label56.ForeColor
If k = 21 Then Label28.Caption = Label56.Caption
If k = 21 Then Label28.BackColor = Label56.BackColor
If k = 21 Then Label28.ForeColor = Label56.ForeColor
If k = 22 Then Label29.Caption = Label56.Caption
If k = 22 Then Label29.BackColor = Label56.BackColor
If k = 22 Then Label29.ForeColor = Label56.ForeColor
If k = 23 Then Label30.Caption = Label56.Caption
If k = 23 Then Label30.BackColor = Label56.BackColor
If k = 23 Then Label30.ForeColor = Label56.ForeColor
If k = 24 Then Label31.Caption = Label56.Caption
If k = 24 Then Label31.BackColor = Label56.BackColor
If k = 24 Then Label31.ForeColor = Label56.ForeColor
If k = 25 Then Label32.Caption = Label56.Caption
If k = 25 Then Label32.BackColor = Label56.BackColor
If k = 25 Then Label32.ForeColor = Label56.ForeColor
If k = 26 Then Label33.Caption = Label56.Caption
If k = 26 Then Label33.BackColor = Label56.BackColor
If k = 26 Then Label33.ForeColor = Label56.ForeColor
If k = 27 Then Label34.Caption = Label56.Caption
If k = 27 Then Label34.BackColor = Label56.BackColor
If k = 27 Then Label34.ForeColor = Label56.ForeColor
If k = 28 Then Label35.Caption = Label56.Caption
If k = 28 Then Label35.BackColor = Label56.BackColor
If k = 28 Then Label35.ForeColor = Label56.ForeColor
If k = 29 Then Label36.Caption = Label56.Caption
If k = 29 Then Label36.BackColor = Label56.BackColor
If k = 29 Then Label36.ForeColor = Label56.ForeColor
If k = 30 Then Label37.Caption = Label56.Caption
If k = 30 Then Label37.BackColor = Label56.BackColor
If k = 30 Then Label37.ForeColor = Label56.ForeColor
If k = 31 Then Label38.Caption = Label56.Caption
If k = 31 Then Label38.BackColor = Label56.BackColor
If k = 31 Then Label38.ForeColor = Label56.ForeColor
If k = 32 Then Label39.Caption = Label56.Caption
If k = 32 Then Label39.BackColor = Label56.BackColor
If k = 32 Then Label39.ForeColor = Label56.ForeColor
If k = 33 Then Label40.Caption = Label56.Caption
If k = 33 Then Label40.BackColor = Label56.BackColor
If k = 33 Then Label40.ForeColor = Label56.ForeColor
If k = 34 Then Label41.Caption = Label56.Caption
If k = 34 Then Label41.BackColor = Label56.BackColor
If k = 34 Then Label41.ForeColor = Label56.ForeColor
If k = 35 Then Label42.Caption = Label56.Caption
If k = 35 Then Label42.BackColor = Label56.BackColor
If k = 35 Then Label42.ForeColor = Label56.ForeColor
If k = 36 Then Label43.Caption = Label56.Caption
If k = 36 Then Label43.BackColor = Label56.BackColor
If k = 36 Then Label43.ForeColor = Label56.ForeColor
If k = 37 Then Label44.Caption = Label56.Caption
If k = 37 Then Label44.BackColor = Label56.BackColor
If k = 37 Then Label44.ForeColor = Label56.ForeColor
If k = 38 Then Label45.Caption = Label56.Caption
If k = 38 Then Label45.BackColor = Label56.BackColor
If k = 38 Then Label45.ForeColor = Label56.ForeColor
If k = 39 Then Label46.Caption = Label56.Caption
If k = 39 Then Label46.BackColor = Label56.BackColor
If k = 39 Then Label46.ForeColor = Label56.ForeColor
k = k + 1
Next i
Next j
End Sub
Такой вариант заполнения игрового поля НАЧАЛЬНЫМИ значениями (при старте игры) нельзя считать оптимальным. Однако он очень нагляден для понимания алгоритма.
Процедура Form_Load() теперь будет выглядеть так:
Private Sub Form_Load()
Set_Nominal
Fdraw
Field_Fill
End Sub
Для того, чтобы посмотреть, как все работает, добавим еще одну процедуру Form_Click() (на некоторое время. Для отладки):
Private Sub Form_Click()
Set_Nominal ‘Заполнить массив field(i,j)
Fdraw ‘Нарисовать на игровом поле значения массива field(i,j) – для отладки
Field_Fill ‘Нарисовать реальные номиналы ячеек и цветовые атрибуты
End Sub
- она полностью идентична процедуре Form_Load()
Теперь, кликая мышкой на поле формы Form1 (только формы), Вы можете посмотреть, что значения номиналов ячеек и их цветовые атрибуты меняются правильно.
Полный VB-проект с этого этапа разработки игры - в файле vbg2.zip
Процедуру Form_Click() можно удалить.
Разработаем процедуру Num_Move(), переписывающую значения и цветовые атрибуты ячеек игрового поля построчно, сверху – вниз. А так же – заполняющую верхний ряд игрового поля новыми значениями (т.е. новые значения ячеек как бы вводятся сверху игрового поля). Процедура будет содержать просто операторы копирования. Вы можете сами разработать более оптимальный алгоритм копирования.
Private Sub Num_Move()
For j = 0 To 4
For i = 0 To 7
field(i, j) = field(i, j + 1)
Next i
Next j
Field_Fill 'Нарисовать новые значения на экран
End Sub
Чтобы посмотреть, как работает копирование значений и атрибутов ячеек сверху вниз, создадим «временную» процедуру обработки Click-а на рамке Frame1:
Private Sub Frame1_Click()
Num_Move
End Sub
Полный VB-проект с этого этапа разработки игры - в файле vbg3.zip
Теперь нужно добавить код Private Sub Up_Str_App() для заполнения верхней строки игрового поля новыми значениями.
Private Sub Up_Str_App()
TM = Time 'Прочитать текущее время
TTMS = Len(TM) 'Длина строки с временем
TTM = Mid$(TM, 7, 2) 'Выделить секунды
For i = 0 To TTM 'Повторить цикл столько раз, сколько секунд
Next i
'--------------------------------------------------
' Заполнить верхнюю строку массива field(i, 5)
For i = 0 To 7
field(i, 5) = Int((20 * Rnd) + 1)
Next i
'--------------------------------------------------
'Заполнить верхнюю строку номиналами, копируя их из Label56
Field_Fill 'Перерисовать значения на экране, с новыми значениями верхней строки
End Sub
Подключим вызов процедуры в Frame1.Click
Полный VB-проект с этого этапа разработки игры - в файле vbg4.zip
Покликайте мышкой на поле Frame1 и посмотрите, как все работает!
Теперь нужно написать код обработки постановки игроком игрового маркера в любую из ячеек нижней строки игрового поля.
Процедура для сохранения цветовых атрибутов всех ячеек нижней строки до установки маркера:
Private Sub Save_Color()
savecolor(0) = Label7.BackColor 'Запомнить цвет фона Label7
savecolor(1) = Label8.BackColor 'Запомнить цвет фона Label8
savecolor(2) = Label9.BackColor 'Запомнить цвет фона Label9
savecolor(3) = Label10.BackColor 'Запомнить цвет фона Label10
savecolor(4) = Label11.BackColor 'Запомнить цвет фона Label11
savecolor(5) = Label12.BackColor 'Запомнить цвет фона Label12
savecolor(6) = Label13.BackColor 'Запомнить цвет фона Label13
savecolor(7) = Label14.BackColor 'Запомнить цвет фона Label14
End Sub
Создадим триггер firstset = 0
Триггер =0, если маркер в нижнюю строку еще не ставили.
Общий фрагмент кода, обрабатывающий установку маркера в нижней строке:
Private Sub Label7_Click()
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label7.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 0 'Маркер в ячейке, соответствующей savecolor(0)
End Sub
Private Sub Label8_Click()
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label8.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 1 'Маркер в ячейке, соответствующей savecolor(1)
End Sub
Private Sub Label9_Click()
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label9.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 2 'Маркер в ячейке, соответствующей savecolor(2)
End Sub
Private Sub Label10_Click()
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label10.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать