Руководство по разработке динамической логической игры на Visual Basic 6.0
Пошаговое описание процесса программирования всех процедур игры Oflameron – Он-Лайн версия.
Данное руководство содержит подробнейшее описание процесса разработки полного аналога JAVA-игры на Visual Basic 6.0 (часть 1). В следующих частях документа:
- Часть 2 – доводка игровой программы
- Часть 3 – разработка версии игры на VB для «наладонных» компьютеров
- Часть 4 – разработка версии игры на Delphi
- Часть 5 – разработка версии игры на JAVA для сотовых телефонов
OFLAMERON
Часть 1
Создадим проект формата Project EXE. Создадим форму Form1 размером 2715х5745. На форме расположим элемент Frame, а в нем разместим элементы Label1 – Label55. Где Label1 – Label6 это колонка Level. А Label7 – Label46 – ячейки игрового поля с номиналами. Label 47-48 – ячейки для служебной информации. Нижний цветной индикатор образован Label49-Label55.
Колонке элементов Level и игровому полю будут соответствовать числовые массивы.
Краткое описание игры. Игра начинается с установки игроком маркера в любую ячейку нижнего ряда ячеек (просто Click-нуть мышкой). Такая ячейка выделяется синим цветом,
а номинал занятой ячейки прибавляется (либо вычитается) к счету игрока. Нижний цветной линейный индикатор
Счет игры ведется в оранжевой ячейке
Игра ведется до тех пор, пока счет игрока не станет равным нулю или маркер не попадет на ячейку с номиналом |End|.
Игра совсем не так проста, как может показаться. Совсем легко разместить свой маркер так, что на него сместится ячейка с номиналом |Z| - обнуление счета, или |End| - окончание игры.
Здесь описывается процесс программирования «текстовой версии» логической табличной игры «Oflameron». Номиналы ячеек представлены на экране в символьном виде, а ячейки представляют собой элементы Label. В следующей части документа будет представлено полное описание процесса разработки графической версии игры и версии игры для карманных компьтеров (PDA).
Программирование
Заполним ячейки игрового (массив field(8, 6))поля значениями от генератора случайных чисел. Вычислим количество секунд в текущем времени и столько раз «прокрутим» цикл с обращением к генератору случайных чисел:
TM = Time 'Получить время в переменную
TTMS = Len(TM) 'Определить длину строки с значением времени
TTM = Mid$(TM, 7, 2) 'Выделить из строки количество секунд
For i = 0 To TTM ‘Цикл с числом повторений, равным количеству секунд
Form1.Caption = Int((20 * Rnd) + 1) ‘Значения запишем в заголовок формы, чтобы
‘посмотреть, что работает
Next i
Заполним массив field(8, 5). Полностью процедура будет:
Private Sub Set_Nominal()
TM = Time 'Получить время в переменную
TTMS = Len(TM) 'Определить длину строки с значением времени
TTM = Mid$(TM, 7, 2) 'Выделить из строки количество секунд
For i = 0 To TTM
Form1.Caption = Int((20 * Rnd) + 1)
Next i
'--------------------------------------------------
' Заполним массив field(8, 5)
For i = 0 To 7
For j = 0 To 4
field(i, j) = Int((20 * Rnd) + 1)
Next j
Next i
End Sub
Теперь можно записать тестовую процедуру Private Sub Fdraw() для того, чтобы посмотреть, как заполняется массив field(8, 6)
Процедура будет выглядеть следующим образом:
Private Sub Fdraw()
Label7.Caption = field(0, 0)
Label8.Caption = field(1, 0)
Label9.Caption = field(2, 0)
Label10.Caption = field(3, 0)
Label11.Caption = field(4, 0)
Label12.Caption = field(5, 0)
Label13.Caption = field(6, 0)
Label14.Caption = field(7, 0)
Label15.Caption = field(0, 1)
Label16.Caption = field(1, 1)
Label17.Caption = field(2, 1)
Label18.Caption = field(3, 1)
Label19.Caption = field(4, 1)
Label20.Caption = field(5, 1)
Label21.Caption = field(6, 1)
Label22.Caption = field(7, 1)
Label23.Caption = field(0, 2)
Label24.Caption = field(1, 2)
Label25.Caption = field(2, 2)
Label26.Caption = field(3, 2)
Label27.Caption = field(4, 2)
Label28.Caption = field(5, 2)
Label29.Caption = field(6, 2)
Label30.Caption = field(7, 2)
Label31.Caption = field(0, 3)
Label32.Caption = field(1, 3)
Label33.Caption = field(2, 3)
Label34.Caption = field(3, 3)
Label35.Caption = field(4, 3)
Label36.Caption = field(5, 3)
Label37.Caption = field(6, 3)
Label38.Caption = field(7, 3)
Label39.Caption = field(0, 4)
Label40.Caption = field(1, 4)
Label41.Caption = field(2, 4)
Label42.Caption = field(3, 4)
Label43.Caption = field(4, 4)
Label44.Caption = field(5, 4)
Label45.Caption = field(6, 4)
Label46.Caption = field(7, 4)
End Sub
Т.е. здесь просто каждая ячейка записывается в Caption каждой ячейки. Такой метод не стоит считать оптимальным и в последующем можно использовать другие приемы программирования. Чтобы посмотреть резльтаты, нужно вставить вызов двух процедур Private Sub Set_Nominal() и Private Sub Fdraw() в автозапуск при старте программы (на время):
Private Sub Form_Load()
Set_Nominal
Fdraw
End Sub
Полный проект на Visual Basic этого этапа разработки игры – в файле vbg1.zip
Теперь нужно создать процедуру, в которой будет анализироваться содержимое ячеек массива field(8, 6) и в зависимости от их значений будет формироваться нужное символьное значение (номинал) ячейки игрового поля и задаваться нужный цвет символа и фона ячейки.
Перепишем процедуру Fdraw() в другую процедуру. Создадим еще одну Label56 для временного хранения «сгенерированного» номинала ячейки и ее цветовых атрибутов (выделена на рисунке).
Private Sub Color_Chars()
If field(i, j) = 0 Then Label56.Caption = "+1"
If field(i, j) = 0 Then Label56.BackColor = &HBBECF4
If field(i, j) = 0 Then Label56.ForeColor = &H80000008
If field(i, j) = 1 Then Label56.Caption = "-1"
If field(i, j) = 1 Then Label56.BackColor = &HBBECF4
If field(i, j) = 1 Then Label56.ForeColor = &H80000008
If field(i, j) = 2 Then Label56.Caption = "+5"
If field(i, j) = 2 Then Label56.BackColor = &HBBECF4
If field(i, j) = 2 Then Label56.ForeColor = &H80000008
If field(i, j) = 3 Then Label56.Caption = "-5"
If field(i, j) = 3 Then Label56.BackColor = &HBBECF4
If field(i, j) = 3 Then Label56.ForeColor = &H80000008
If field(i, j) = 4 Then Label56.Caption = "+10"
If field(i, j) = 4 Then Label56.BackColor = &HBBECF4
If field(i, j) = 4 Then Label56.ForeColor = &H80000008
If field(i, j) = 5 Then Label56.Caption = "-10"
If field(i, j) = 5 Then Label56.BackColor = &HBBECF4
If field(i, j) = 5 Then Label56.ForeColor = &H80000008
If field(i, j) = 6 Then Label56.Caption = "+15"
If field(i, j) = 6 Then Label56.BackColor = &HBBECF4
If field(i, j) = 6 Then Label56.ForeColor = &H80000008
If field(i, j) = 7 Then Label56.Caption = "-15"
If field(i, j) = 7 Then Label56.BackColor = &HBBECF4
If field(i, j) = 7 Then Label56.ForeColor = &H80000008
If field(i, j) = 8 Then Label56.Caption = "+25"
If field(i, j) = 8 Then Label56.BackColor = &HBBECF4
If field(i, j) = 8 Then Label56.ForeColor = &H80000008
If field(i, j) = 9 Then Label56.Caption = "T"
If field(i, j) = 9 Then Label56.BackColor = &HABCFBB
If field(i, j) = 9 Then Label56.ForeColor = &H80000008
If field(i, j) = 10 Then Label56.Caption = "P"
If field(i, j) = 10 Then Label56.BackColor = &HFFC0C0
If field(i, j) = 10 Then Label56.ForeColor = &H80000008
If field(i, j) = 11 Then Label56.Caption = "B"
If field(i, j) = 11 Then Label56.BackColor = &H80FFFF
If field(i, j) = 11 Then Label56.ForeColor = &H80000008
If field(i, j) = 12 Then Label56.Caption = "Z"
If field(i, j) = 12 Then Label56.BackColor = &H40&
If field(i, j) = 12 Then Label56.ForeColor = &HFFFFFF
If field(i, j) = 13 Then Label56.Caption = "Z"
If field(i, j) = 13 Then Label56.BackColor = &H40&
If field(i, j) = 13 Then Label56.ForeColor = &HFFFFFF
If field(i, j) = 14 Then Label56.Caption = "End"
If field(i, j) = 14 Then Label56.BackColor = &HFF&
If field(i, j) = 14 Then Label56.ForeColor = &HFFFFFF
If field(i, j) = 15 Then Label56.Caption = "-10"
If field(i, j) = 15 Then Label56.BackColor = &HBBECF4
If field(i, j) = 15 Then Label56.ForeColor = &H80000008
If field(i, j) = 16 Then Label56.Caption = "-5"
If field(i, j) = 16 Then Label56.BackColor = &HBBECF4
If field(i, j) = 16 Then Label56.ForeColor = &H80000008
If field(i, j) = 17 Then Label56.Caption = "-1"
If field(i, j) = 17 Then Label56.BackColor = &HBBECF4
If field(i, j) = 17 Then Label56.ForeColor = &H80000008
If field(i, j) = 18 Then Label56.Caption = "+1"
If field(i, j) = 18 Then Label56.BackColor = &HBBECF4
If field(i, j) = 18 Then Label56.ForeColor = &H80000008
If field(i, j) = 19 Then Label56.Caption = "+5"
If field(i, j) = 19 Then Label56.BackColor = &HBBECF4
If field(i, j) = 19 Then Label56.ForeColor = &H80000008
End Sub
Теперь добавим копирование значения и атрибутов ячейки Label56 в ячейку игрового поля и используем несколько циклов для обработки всего массива field(8, 6):
- пример копирования
Label7.Caption = Label56.Caption
Label7.BackColor = Label56.BackColor
Label7.ForeColor = Label56.ForeColor
В итоге появится процедура Sub Field_Fill() копирования номиналов из «дежурной» ячейки Label56, а процедура Color_Chars() изменится следующим образом:
Private Sub Color_Chars()
If field(i, j) = 0 Then Label56.Caption = "+1"
If field(i, j) = 0 Then Label56.BackColor = &HBBECF4
If field(i, j) = 0 Then Label56.ForeColor = &H80000008
If field(i, j) = 1 Then Label56.Caption = "-1"
If field(i, j) = 1 Then Label56.BackColor = &HBBECF4
If field(i, j) = 1 Then Label56.ForeColor = &H80000008
If field(i, j) = 2 Then Label56.Caption = "+5"
If field(i, j) = 2 Then Label56.BackColor = &HBBECF4
If field(i, j) = 2 Then Label56.ForeColor = &H80000008
If field(i, j) = 3 Then Label56.Caption = "-5"
If field(i, j) = 3 Then Label56.BackColor = &HBBECF4
If field(i, j) = 3 Then Label56.ForeColor = &H80000008
If field(i, j) = 4 Then Label56.Caption = "+10"
If field(i, j) = 4 Then Label56.BackColor = &HBBECF4
If field(i, j) = 4 Then Label56.ForeColor = &H80000008
If field(i, j) = 5 Then Label56.Caption = "-10"
If field(i, j) = 5 Then Label56.BackColor = &HBBECF4
If field(i, j) = 5 Then Label56.ForeColor = &H80000008
If field(i, j) = 6 Then Label56.Caption = "+15"
If field(i, j) = 6 Then Label56.BackColor = &HBBECF4
If field(i, j) = 6 Then Label56.ForeColor = &H80000008
If field(i, j) = 7 Then Label56.Caption = "-15"
If field(i, j) = 7 Then Label56.BackColor = &HBBECF4
If field(i, j) = 7 Then Label56.ForeColor = &H80000008
If field(i, j) = 8 Then Label56.Caption = "+25"
If field(i, j) = 8 Then Label56.BackColor = &HBBECF4
If field(i, j) = 8 Then Label56.ForeColor = &H80000008
If field(i, j) = 9 Then Label56.Caption = "T"