Игра на ловкость Змейка
Алгоритм
Описываются
переменные
и константы(Dim,
Const)
Выбор начальных
координат
случайным
образом(Rnd()).
Pset(x,y))
Генерация
на поле яблок
и бомб случайным
образом(Rnd()).
Проверка:
не появилось
ли яблоко или
бомба на черве,
а также друг
на друге.
Управление
“Змейкой” с
клавиатуры
и мышкой.
Проверка:
“не укусила”
ли “змейка
сама себя”,
если укусила
выводится
информационное
окно (Инфоформационнаяформа),
в противном
случае переходим
к следующему
пункту.
Проверка:
“не съела” ли
“змейка” “яблоко”
если съела, то
наращиваем
ей хвост и переходим
к пункту 3), в
противном
случае см. Следующий
пункт.
Проверка:
“не съела” ли
“змейка” “бомбу”,
если съела, то
выводится
информационное
окно (Инфоформационнаяформа),
в противном
случае переходим
к следующему
пункту.
“Змейки”
P. S.
За движение
“Змейки” появление
“яблок” и “бомб”
отвечают три
разных таймера.
Это было использовано
для того, чтобы
скорость движения
“змейки” была
постоянной,
а также чтобы
“яблоко” и
“бомба” появлялись
на поле в разное
время с разным
периодом появления.
Не исключено,
что в последующем
в данную программу
будут добавлены
другие объекты,
а также возможность
создания таблицы
лучших игроков,
с возможностью
хранения этой
таблицы в файле,
который может
быть считан
и записан, а
так же перезаписан.
Владивостокский
Государственный
Университет
Экономики и
Сервиса
Кафедра
УТВЕРЖДАЮ
Заведующий
кафедрой
________ Н. Н.
___”_______1998 г.
Отчет
По лабораторной
работе
Руководитель
_______________ Глытина
К. У
Исполнитель
студент
ИС-97 _______________
Гавриленко
А. С.
Находка
1998 г.
ФормаЗмейка
'-------Описание
переменных-------
Dim
LastPos As Змея
Dim
Apple As Змея
Dim
Bomba As Змея
Dim
i, j, Длина As Integer
Dim
XDir, YDir As Integer
Dim
FirstXPos, FirstYPos As Integer
Dim
Проверочная2
As Single
Dim
НЛ As String
Const
TIC = 1 'Период
таймера
&H8000000F 'Цвет
заднего плана
&H80& 'Цвет
Змейки
Const
AppleCollor = &HFF00& 'Цвет
яблока
Const
BombaCollor = &H80000012 'Цвет
бомбы
Const
Толщина = 10
'Толщина
червяка
Const
НачДлина = 5
'Начальная
длина Змейки
Public
Sub FormLoad()
Поле. DrawWidth
= Толщина
Длина
= НачДлина
ReDim
Preserve Змейка(1 To НачДлина)
'------Начальное
положение------
FirstXPos
= 5 + Int(Rnd() * 41)
FirstYPos
= 5 + Int(Rnd() * 41)
Змейка(i). XPos =
FirstXPos
Змейка(i). YPos =
FirstYPos + i
Next
i
XDir
= 0
YDir
= -1 'Вверх
'------Генерация
Яблок и Бомб----
AppleGen
BombaGen
End
Sub
'---Прорисовка
начального
положения---
Private
Sub НачПоложение()
Поле. ForeColor
= WormCollor
СчетИгры. Caption
= Длина
For
i = 1 To Длина
Next
i
-------------------------------------------------------------------------------------------------
Private
Sub TaimerTimer()
Движение
Перерисовка
End
Sub
-------------------------------------------------------------------------------------------------
Private
Sub Движение()
НЛ
= Chr(10) & Chr(13) 'Перевод
строки
Поле. AutoRedraw
= True
Поле. DrawWidth
= Толщина
For
i = Длина To 2 Step -1
Змейка(i) = Змейка(i
- 1)
Next
i
Змейка(1). XPos
= Змейка(1). XPos + XDir
'------Не
вышел ли за
пределы поля------
On
Error GoTo ВышелЗаПределы
Проверочная1
= Змейка(1). XPos - 1
Проверочная1
= Змейка(1). YPos - 1
Проверочная1
= Змейка(1). XPos + 206
Проверочная1
= Змейка(1). YPos + 206
'------Не
укусил ли самого
себя------
УкусилСамогоСебя:
For
i = 2 To Длина
Then Taimer. Interval = 0
ИнформационнаяФорма. ИнфоПоле. Caption
= НЛ & _
"ВАША ЗМЕЙКА"
& НЛ & _
"САМА СЕБЯ
УКУСИЛА" & НЛ
& НЛ & _
"Длина змейки
" & Длина
ИнформационнаяФорма. Show
End If
Next
i
'-----Не
наткнулся ли
на яблоко-----
'-----Не
наткнулась
ли на бомбу------
On
Error GoTo Наткнулась2
Проверочная2
= 1 / (Abs((Змейка(1). XPos -
Bomba. XPos)) + Abs((Змейка(1). YPos
- Bomba. YPos)))
Exit
Sub
'----------------Обравотка
столкновений---------------
ВышелЗаПределы:
Taimer. Interval
= 0
& _
"ВАША ЗМЕЙКА"
& НЛ & _
"ВЫШЛА ЗА
ПРЕДЕЛЫ ПОЛЯ"
& НЛ & НЛ & _
"Длина змейки
" & Длина
ФормаЗмейка. Enabled
= False
Наткнулась1:
Длина
= Длина + ПриращениеДлины
ReDim
Preserve Змейка(1 To Длина)
'-------Перемещаем
хвост в конец-------
Змейка(i) = Змейка(i
- ПриращениеДлины)
Next
i
'Добавляем
в голову по
направлению
движения
For
i = ПриращениеДлины
To 1 Step -1
Змейка(i). XPos =
Змейка(i + 1). XPos + XDir
Змейка(i). YPos =
Змейка(i + 1). YPos + YDir
Next
i
AppleGen
НачПоложение
Наткнулась2:
Taimer. Interval
= 0
& _
"ВАША ЗМЕЙКА"
& НЛ & _
"СЪЕЛА БОМБУ"
& НЛ & НЛ & _
"Длина змейки
" & Длина
ИнформационнаяФорма. Show
ФормаЗмейка. Enabled
= False
Exit
Sub
End
Sub
-------------------------------------------------------------------------------------------------
Private
Sub Перерисовка()
'------Рисуем
змейку-------
Поле. ForeColor
= BackCollor
Поле. PSet
(LastPos. XPos * 100, LastPos. YPos * 100)
Поле. ForeColor
= WormCollor
Поле. PSet
(Змейка(1). XPos * 100,
Змейка(1). YPos * 100)
Поле. PSet
(Змейка(Длина). XPos
* 100, Змейка(Длина). YPos
* 100)
'------Рисуем
Яблоко-------
Поле. PSet
(Apple. XPos * 100, Apple. YPos * 100)
'------Рисуем
бомбу--------
Поле. PSet
(Bomba. XPos * 100, Bomba. YPos * 100)
End
Sub
-------------------------------------------------------------------------------------------------
TaimerApple. Interval
= (5 + Int(Rnd() * 11)) * 1000
Поле. ForeColor
= BackCollor
Поле. PSet
(Apple. XPos * 100, Apple. YPos * 100)
AppleGen
End
Sub
Поле. ForeColor
= BackCollor
Поле. PSet
(Bomba. XPos * 100, Bomba. YPos * 100)
BombaGen
End
Sub
Private
Sub AppleGen()
Метка1:
Apple. YPos
= 1 + Int(Rnd() * 49)
i
= 1
Do
While i <= Длина
If Apple. XPos = Змейка(i). XPos
And Apple. YPos = Змейка(i). YPos
Then
GoTo Метка1
Exit Do
End If
i = i + 1
Loop
Метка2:
Bomba. XPos
= 1 + Int(Rnd() * 49)
Bomba. YPos
= 1 + Int(Rnd() * 49)
i
= 1
Do
While i <= Длина
If Bomba. XPos = Змейка(i). XPos
And Bomba. YPos = Змейка(i). YPos
Or Bomba. XPos = Apple. XPos And Bomba. YPos = Apple. YPos Then
GoTo Метка2
Exit Do
End If
i = i + 1
Loop
End
Sub
'-----Обработка
клавиш управления------
Private
Sub полеKeyDown(KeyCode As Integer, Shift As
Integer)
Select
Case KeyCode
Case 38 'вверх
XDir = 0
YDir = -1
XDir = 0
YDir = 1
Case 37 'влево
XDir = -1
YDir = 0
Case 39 'вправо
XDir = 1
Case 27 'ESC
End
Case 113 'F2-игра
ФормаЗмейка. Enabled
= True
ФормаЗмейка. FormLoad
ИнформационнаяФорма. Hide
End Select
End
Sub
‘Обработка
нажатий кнопок
Private
Sub UpClick()
XDir = 0
End
Sub
Private
Sub DownClick()
XDir = 0
YDir = 1
End
Sub
Private
Sub LeftClick()
XDir = -1
YDir = 0
End
Sub
YDir = 0
End
Sub
End
End
Sub
Private
Sub Command2Click()
ФормаЗмейка. Enabled
= True
ИнформационнаяФорма. Hide
Dim НЛ
As String
-------------------------------------------------------------------------------------------------
Private
Sub AvtorClick()
НЛ
= Chr(10) & Chr(13)
AboutAvtor. Label4. Caption
= "Все права
защищены," &
НЛ & _
"использование
в комерческих
целях преследуется
по закону"
ИнформационнаяФорма. Enabled
= False
-------------------------------------------------------------------------------------------------
‘Обработка
нажатий кнопок
Private
Sub ExitClick()
End
Sub
Private
Sub NewGameClick()
КнопкаПовторитьClick
End
Sub
Private
Sub КнопкаВыходClick()
Unload
ФормаЗмейка
Unload
Me
Private
Sub КнопкаПовторитьClick()
ФормаЗмейка. Enabled
= True
ФормаЗмейка. FormLoad
End
Sub
AboutAvtor
‘Закрытие
формы щелчко
кнопки мышы
по фотографии
Private
Sub Image1Click()
Unload Me
Module1
Option
Explicit
‘Создаем
новый тип переменной
Public
Type Змея
End
Type
Постановка
задачи.
Цель: Создать
законченный
вариант игры
на ловкость
“Змейка”
Законченный
вариант игры
змейка должен
содержать:
“Змейку”,
которая может
двигаться в
ограниченной
плоскости.
Маневрами
“Змейки”
должен управлять
играющий. “Змейка”
должна увеличиваться
в размерах при
столкновении
с “яблоком”
и погибать при
столкновении
с “бомбой”,
при пересечении
самой себя и
при выходе за
границы плоскости
заданной
программистом.
“Яблоко”
или другой
объект, при
столкновении
с которым “Змейка”
“съедает”
его(увеличивается
в длину в зависимости
от условий
заданных
программистом.
“Бомба”
или иной объект
при столкновении
с которым змейка
погибает.
P. S.
Необязательным
условием(по
желанию учащегося),
“”
может управляться
мышкой(с помощью
клавиш на форме),
игра может
иметь счетчик
набранных
очков, таблицу
лучших игроков,
которая может
сохранятся
и считываться
из файла, а также
другие элементы
которые увеличивают
играбельность
игры.
|