Реферат: Программирование логической игры на visual basic

Реферат: Программирование логической игры на visual basic




⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































Руководство по разработке динамической логической игры на
Visual
Basic 6.0

Пошаговое описание процесса программирования всех процедур игры Oflameron – Он-Лайн версия
.
Данное руководство содержит подробнейшее описание процесса разработки полного аналога JAVA-игры на Visual Basic 6.0 (часть 1). В следующих частях документа:
- Часть 2 – доводка игровой программы
- Часть 3 – разработка версии игры на VB для «наладонных» компьютеров
- Часть 4 – разработка версии игры на Delphi
- Часть 5 – разработка версии игры на JAVA для сотовых телефонов
Создадим проект формата 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) ‘Значения запишем в заголовок формы, чтобы
Заполним массив field(8, 5). Полностью процедура будет:
TM = Time 'Получить время в переменную
TTMS = Len(TM) 'Определить длину строки с значением времени
TTM = Mid$(TM, 7, 2) 'Выделить из строки количество секунд
Form1.Caption = Int((20 * Rnd) + 1)
'--------------------------------------------------
Теперь можно записать тестовую процедуру Private Sub Fdraw() для того, чтобы посмотреть, как заполняется массив field(8, 6)
Процедура будет выглядеть следующим образом:
Т.е. здесь просто каждая ячейка записывается в Caption каждой ячейки. Такой метод не стоит считать оптимальным и в последующем можно использовать другие приемы программирования. Чтобы посмотреть резльтаты, нужно вставить вызов двух процедур Private Sub Set_Nominal() и Private Sub Fdraw() в автозапуск при старте программы (на время):
Полный проект на Visual Basic этого этапа разработки игры – в файле vbg1.zip

Теперь нужно создать процедуру, в которой будет анализироваться содержимое ячеек массива field(8, 6) и в зависимости от их значений будет формироваться нужное символьное значение (номинал) ячейки игрового поля и задаваться нужный цвет символа и фона ячейки.
Перепишем процедуру Fdraw() в другую процедуру. Создадим еще одну Label56 для временного хранения «сгенерированного» номинала ячейки и ее цветовых атрибутов (выделена на рисунке).
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
Теперь добавим копирование значения и атрибутов ячейки Label56 в ячейку игрового поля и используем несколько циклов для обработки всего массива field(8, 6):
Label7.BackColor = Label56.BackColor
Label7.ForeColor = Label56.ForeColor
В итоге появится процедура Sub Field_Fill() копирования номиналов из «дежурной» ячейки Label56, а процедура 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
'Label7.BackColor = Label56.BackColor
'Label7.ForeColor = Label56.ForeColor
'Копирование номиналов и атрибутов из «дежурной» ячейки Label56
Color_Chars 'Поместить следующее значение из массива field(i, 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
Такой вариант заполнения игрового поля НАЧАЛЬНЫМИ
значениями (при старте игры) нельзя считать оптимальным. Однако он очень нагляден для понимания алгоритма.
Процедура Form_Load() теперь будет выглядеть так:
Для того, чтобы посмотреть, как все работает, добавим еще одну процедуру Form_Click() (на некоторое время. Для отладки):
Set_Nominal ‘Заполнить массив field(i,j)
Fdraw ‘Нарисовать на игровом поле значения массива field(i,j) – для отладки
Field_Fill ‘Нарисовать реальные номиналы ячеек и цветовые атрибуты
- она полностью идентична процедуре Form_Load()
Теперь, кликая мышкой на поле формы Form1 ( только формы
), Вы можете посмотреть, что значения номиналов ячеек и их цветовые атрибуты меняются правильно.
Полный VB-проект с этого этапа разработки игры - в файле vbg2.
zip

Процедуру Form_Click() можно удалить.
Разработаем процедуру Num_Move(), переписывающую значения и цветовые атрибуты ячеек игрового поля построчно, сверху – вниз. А так же – заполняющую верхний ряд игрового поля новыми значениями (т.е. новые значения ячеек как бы вводятся сверху игрового поля). Процедура будет содержать просто операторы копирования. Вы можете сами разработать более оптимальный алгоритм копирования.
Field_Fill 'Нарисовать новые значения на экран
Чтобы посмотреть, как работает копирование значений и атрибутов ячеек сверху вниз, создадим «временную» процедуру обработки Click-а на рамке Frame1:
Полный VB-проект с этого этапа разработки игры - в файле vbg3.
zip

Теперь нужно добавить код Private Sub Up_Str_App() для заполнения верхней строки игрового поля новыми значениями.
TTMS = Len(TM) 'Длина строки с временем
TTM = Mid$(TM, 7, 2) 'Выделить секунды
For i = 0 To TTM 'Повторить цикл столько раз, сколько секунд
'--------------------------------------------------
' Заполнить верхнюю строку массива field(i, 5)
'--------------------------------------------------
'Заполнить верхнюю строку номиналами, копируя их из Label56
Field_Fill 'Перерисовать значения на экране, с новыми значениями верхней строки
Подключим вызов процедуры в Frame1.Click
Полный VB-проект с этого этапа разработки игры - в файле vbg4.
zip

Покликайте мышкой на поле Frame1 и посмотрите, как все работает!
Теперь нужно написать код обработки постановки игроком игрового маркера в любую из ячеек нижней строки
игрового поля.
Процедура для сохранения цветовых атрибутов всех ячеек нижней строки до установки маркера:
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
Триггер =0, если маркер в нижнюю строку еще не ставили.
Общий фрагмент кода, обрабатывающий установку маркера в нижней строке:
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label7.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 0 'Маркер в ячейке, соответствующей savecolor(0)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label8.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 1 'Маркер в ячейке, соответствующей savecolor(1)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label9.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 2 'Маркер в ячейке, соответствующей savecolor(2)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label10.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 3 'Маркер в ячейке, соответствующей savecolor(3)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label11.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 4 'Маркер в ячейке, соответствующей savecolor(4)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label12.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 5 'Маркер в ячейке, соответствующей savecolor(5)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label13.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 6 'Маркер в ячейке, соответствующей savecolor(6)
If firstset = 0 Then Save_Color 'Запомнить цвет фона всех ячеек нижней строки
If firstset = 0 Then Label14.BackColor = &HFF0000 'Маркер СИНЕГО цвета
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 7 'Маркер в ячейке, соответствующей savecolor(7)
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
Процедура Save_Color() будет использоваться для восстановления цвета ячеек при перемещении маркера по горизонтали (по нижней строке игрового поля).
Создадим переменную markersave в которой будем запоминать НОМЕР ЭЛЕМЕНТА массива savecolor(j), которая соответствует ячейке с маркером (в которую поставили маркер).
Можно проверить, что маркер
возможно поставить только в одну ячейку. Теперь нужно обеспечить сохранение маркера
(окраску ячейки в синий цвет) при сдвигании ячеек сверху-вниз.
Процедура восстановления цвета маркера после смещения ячеек игрового поля сверху-вниз:
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
Теперь «подключим» процедуру Marker_Reset() к работе в процедуре сдвига вниз. В самый низ процедуры Frame1_Click() вставим следующий код (выделен красным цветом):
Num_Move 'Сдвинуть значения всех строк на одну вниз
Up_Str_App 'Заполнить верхнюю строку новыми номиналами
Полный VB-проект с этого этапа разработки игры - в файле vbg5.

zip


