скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

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

Напишем процедуру подсчета очков при установке маркера в начале игры.

Private Sub Set_Marker_Count()

'Подсчет очков при постановке маркера

Dim et 'В эту переменную будут записаны результаты пересчета значений массива field(i,j)

           'в номинал ячеек

If n = 0 Then          

‘В какую из ячеек поставлен маркер – какие ячейки 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 = 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 Label7_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 ‘Скорректировать счет

End Sub

Для остальных ячеек нижней строки – точно так же.

Теперь напишем процедуру подсчета очков при сдвиге ячеек сверху – вниз.

Процедура будет выглядеть чрезвычайно просто:

Private Sub Dn_Count()

'Подсчитать очки при сдвиге сверху - вниз

n = 0  ‘Временно разрешить работу процедуры Set_Marker_Count

Set_Marker_Count ‘Процедура подсчета очков при постановке маркера

End Sub

Для демонстрации работы процедуры вставим ее вызов в процедуру сдвига рядов ячеек сверху – вниз  Frame1_Click():

Private Sub Frame1_Click()

Num_Move 'Сдвинуть номиналы всех ячеек сверху - вниз

Up_Str_App 'Заполнить верхнюю строку игрового поля новыми номиналами

Marker_Reset 'Восстановить маркер

Dn_Count 'Подсчитать очки при сдвиге сверху - вниз

End Sub

Полный VB-проект с этого этапа разработки игры -  в файле vbg6.zip

Создадим процедуру работы цветного линейного индикатора. Добавим на форму таймер Timer1 и сразу «разрешим» его.

Private Sub Timer1_Timer()

IndLent = IndLent + 1

If IndLent = 9 Then

    IndLent = 0

    Timer1.Interval = 500  ‘Восстановим интервал таймера

End If

Print_Ind   'Нарисуем индикатор

End Sub

Процедура рисования индикатора:

Private Sub Print_Ind()

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

Можно посмотреть, как индикатор работает.

Теперь таймер нужно «задизейблить» и разрешать только после того, как маркер будет поставлен в нижнюю строку игрового поля. Разрешение таймера вставим в процедуру постановки маркера на нижней строке игрового поля (а точнее – в процедуру подсчета очков после установки маркера Set_Marker_Count(), т.к. она общая для всех ячеек нижнего уровня).

В конце процедуры Set_Marker_Count()  появится строка:

Timer1.Enabled = True  'Разрешить таймер, т.к. маркер поставлен

Полный VB-проект с этого этапа разработки игры -  в файле vbg7.zip

Когда цветной линейный индикатор полностью исчезнет, необходимо сдвинуть все строки с ячейками игрового поля сдвинуть вниз (процедура Frame1_Click() ),  на маркер, подсчитать очки и заполнить верхнюю строку игрового поля новыми значениями номиналов.

Процедура работы таймера Timer1 будет выглядеть следующим образом:

Private Sub Timer1_Timer()

IndLent = IndLent + 1

If IndLent = 9 Then

    IndLent = 0

    Timer1.Interval = 500

    Frame1_Click   'Сдвинуть уровни

End If

Print_Ind   'Нарисовать индикатор

End Sub

Теперь нужно написать обработку нажатий клавиш и перемещения маркера вправо-влево по нижней строке ячеек игрового поля.

Разместим на форме Form1 еще один таймер Timer2. Поставим интервал времени для Timer2 = 50 и поместим в процедуру работы принтера код проверки состояния клавиш:

Объявим нужное для работы процедуры:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

И собственно код обработки:

Private Sub Timer2_Timer()

'Обработка нажатия клавиш "стрелка влево" и "стрелка вправо"

            If (GetAsyncKeyState(vbKeyLeft)) Then

                ' Кнопка влево

                Form1.Caption = "Left"

            ElseIf (GetAsyncKeyState(vbKeyRight)) Then

                ' Кнопка вправо

                Form1.Caption = "Right"

            End If

