Руководство по разработке динамической логической игры на 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 и игровому полю будут соответствовать числовые массивы. Массив Dim level5 Массив Dim field8, 6 Краткое описание игры. Игра начинается с установки игроком маркера в любую ячейку нижнего ряда ячеек просто
Click-нуть мышкой. Такая ячейка выделяется синим цветом, а номинал занятой ячейки прибавляется либо вычитается к счету игрока. Нижний цветной линейный индикатор начинает укорачиваться. Пока индикатор не исчез, игрок может перемещать игровой маркер по нижней строке вправо или влево от текущего положения нажимая на клавиатуре стрелки Вправо или Влево. Номиналы всех ячеек, которые будет проходить маркер, будут прибавляться или вычитаться к счету.
Как только весь цветной линейный индикатор исчезнет, игрок не может перемещать свой маркер на мгновение, а номиналы всех ячеек сдвигаются сверху-вниз на одну строчку. Верхняя строка игрового поля заполняется новыми значениями от генератора случайных чисел. При этом, номинал ячейки, сдвинувшейся сверху на ячейку, в которой уже находится маркер, так же прибавляется к счету это может существенно изменить ваш счет. После этого цветной линейный индикатор восстанавливается
и начинает опять укорачиваться, а игрок опять может перемещать игровой маркер. Счет игры ведется в оранжевой ячейке Игра ведется до тех пор, пока счет игрока не станет равным нулю или маркер не попадет на ячейку с номиналом End. Игра совсем не так проста, как может показаться. Совсем легко разместить свой маркер так, что на него сместится ячейка с номиналом Z - обнуление счета, или End - окончание игры. Здесь описывается процесс программирования текстовой
версии логической табличной игры Oflameron. Номиналы ячеек представлены на экране в символьном виде, а ячейки представляют собой элементы Label. В следующей части документа будет представлено полное описание процесса разработки графической версии игры и версии игры для карманных компьтеров PDA. Программирование Заполним ячейки игрового массив field8, 6поля значениями от генератора случайных чисел. Вычислим количество секунд в текущем времени и столько раз прокрутим цикл с обращением к генератору
случайных чисел TM Time Получить время в переменную TTMS LenTM Определить длину строки с значением времени TTM MidTM, 7, 2 Выделить из строки количество секунд For i 0 To TTM Цикл с числом повторений, равным количеству секунд Form1.Caption Int20 Rnd 1 Значения запишем в заголовок формы, чтобы посмотреть, что работает
Next i Заполним массив field8, 5. Определить длину строки с значением времени TTM MidTM, 7, 2 Выделить из строки количество секунд For i 0 To TTM Form1.Caption Int20 Rnd 1 Next i Заполним массив field8, 5
For i 0 To 7 For j 0 To 4 fieldi, j Int20 Rnd 1 Next j Next i End Sub Теперь можно записать тестовую процедуру Private Sub Fdraw для того, чтобы посмотреть, как заполняется массив field8, 6 Процедура будет выглядеть следующим образом Private Sub Fdraw Label7.Caption field0, 0 Label8.Caption field1, 0
Label9.Caption field2, 0 Label10.Caption field3, 0 Label11.Caption field4, 0 Label12.Caption field5, 0 Label13.Caption field6, 0 Label14.Caption field7, 0 Label15.Caption field0, 1 Label16.Caption field1, 1 Label17.Caption field2, 1 Label18.Caption field3, 1
Label19.Caption field4, 1 Label20.Caption field5, 1 Label21.Caption field6, 1 Label22.Caption field7, 1 Label23.Caption field0, 2 Label24.Caption field1, 2 Label25.Caption field2, 2 Label26.Caption field3, 2 Label27.Caption field4, 2 Label28.Caption field5, 2
Label29.Caption field6, 2 Label30.Caption field7, 2 Label31.Caption field0, 3 Label32.Caption field1, 3 Label33.Caption field2, 3 Label34.Caption field3, 3 Label35.Caption field4, 3 Label36.Caption field5, 3 Label37.Caption field6, 3 Label38.Caption field7, 3
Label39.Caption field0, 4 Label40.Caption field1, 4 Label41.Caption field2, 4 Label42.Caption field3, 4 Label43.Caption field4, 4 Label44.Caption field5, 4 Label45.Caption field6, 4 Label46.Caption field7, 4 End Sub Т.е. здесь просто каждая ячейка записывается в
Caption каждой ячейки. Такой метод не стоит считать оптимальным и в последующем можно использовать другие приемы программирования. Чтобы посмотреть резльтаты, нужно вставить вызов двух процедур Private Sub SetNominal и Private Sub Fdraw в автозапуск при старте программы на время Private Sub FormLoad SetNominal Fdraw End Sub Полный проект на Visual Basic этого этапа разработки игры в файле vbg1.zip
Теперь нужно создать процедуру, в которой будет анализироваться содержимое ячеек массива field8, 6 и в зависимости от их значений будет формироваться нужное символьное значение номинал ячейки игрового поля и задаваться нужный цвет символа и фона ячейки. Перепишем процедуру Fdraw в другую процедуру. Создадим еще одну Label56 для временного хранения сгенерированного номинала ячейки и ее цветовых атрибутов выделена на
рисунке. Private Sub ColorChars If fieldi, j 0 Then Label56.Caption 1 If fieldi, j 0 Then Label56.BackColor HBBECF4 If fieldi, j 0 Then Label56.ForeColor H808 If fieldi, j 1 Then Label56.Caption -1 If fieldi, j 1 Then Label56.BackColor HBBECF4 If fieldi, j 1 Then
Label56.ForeColor H808 If fieldi, j 2 Then Label56.Caption 5 If fieldi, j 2 Then Label56.BackColor HBBECF4 If fieldi, j 2 Then Label56.ForeColor H808 If fieldi, j 3 Then Label56.Caption -5 If fieldi, j 3 Then Label56.BackColor HBBECF4 If fieldi, j 3 Then Label56.ForeColor H808 If fieldi, j 4 Then Label56.Caption 10
If fieldi, j 4 Then Label56.BackColor HBBECF4 If fieldi, j 4 Then Label56.ForeColor H808 If fieldi, j 5 Then Label56.Caption -10 If fieldi, j 5 Then Label56.BackColor HBBECF4 If fieldi, j 5 Then Label56.ForeColor H808 If fieldi, j 6 Then Label56.Caption 15 If fieldi, j 6 Then Label56.BackColor HBBECF4 If fieldi, j 6
Then Label56.ForeColor H808 If fieldi, j 7 Then Label56.Caption -15 If fieldi, j 7 Then Label56.BackColor HBBECF4 If fieldi, j 7 Then Label56.ForeColor H808 If fieldi, j 8 Then Label56.Caption 25 If fieldi, j 8 Then Label56.BackColor HBBECF4 If fieldi, j 8 Then Label56.ForeColor H808 If fieldi, j 9 Then Label56.Caption
T If fieldi, j 9 Then Label56.BackColor HABCFBB If fieldi, j 9 Then Label56.ForeColor H808 If fieldi, j 10 Then Label56.Caption P If fieldi, j 10 Then Label56.BackColor HFFC0C0 If fieldi, j 10 Then Label56.ForeColor H808 If fieldi, j 11 Then Label56.Caption B If fieldi, j 11 Then Label56.BackColor H80FFFF If fieldi, j 11
Then Label56.ForeColor H808 If fieldi, j 12 Then Label56.Caption Z If fieldi, j 12 Then Label56.BackColor H40 If fieldi, j 12 Then Label56.ForeColor HF If fieldi, j 13 Then Label56.Caption Z If fieldi, j 13 Then Label56.BackColor H40 If fieldi, j 13 Then Label56.ForeColor HF If fieldi, j 14 Then Label56.Caption
End If fieldi, j 14 Then Label56.BackColor HFF If fieldi, j 14 Then Label56.ForeColor HF If fieldi, j 15 Then Label56.Caption -10 If fieldi, j 15 Then Label56.BackColor HBBECF4 If fieldi, j 15 Then Label56.ForeColor H808 If fieldi, j 16 Then Label56.Caption -5 If fieldi, j 16 Then Label56.BackColor HBBECF4 If fieldi, j 16
Then Label56.ForeColor H808 If fieldi, j 17 Then Label56.Caption -1 If fieldi, j 17 Then Label56.BackColor HBBECF4 If fieldi, j 17 Then Label56.ForeColor H808 If fieldi, j 18 Then Label56.Caption 1 If fieldi, j 18 Then Label56.BackColor HBBECF4 If fieldi, j 18 Then Label56.ForeColor H808 If fieldi, j 19 Then Label56.Caption 5
If fieldi, j 19 Then Label56.BackColor HBBECF4 If fieldi, j 19 Then Label56.ForeColor H808 End Sub Теперь добавим копирование значения и атрибутов ячейки Label56 в ячейку игрового поля и используем несколько циклов для обработки всего массива field8, 6 - пример копирования Label7.Caption Label56.Caption Label7.BackColor Label56.BackColor Label7.ForeColor
Label56.ForeColor В итоге появится процедура Sub FieldFill копирования номиналов из дежурной ячейки Label56, а процедура ColorChars изменится следующим образом Private Sub ColorChars If fieldi, j 0 Then Label56.Caption 1 If fieldi, j 0 Then Label56.BackColor HBBECF4 If fieldi, j 0 Then Label56.ForeColor H808 If fieldi, j 1 Then Label56.Caption -1
If fieldi, j 1 Then Label56.BackColor HBBECF4 If fieldi, j 1 Then Label56.ForeColor H808 If fieldi, j 2 Then Label56.Caption 5 If fieldi, j 2 Then Label56.BackColor HBBECF4 If fieldi, j 2 Then Label56.ForeColor H808 If fieldi, j 3 Then Label56.Caption -5 If fieldi, j 3 Then Label56.BackColor HBBECF4 If fieldi, j 3
Then Label56.ForeColor H808 If fieldi, j 4 Then Label56.Caption 10 If fieldi, j 4 Then Label56.BackColor HBBECF4 If fieldi, j 4 Then Label56.ForeColor H808 If fieldi, j 5 Then Label56.Caption -10 If fieldi, j 5 Then Label56.BackColor HBBECF4 If fieldi, j 5 Then Label56.ForeColor H808 If fieldi, j 6 Then Label56.Caption 15
If fieldi, j 6 Then Label56.BackColor HBBECF4 If fieldi, j 6 Then Label56.ForeColor H808 If fieldi, j 7 Then Label56.Caption -15 If fieldi, j 7 Then Label56.BackColor HBBECF4 If fieldi, j 7 Then Label56.ForeColor H808 If fieldi, j 8 Then Label56.Caption 25 If fieldi, j 8 Then Label56.BackColor HBBECF4 If fieldi, j 8
Then Label56.ForeColor H808 If fieldi, j 9 Then Label56.Caption T If fieldi, j 9 Then Label56.BackColor HABCFBB If fieldi, j 9 Then Label56.ForeColor H808 If fieldi, j 10 Then Label56.Caption P If fieldi, j 10 Then Label56.BackColor HFFC0C0 If fieldi, j 10 Then Label56.ForeColor H808 If fieldi, j 11 Then Label56.Caption
B If fieldi, j 11 Then Label56.BackColor H80FFFF If fieldi, j 11 Then Label56.ForeColor H808 If fieldi, j 12 Then Label56.Caption Z If fieldi, j 12 Then Label56.BackColor H40 If fieldi, j 12 Then Label56.ForeColor HF If fieldi, j 13 Then Label56.Caption Z If fieldi, j 13 Then Label56.BackColor H40 If fieldi, j 13
Then Label56.ForeColor HF If fieldi, j 14 Then Label56.Caption End If fieldi, j 14 Then Label56.BackColor HFF If fieldi, j 14 Then Label56.ForeColor HF If fieldi, j 15 Then Label56.Caption -10 If fieldi, j 15 Then Label56.BackColor HBBECF4 If fieldi, j 15 Then Label56.ForeColor H808 If fieldi, j 16 Then Label56.Caption -5
If fieldi, j 16 Then Label56.BackColor HBBECF4 If fieldi, j 16 Then Label56.ForeColor H808 If fieldi, j 17 Then Label56.Caption -1 If fieldi, j 17 Then Label56.BackColor HBBECF4 If fieldi, j 17 Then Label56.ForeColor H808 If fieldi, j 18 Then Label56.Caption 1 If fieldi, j 18 Then Label56.BackColor HBBECF4 If fieldi, j 18
Then Label56.ForeColor H808 If fieldi, j 19 Then Label56.Caption 5 If fieldi, j 19 Then Label56.BackColor HBBECF4 If fieldi, j 19 Then Label56.ForeColor H808 Label7.Caption Label56.Caption Label7.BackColor Label56.BackColor Label7.ForeColor Label56.ForeColor Form1.Caption field0, 0 End Sub Private
Sub FieldFill Копирование номиналов и атрибутов из дежурной ячейки Label56 k 0 Счетчик ячеек For j 0 To 4 For i 0 To 7 ColorChars Поместить следующее значение из массива fieldi, j в Label56 и вычислить цветовые атрибуты символа и фона по ее номиналу If k 0 Then Label7.Caption Label56.Caption If k 0 Then
Label7.BackColor Label56.BackColor If k 0 Then Label7.ForeColor Label56.ForeColor If k 1 Then Label8.Caption Label56.Caption If k 1 Then Label8.BackColor Label56.BackColor If k 1 Then Label8.ForeColor Label56.ForeColor If k 2 Then Label9.Caption Label56.Caption If k 2 Then Label9.BackColor
Label56.BackColor If k 2 Then Label9.ForeColor Label56.ForeColor If k 3 Then Label10.Caption Label56.Caption If k 3 Then Label10.BackColor Label56.BackColor If k 3 Then Label10.ForeColor Label56.ForeColor If k 4 Then Label11.Caption Label56.Caption If k 4 Then Label11.BackColor Label56.BackColor
If k 4 Then Label11.ForeColor Label56.ForeColor If k 5 Then Label12.Caption Label56.Caption If k 5 Then Label12.BackColor Label56.BackColor If k 5 Then Label12.ForeColor Label56.ForeColor If k 6 Then Label13.Caption Label56.Caption If k 6 Then Label13.BackColor Label56.BackColor If k 6 Then
Label13.ForeColor Label56.ForeColor If k 7 Then Label14.Caption Label56.Caption If k 7 Then Label14.BackColor Label56.BackColor If k 7 Then Label14.ForeColor Label56.ForeColor If k 8 Then Label15.Caption Label56.Caption If k 8 Then Label15.BackColor Label56.BackColor If k 8 Then Label15.ForeColor Label56.ForeColor
If k 9 Then Label16.Caption Label56.Caption If k 9 Then Label16.BackColor Label56.BackColor If k 9 Then Label16.ForeColor Label56.ForeColor If k 10 Then Label17.Caption Label56.Caption If k 10 Then Label17.BackColor Label56.BackColor If k 10 Then Label17.ForeColor Label56.ForeColor If k 11
Then Label18.Caption Label56.Caption If k 11 Then Label18.BackColor Label56.BackColor If k 11 Then Label18.ForeColor Label56.ForeColor If k 12 Then Label19.Caption Label56.Caption If k 12 Then Label19.BackColor Label56.BackColor If k 12 Then Label19.ForeColor Label56.ForeColor If k 13 Then Label20.Caption
Label56.Caption If k 13 Then Label20.BackColor Label56.BackColor If k 13 Then Label20.ForeColor Label56.ForeColor If k 14 Then Label21.Caption Label56.Caption If k 14 Then Label21.BackColor Label56.BackColor If k 14 Then Label21.ForeColor Label56.ForeColor If k 15 Then Label22.Caption Label56.Caption If k 15
Then Label22.BackColor Label56.BackColor If k 15 Then Label22.ForeColor Label56.ForeColor If k 16 Then Label23.Caption Label56.Caption If k 16 Then Label23.BackColor Label56.BackColor 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 Такой вариант заполнения игрового поля НАЧАЛЬНЫМИ значениями при старте игры нельзя считать оптимальным. Однако он очень нагляден для понимания алгоритма.
Процедура FormLoad теперь будет выглядеть так Private Sub FormLoad SetNominal Fdraw FieldFill End Sub Для того, чтобы посмотреть, как все работает, добавим еще одну процедуру FormClick на некоторое время. Для отладки Private Sub FormClick SetNominal Заполнить массив fieldi,j Fdraw Нарисовать на игровом поле значения массива fieldi,j для отладки
FieldFill Нарисовать реальные номиналы ячеек и цветовые атрибуты End Sub - она полностью идентична процедуре FormLoad Теперь, кликая мышкой на поле формы Form1 только формы, Вы можете посмотреть, что значения номиналов ячеек и их цветовые атрибуты меняются правильно. Полный VB-проект с этого этапа разработки игры - в файле vbg2.zip
Процедуру FormClick можно удалить. Разработаем процедуру NumMove, переписывающую значения и цветовые атрибуты ячеек игрового поля построчно, сверху вниз. А так же заполняющую верхний ряд игрового поля новыми значениями т.е. новые значения ячеек как бы вводятся сверху игрового поля. Процедура будет содержать просто операторы копирования. Вы можете сами разработать более оптимальный алгоритм копирования.
Private Sub NumMove For j 0 To 4 For i 0 To 7 fieldi, j fieldi, j 1 Next i Next j FieldFill Нарисовать новые значения на экран End Sub Чтобы посмотреть, как работает копирование значений и атрибутов ячеек сверху вниз, создадим временную процедуру обработки Click-а на рамке Frame1 Private Sub Frame1Click NumMove End Sub Полный VB-проект с этого этапа разработки игры - в файле vbg3.zip
Теперь нужно добавить код Private Sub UpStrApp для заполнения верхней строки игрового поля новыми значениями. Private Sub UpStrApp TM Time Прочитать текущее время TTMS LenTM Длина строки с временем TTM MidTM, 7, 2 Выделить секунды For i 0 To TTM Повторить цикл столько раз, сколько секунд Next i Заполнить верхнюю строку массива fieldi, 5 For i 0
To 7 fieldi, 5 Int20 Rnd 1 Next i Заполнить верхнюю строку номиналами, копируя их из Label56 FieldFill Перерисовать значения на экране, с новыми значениями верхней строки End Sub Подключим вызов процедуры в Frame1.Click Полный VB-проект с этого этапа разработки игры - в файле vbg4.zip Покликайте мышкой на поле Frame1 и посмотрите, как все работает
Теперь нужно написать код обработки постановки игроком игрового маркера в любую из ячеек нижней строки игрового поля. Процедура для сохранения цветовых атрибутов всех ячеек нижней строки до установки маркера Private Sub SaveColor savecolor0 Label7.BackColor Запомнить цвет фона Label7 savecolor1 Label8.BackColor Запомнить цвет фона Label8 savecolor2 Label9.BackColor Запомнить цвет фона
Label9 savecolor3 Label10.BackColor Запомнить цвет фона Label10 savecolor4 Label11.BackColor Запомнить цвет фона Label11 savecolor5 Label12.BackColor Запомнить цвет фона Label12 savecolor6 Label13.BackColor Запомнить цвет фона Label13 savecolor7 Label14.BackColor Запомнить цвет фона
Label14 End Sub Создадим триггер firstset 0 Триггер 0, если маркер в нижнюю строку еще не ставили. Общий фрагмент кода, обрабатывающий установку маркера в нижней строке Private Sub Label7Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label7.BackColor HFF0000 Маркер СИНЕГО цвета If firstset 0
Then firstset 1 Больше не обрабатывать markersave 0 Маркер в ячейке, соответствующей savecolor0 End Sub Private Sub Label8Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label8.BackColor HFF0000 Маркер СИНЕГО цвета If firstset 0
Then firstset 1 Больше не обрабатывать markersave 1 Маркер в ячейке, соответствующей savecolor1 End Sub Private Sub Label9Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label9.BackColor HFF0000 Маркер СИНЕГО цвета If firstset 0
Then firstset 1 Больше не обрабатывать markersave 2 Маркер в ячейке, соответствующей savecolor2 End Sub Private Sub Label10Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label10.BackColor HFF0000 Маркер СИНЕГО цвета
If firstset 0 Then firstset 1 Больше не обрабатывать markersave 3 Маркер в ячейке, соответствующей savecolor3 End Sub Private Sub Label11Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label11.BackColor HFF0000 Маркер СИНЕГО цвета
If firstset 0 Then firstset 1 Больше не обрабатывать markersave 4 Маркер в ячейке, соответствующей savecolor4 End Sub Private Sub Label12Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label12.BackColor HFF0000 Маркер СИНЕГО цвета
If firstset 0 Then firstset 1 Больше не обрабатывать markersave 5 Маркер в ячейке, соответствующей savecolor5 End Sub Private Sub Label13Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label13.BackColor HFF0000 Маркер СИНЕГО цвета
If firstset 0 Then firstset 1 Больше не обрабатывать markersave 6 Маркер в ячейке, соответствующей savecolor6 End Sub Private Sub Label14Click If firstset 0 Then SaveColor Запомнить цвет фона всех ячеек нижней строки If firstset 0 Then Label14.BackColor HFF0000 Маркер СИНЕГО цвета
If firstset 0 Then firstset 1 Больше не обрабатывать markersave 7 Маркер в ячейке, соответствующей savecolor7 End Sub Private Sub SaveColor savecolor0 Label7.BackColor Запомнить предыдущий цвет фона Label7 savecolor1 Label8.BackColor Запомнить предыдущий цвет фона Label8 savecolor2 Label9.BackColor Запомнить предыдущий цвет фона
Label9 savecolor3 Label10.BackColor Запомнить предыдущий цвет фона Label10 savecolor4 Label11.BackColor Запомнить предыдущий цвет фона Label11 savecolor5 Label12.BackColor Запомнить предыдущий цвет фона Label12 savecolor6 Label13.BackColor Запомнить предыдущий цвет фона Label13 savecolor7 Label14.BackColor Запомнить предыдущий цвет фона
Label14 End Sub Процедура SaveColor будет использоваться для восстановления цвета ячеек при перемещении маркера по горизонтали по нижней строке игрового поля. Создадим переменную markersave в которой будем запоминать НОМЕР ЭЛЕМЕНТА массива savecolorj, которая соответствует ячейке с маркером в которую поставили маркер. Можно проверить, что маркер возможно поставить только в одну ячейку.
Теперь нужно обеспечить сохранение маркера окраску ячейки в синий цвет при сдвигании ячеек сверху-вниз. Процедура восстановления цвета маркера после смещения ячеек игрового поля сверху-вниз Private Sub MarkerReset If markersave 0 Then Label7.BackColor HFF0000 If markersave 1 Then Label8.BackColor HFF0000 If markersave 2 Then Label9.BackColor HFF0000 If markersave 3
Then Label10.BackColor HFF0000 If markersave 4 Then Label11.BackColor HFF0000 If markersave 5 Then Label12.BackColor HFF0000 If markersave 6 Then Label13.BackColor HFF0000 If markersave 7 Then Label14.BackColor HFF0000 End Sub Теперь подключим процедуру MarkerReset к работе в процедуре сдвига вниз.
В самый низ процедуры Frame1Click вставим следующий код выделен красным цветом Private Sub Frame1Click NumMove Сдвинуть значения всех строк на одну вниз UpStrApp Заполнить верхнюю строку новыми номиналами MarkerReset Восстановить маркер End Sub Полный VB-проект с этого этапа разработки игры - в файле vbg5.zip Напишем процедуру подсчета очков при установке маркера в начале игры.
Private Sub SetMarkerCount Подсчет очков при постановке маркера Dim et В эту переменную будут записаны результаты пересчета значений массива fieldi,j в номинал ячеек If n 0 Then В какую из ячеек поставлен маркер какие ячейки fieldi,j ей соответствуют If markersave 0 Then et field0, 0 If markersave 1 Then et field1, 0 If markersave 2 Then et field2, 0 If markersave 3 Then et field3, 0
If markersave 4 Then et field4, 0 If markersave 5 Then et field5, 0 If markersave 6 Then et field6, 0 If markersave 7 Then et field7, 0 Написать счет If et 0 Then Label48.Caption Label48.Caption 1 If et 1 Then Label48.Caption Label48.Caption - 1 If et 2 Then Label48.Caption Label48.Caption 5 If et 3 Then
Label48.Caption Label48.Caption - 5 If et 4 Then Label48.Caption Label48.Caption 10 If et 5 Then Label48.Caption Label48.Caption - 10 If et 6 Then Label48.Caption Label48.Caption 15 If et 7 Then Label48.Caption Label48.Caption - 15 If et 8 Then Label56.Caption Label48.Caption 25 If et 9 Then
Label48.Caption Label48.Caption 500 If et 10 Then Label48.Caption Label48.Caption 100 If et 11 Then Label48.Caption Label48.Caption - 200 If et 12 Then Label48.Caption 0 If et 13 Then Label48.Caption 0 If et 14 Then End If et 15 Then Label48.Caption Label48.Caption - 10 If et 16 Then Label48.Caption
Label48.Caption - 5 If et 17 Then Label48.Caption Label48.Caption - 1 If et 18 Then Label48.Caption Label48.Caption 1 If et 19 Then Label48.Caption Label48.Caption 5 If et 20 Then Label48.Caption Label48.Caption - 25 n 1 Больше не обрабатывать, т.к. маркер уже нарисован End If End Sub Теперь подключим процедуру подсчета очков в каждую из процедур
Click-а для ячеек нижней строки Private Sub Label7Click If firstset 0 Then SaveColor Запомнить цвет фона If firstset 0 Then Label7.BackColor HFF0000 Поставить цвет фона маркера синий If firstset 0 Then firstset 1 Больше не обрабатывать markersave 0 Указывает на ячейку, в которую установлен маркер SetMarkerCount
Скорректировать счет End Sub Для остальных ячеек нижней строки точно так же. Теперь напишем процедуру подсчета очков при сдвиге ячеек сверху вниз. Процедура будет выглядеть чрезвычайно просто Private Sub DnCount Подсчитать очки при сдвиге сверху - вниз n 0 Временно разрешить работу процедуры SetMarkerCount
SetMarkerCount Процедура подсчета очков при постановке маркера End Sub Для демонстрации работы процедуры вставим ее вызов в процедуру сдвига рядов ячеек сверху вниз Frame1Click Private Sub Frame1Click NumMove Сдвинуть номиналы всех ячеек сверху - вниз UpStrApp Заполнить верхнюю строку игрового поля новыми номиналами MarkerReset Восстановить маркер DnCount Подсчитать очки при сдвиге сверху - вниз
End Sub Полный VB-проект с этого этапа разработки игры - в файле vbg6.zip Создадим процедуру работы цветного линейного индикатора. Добавим на форму таймер Timer1 и сразу разрешим его. Private Sub Timer1Timer IndLent IndLent 1 If IndLent 9 Then IndLent 0 Timer1.Interval 500 Восстановим интервал таймера
End If PrintInd Нарисуем индикатор End Sub Процедура рисования индикатора Private Sub PrintInd If IndLent 1 Then Label55.Visible False Загасить элемент индикатора If IndLent 2 Then Label54.Visible False Загасить элемент индикатора If IndLent 3 Then Label53.Visible False Загасить элемент индикатора
If IndLent 4 Then Label52.Visible False Загасить элемент индикатора If IndLent 5 Then Label51.Visible False Загасить элемент индикатора If IndLent 6 Then Label50.Visible False Загасить элемент индикатора If IndLent 7 Then Label49.Visible False Загасить элемент индикатора If IndLent 7 Then Timer1.Interval 100 Уменьшить интервал, чтобы индикатор восстанавливался побыстрее
If IndLent 0 Then Нарисовать индикатор полностью Label55.Visible True Label54.Visible True Label53.Visible True Label52.Visible True Label51.Visible True Label50.Visible True Label49.Visible True End If End Sub Можно посмотреть, как индикатор работает. Теперь таймер нужно задизейблить и разрешать только после того, как маркер будет поставлен в нижнюю
строку игрового поля. Разрешение таймера вставим в процедуру постановки маркера на нижней строке игрового поля а точнее в процедуру подсчета очков после установки маркера SetMarkerCount, т.к. она общая для всех ячеек нижнего уровня. В конце процедуры SetMarkerCount появится строка Timer1.Enabled True Разрешить таймер, т.к. маркер поставлен Полный
VB-проект с этого этапа разработки игры - в файле vbg7.zip Когда цветной линейный индикатор полностью исчезнет, необходимо сдвинуть все строки с ячейками игрового поля сдвинуть вниз процедура Frame1Click , на маркер, подсчитать очки и заполнить верхнюю строку игрового поля новыми значениями номиналов. Процедура работы таймера Timer1 будет выглядеть следующим образом Private Sub
Timer1Timer IndLent IndLent 1 If IndLent 9 Then IndLent 0 Timer1.Interval 500 Frame1Click Сдвинуть уровни End If PrintInd Нарисовать индикатор End Sub Теперь нужно написать обработку нажатий клавиш и перемещения маркера вправо-влево по нижней строке ячеек игрового поля. Разместим на форме Form1 еще один таймер Timer2. Поставим интервал времени для
Timer2 50 и поместим в процедуру работы принтера код проверки состояния клавиш Объявим нужное для работы процедуры Private Declare Function GetAsyncKeyState Lib user32 ByVal vKey As Long As Integer И собственно код обработки Private Sub Timer2Timer Обработка нажатия клавиш стрелка влево и стрелка вправо
If GetAsyncKeyStatevbKeyLeft Then Кнопка влево Form1.Caption Left ElseIf GetAsyncKeyStatevbKeyRight Then Кнопка вправо Form1.Caption Right End If End Sub Надписи в заголовке формы Left и Right выводятся только для отладки. Переменная markersave однозначно показывает в какой ячейке нижней строки игрового поля стоит маркер. Напишем процедуру перемещения маркера вправо-влево по нижней
строке Private Sub FormKeyDownKeyCode As Integer, Shift As Integer Обработка нажатия клавиш стрелка вправо и стрелка влево If GetAsyncKeyStatevbKeyLeft Then Кнопка влево Form1.Caption Left MovePointLeft Переместить маркер влево ElseIf GetAsyncKeyStatevbKeyRight Then Кнопка вправо Form1.Caption
Right MovePointRight Переместить маркер вправо End If End Sub Private Sub MovePointLeft If markersave 0 Then Если самая левая ячейка нижней строки markersave 7 Левее самой левой ячейки самая ПРАВАЯ циклический переход firstset 0 Временно разрешить рисование маркера Label7.BackColor savecolor0
Восстановить цвет фона ячейки, где БЫЛ маркер Label14Click Переместить маркер самая правая ячейка vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 1 Then markersave 0 Поместить левее firstset 0 Временно разрешить рисование маркера Label8.BackColor savecolor1
Восстановить цвет ячейки, где БЫЛ маркер Label7Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 2 Then markersave 1 Поместить левее firstset 0 Временно разрешить рисование маркера Label9.BackColor savecolor2 Восстановить цвет ячейки, где
БЫЛ маркер Label8Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 3 Then markersave 2 Поместить левее firstset 0 Временно разрешить рисование маркера Label10.BackColor savecolor3 Восстановить цвет ячейки, где БЫЛ маркер Label9Click
Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 4 Then markersave 3 Поместить левее firstset 0 Временно разрешить рисование маркера Label11.BackColor savecolor4 Восстановить цвет ячейки, где БЫЛ маркер Label10Click Переместить маркер vt markersave markersave 10
Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 5 Then markersave 4 Поместить левее firstset 0 Временно разрешить рисование маркера Label12.BackColor savecolor5 Восстановить цвет ячейки, где БЫЛ маркер Label11Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует
никакой ячейке End If If markersave 6 Then markersave 5 Поместить левее firstset 0 Временно разрешить рисование маркера Label13.BackColor savecolor6 Восстановить цвет ячейки, где БЫЛ маркер Label12Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке
End If If markersave 7 Then markersave 6 Поместить левее firstset 0 Временно разрешить рисование маркера Label14.BackColor savecolor7 Восстановить цвет ячейки, где БЫЛ маркер Label13Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If markersave vt n 0 SetMarkerCount
End Sub Private Sub MovePointRight If markersave 0 Then Если самая левая ячейка markersave 1 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label7.BackColor savecolor0 Восстановить цвет ячейки, где БЫЛ маркер Label8Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует
никакой ячейке End If If markersave 1 Then markersave 2 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label8.BackColor savecolor1 Восстановить цвет ячейки, где БЫЛ маркер Label9Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке
End If If markersave 2 Then markersave 3 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label9.BackColor savecolor2 Восстановить цвет ячейки, где БЫЛ маркер Label10Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 3 Then markersave 4
Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label10.BackColor savecolor3 Восстановить цвет ячейки, где БЫЛ маркер Label11Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 4 Then markersave 5 Переместить правее т.к. значение на 1 firstset 0
Временно разрешить рисование маркера Label11.BackColor savecolor4 Восстановить цвет ячейки, где БЫЛ маркер Label12Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 5 Then markersave 6 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера
Label12.BackColor savecolor5 Восстановить цвет ячейки, где БЫЛ маркер Label13Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 6 Then markersave 7 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label13.BackColor savecolor6
Восстановить цвет ячейки, где БЫЛ маркер Label14Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If If markersave 7 Then markersave 0 Переместить правее т.к. значение на 1 firstset 0 Временно разрешить рисование маркера Label14.BackColor savecolor7 Восстановить цвет ячейки, где
БЫЛ маркер Label7Click Переместить маркер vt markersave markersave 10 Запретить ложные срабатывания значение 10 не соответствует никакой ячейке End If markersave vt n 0 SetMarkerCount End Sub Теперь нужно сделать всего одну процедуру процедуру сдвига нумерации текущих игровых уровней Private Sub LevelCount Label6.Caption Label6.Caption 1 Label5.Caption
Label6.Caption 1 Label4.Caption Label5.Caption 1 Label3.Caption Label4.Caption 1 Label2.Caption Label3.Caption 1 End Sub Подключим процедуру сдвига слоев к работе, например так Private Sub DnCount Подсчитывать очки при сдвиге сверху вниз n 0 SetMarkerCount LevelCount Сдвинуть уровни Level End
Sub Полный VB-проект с этого этапа разработки игры - в файле vbg8.zip Показательный момент написаны все процедуры для software-реализации игры Oflameron. Т.е. Вы создали совершенно работоспособную игровую программу на Visual Basic. Представлять ее как коммерческий продукт рано еще много шероховатостей. Например, если Click-нуть на объекте Frame, то игра начнется без установки маркера.
Устранению таких шероховатостей, приданию программе коммерческого вида будет посвящена 2-я часть руководства Часть 2 доводка игровой программы - Часть 3 разработка версии игры на VB для наладонных компьютеров - Часть 4 разработка версии игры на Delphi - Часть 5 разработка версии игры на JAVA для сотовых телефонов На сайте httpfreeproject.narod.ru выложена другая версия программирования игры
Oflameron на Visual Basic 6.0 На сайте httpplay-man.narod.ru выложена версия игры Oflameron на листочке бумаги. Достаточно просто распечатать игровой бланк из документа MS Word и играть. Резюме не полное - ассемблер 8 лет - JAVA 4 года - VB 6 лет - PHP 5 лет P.S. Не считайте это описание оптимальным. Но это лучшее руководство по программированию игры в
РуНет-е.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |