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