End Sub

Надписи в заголовке формы "Left" и "Right" выводятся только для отладки.

Переменная markersave однозначно показывает в какой ячейке нижней строки игрового поля стоит маркер. Напишем процедуру перемещения маркера вправо-влево по нижней строке:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

'Обработка нажатия клавиш «стрелка вправо» и «стрелка влево»

            If (GetAsyncKeyState(vbKeyLeft)) Then

                ' Кнопка влево

                Form1.Caption = "Left"

                Move_Point_Left  'Переместить маркер влево

            ElseIf (GetAsyncKeyState(vbKeyRight)) Then

                ' Кнопка вправо

                Form1.Caption = "Right"

                Move_Point_Right  'Переместить маркер вправо

            End If

End Sub

Private Sub Move_Point_Left()

If markersave = 0 Then  'Если самая левая ячейка нижней строки

    markersave = 7         'Левее самой левой ячейки – самая ПРАВАЯ (циклический переход)

    firstset = 0                'Временно разрешить рисование маркера

    Label7.BackColor = savecolor(0) 'Восстановить цвет фона ячейки, где БЫЛ маркер

    Label14_Click           'Переместить маркер (самая правая ячейка!)

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 1 Then

    markersave = 0         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label8.BackColor = savecolor(1) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label7_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 2 Then

    markersave = 1         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label9.BackColor = savecolor(2) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label8_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 3 Then

    markersave = 2         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label10.BackColor = savecolor(3) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label9_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 4 Then

    markersave = 3         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label11.BackColor = savecolor(4) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label10_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 5 Then

    markersave = 4         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label12.BackColor = savecolor(5) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label11_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 6 Then

    markersave = 5         ''Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label13.BackColor = savecolor(6) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label12_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 7 Then

    markersave = 6         'Поместить левее

    firstset = 0                'Временно разрешить рисование маркера

    Label14.BackColor = savecolor(7) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label13_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

markersave = vt

n = 0

Set_Marker_Count

End Sub

Private Sub Move_Point_Right()

If markersave = 0 Then  'Если самая левая ячейка

    markersave = 1         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label7.BackColor = savecolor(0) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label8_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 1 Then

    markersave = 2         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label8.BackColor = savecolor(1) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label9_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 2 Then

    markersave = 3         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label9.BackColor = savecolor(2) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label10_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 3 Then

    markersave = 4         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label10.BackColor = savecolor(3) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label11_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 4 Then

    markersave = 5         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label11.BackColor = savecolor(4) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label12_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 5 Then

    markersave = 6         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label12.BackColor = savecolor(5) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label13_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

If markersave = 6 Then

    markersave = 7         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label13.BackColor = savecolor(6) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label14_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                       ‘никакой ячейке)

End If

If markersave = 7 Then

    markersave = 0         'Переместить правее (т.к. значение > на 1)

    firstset = 0                'Временно разрешить рисование маркера

    Label14.BackColor = savecolor(7) 'Восстановить цвет ячейки, где БЫЛ маркер

    Label7_Click           'Переместить маркер

    vt = markersave

    markersave = 10        'Запретить ложные срабатывания (значение 10 не соответствует

                                      ‘никакой ячейке)

End If

markersave = vt

n = 0

Set_Marker_Count

End Sub

Теперь нужно сделать всего одну процедуру – процедуру сдвига нумерации текущих игровых уровней:

Private Sub Level_Count()

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 Dn_Count()

'Подсчитывать очки при сдвиге сверху вниз

n = 0

Set_Marker_Count

Level_Count 'Сдвинуть уровни Level

End Sub

Полный 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 и играть.

Резюме (не полное):

- ассемблер – 8 лет

- JAVA – 4 года

- VB – 6 лет

- PHP – 5 лет

P.S. Не считайте это описание оптимальным. Но это лучшее руководство по программированию игры в РуНет-е.


Страницы: 1, 2, 3


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.