Напишем процедуру подсчета очков при установке маркера в начале игры.
'Подсчет очков при постановке маркера
Dim et 'В эту переменную будут записаны результаты пересчета значений массива field(i,j)
‘В какую из ячеек поставлен маркер – какие ячейки field(i,j) ей соответствуют
If markersave = 0 Then et = field(0, 0)
If markersave = 1 Then et = field(1, 0)
If markersave = 2 Then et = field(2, 0)
If markersave = 3 Then et = field(3, 0)
If markersave = 4 Then et = field(4, 0)
If markersave = 5 Then et = field(5, 0)
If markersave = 6 Then et = field(6, 0)
If markersave = 7 Then et = field(7, 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 = 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 'Больше не обрабатывать, т.к. маркер уже нарисован
Теперь «подключим» процедуру подсчета очков – в каждую из процедур Click-а для ячеек нижней строки:
If firstset = 0 Then Save_Color 'Запомнить цвет фона
If firstset = 0 Then Label7.BackColor = &HFF0000 'Поставить цвет фона маркера (синий)
If firstset = 0 Then firstset = 1 'Больше не обрабатывать
markersave = 0 'Указывает на ячейку, в которую установлен маркер
Set_Marker_Count
‘Скорректировать счет
Для остальных ячеек нижней строки – точно так же.
Теперь напишем процедуру подсчета очков при сдвиге ячеек сверху – вниз.
Процедура будет выглядеть чрезвычайно просто:
'Подсчитать очки при сдвиге сверху - вниз
n = 0 ‘Временно разрешить работу процедуры Set_Marker_Count
Set_Marker_Count ‘Процедура подсчета очков при постановке маркера
Для демонстрации работы процедуры вставим ее вызов в процедуру сдвига рядов ячеек сверху – вниз Frame1_Click():
Num_Move 'Сдвинуть номиналы всех ячеек сверху - вниз
Up_Str_App 'Заполнить верхнюю строку игрового поля новыми номиналами
Dn_Count 'Подсчитать очки при сдвиге сверху - вниз
Полный VB-проект с этого этапа разработки игры - в файле vbg6.

zip


Создадим процедуру работы цветного линейного индикатора. Добавим на форму таймер Timer1 и сразу «разрешим» его.
Timer1.Interval = 500 ‘Восстановим интервал таймера
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 ‘Нарисовать индикатор полностью
Можно посмотреть, как индикатор работает.
Теперь таймер нужно «задизейблить» и разрешать только после того, как маркер будет поставлен в нижнюю строку игрового поля. Разрешение таймера вставим в процедуру постановки маркера на нижней строке игрового поля (а точнее – в процедуру подсчета очков после установки маркера Set_Marker_Count(), т.к. она общая для всех ячеек нижнего уровня).
В конце процедуры Set_Marker_Count() появится строка:
Timer1.Enabled = True 'Разрешить таймер, т.к. маркер поставлен
Полный VB-проект с этого этапа разработки игры - в файле vbg7.

zip


Когда цветной линейный индикатор полностью исчезнет, необходимо сдвинуть все строки с ячейками игрового поля сдвинуть вниз (процедура Frame1_Click() ), на маркер, подсчитать очки и заполнить верхнюю строку игрового поля новыми значениями номиналов.
Процедура работы таймера Timer1 будет выглядеть следующим образом:
Теперь нужно написать обработку нажатий клавиш и перемещения маркера вправо-влево по нижней строке ячеек игрового поля.
Разместим на форме Form1 еще один таймер Timer2. Поставим интервал времени для Timer2 = 50 и поместим в процедуру работы принтера код проверки состояния клавиш:
Объявим нужное для работы процедуры:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
'Обработка нажатия клавиш "стрелка влево" и "стрелка вправо"
If (GetAsyncKeyState(vbKeyLeft)) Then
ElseIf (GetAsyncKeyState(vbKeyRight)) Then
Надписи в заголовке формы "Left" и "Right" выводятся только для отладки.
Переменная markersave однозначно показывает в какой ячейке нижней строки игрового поля стоит маркер. Напишем процедуру перемещения маркера вправо-влево по нижней строке:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'Обработка нажатия клавиш «стрелка вправо» и «стрелка влево»
If (GetAsyncKeyState(vbKeyLeft)) Then
Move_Point_Left 'Переместить маркер влево
ElseIf (GetAsyncKeyState(vbKeyRight)) Then
Move_Point_Right 'Переместить маркер вправо
If markersave = 0 Then 'Если самая левая ячейка нижней строки
markersave = 7 'Левее самой левой ячейки – самая ПРАВАЯ (циклический переход)
firstset = 0 'Временно разрешить рисование маркера
Label7.BackColor = savecolor(0) 'Восстановить цвет фона ячейки, где БЫЛ маркер
Label14_Click 'Переместить маркер (самая правая ячейка!)
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label8.BackColor = savecolor(1) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label9.BackColor = savecolor(2) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label10.BackColor = savecolor(3) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label11.BackColor = savecolor(4) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label12.BackColor = savecolor(5) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label13.BackColor = savecolor(6) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
firstset = 0 'Временно разрешить рисование маркера
Label14.BackColor = savecolor(7) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
If markersave = 0 Then 'Если самая левая ячейка
markersave = 1 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label7.BackColor = savecolor(0) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 2 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label8.BackColor = savecolor(1) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 3 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label9.BackColor = savecolor(2) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 4 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label10.BackColor = savecolor(3) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 5 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label11.BackColor = savecolor(4) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 6 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label12.BackColor = savecolor(5) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 7 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label13.BackColor = savecolor(6) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
markersave = 0 'Переместить правее (т.к. значение > на 1)
firstset = 0 'Временно разрешить рисование маркера
Label14.BackColor = savecolor(7) 'Восстановить цвет ячейки, где БЫЛ маркер
markersave = 10 'Запретить ложные срабатывания (значение 10 не соответствует
Теперь нужно сделать всего одну процедуру – процедуру сдвига нумерации текущих игровых уровней:
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
Подключим процедуру сдвига слоев к работе, например так:
'Подсчитывать очки при сдвиге сверху вниз
Полный VB-проект с этого этапа разработки игры - в файле vbg8.

zip


Показательный момент – написаны все процедуры для software-реализации игры Oflameron. Т.е. Вы создали совершенно работоспособную игровую программу на Visual Basic. Представлять ее как коммерческий продукт рано – еще много «шероховатостей». Например, если Click-нуть на объекте Frame, то игра начнется без установки маркера.
Устранению таких «шероховатостей», приданию программе коммерческого вида будет посвящена 2-я часть руководства.
- Часть 2 – доводка игровой программы
- Часть 3 – разработка версии игры на VB для «наладонных» компьютеров
- Часть 4 – разработка версии игры на Delphi
- Часть 5 – разработка версии игры на JAVA для сотовых телефонов
На сайте http://freeproject.narod.ru выложена другая версия программирования игры Oflameron на Visual Basic 6.0
На сайте http://play-man.narod.ru выложена версия игры Oflameron на листочке бумаги. Достаточно просто распечатать игровой бланк из документа MS Word и играть.
P.S. Не считайте это описание оптимальным. Но это лучшее руководство по программированию игры в РуНет-е.

Название: Программирование логической игры на visual basic
Раздел: Рефераты по информатике, программированию
Тип: реферат
Добавлен 23:04:58 23 августа 2005 Похожие работы
Просмотров: 144
Комментариев: 19
Оценило: 5 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Если Вам нужна помощь с учебными работами, ну или будет нужна в будущем (курсовая, дипломная, отчет по практике, контрольная, РГР, решение задач, онлайн-помощь на экзамене или "любая другая" учебная работа...) - обращайтесь: https://clck.ru/P8YFs - (просто скопируйте этот адрес и вставьте в браузер) Сделаем все качественно и в самые короткие сроки + бесплатные доработки до самой сдачи/защиты! Предоставим все необходимые гарантии.
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Реферат: Программирование логической игры на visual basic
Курсовая работа по теме Анализ организации розничной продажи мебели на примере COOO 'Мебель-Неман'
Контрольная работа: Бланки документов
Небольшое Сочинение О Родине
Сочинение 9.3 Объем Слов
Реферат На Тему Активные И Пассивные Операции Коммерческих Банков
Реферат: Неналоговые доходы бюджета 5
Реферат: Защита льна от болезней и вредителей
Учебное пособие: Методические указания к изучению дисциплины и выполнению контрольной работы №1 для студентов заочной формы обучения всех специальностей спбгиэу
Дипломная работа по теме Девятиэтажный жилой дом с встроенными помещениями
Рефераты: Технологии, материаловедение, стандартизация
Реферат На Тему Система Умный Дом
Курсовая работа по теме Разработка основных элементов логистической системы ОАО 'Шебекино-Мел'
Реферат по теме Франция и Англия в борьбе за влияние в Западном Триполи
Контрольная работа по теме Тепловые процессы в газах
Курсовая работа по теме Микропроцессорный измерительный преобразователь биоэлектрических сигналов (Нерекурсивный фильтр 3 порядка)
Проверить Сочинение Егэ Бесплатно
Эссе На Тему Умею Ли Я Общаться
Реферат: Виртуальные деньги. Скачать бесплатно и без регистрации
Контрольная работа по теме Взаимосвязи отношений собственности и хозяйственной власти в условиях организационного предпринимательства
Реферат по теме Металл в исскустве
Курсовая работа: Культура эллинистического мира
Реферат: Рубки и экспорт древесины в Китай - региональный фокус. Амурская область
Курсовая работа: Буддизм

Report Page