Реферат: Игра на ловкость "Змейка"

Постановказадачи.

Цель:Создать законченный вариант игры на ловкость “Змейка”

Законченный вариант игры змейка должен содержать:

1) <span Times New Roman"">  

“Змейку”, которая может двигаться вограниченной плоскости. Маневрами “Змейки” должен управлять играющий. “Змейка” должна увеличиваться в размерах пристолкновении с “яблоком” и погибать пристолкновении с “бомбой”, припересечении самой себя и при выходе за границы плоскости заданнойпрограммистом.

2) <span Times New Roman"">  

“Яблоко”или другой объект, при столкновении с которым “Змейка”“съедает” его(увеличивается в длину в зависимости от условий заданныхпрограммистом.

3) <span Times New Roman"">  

“Бомба” или иной объект при столкновении с которым змейка погибает.

P.S.Необязательным условием(пожеланию учащегося), “змейка” может управлятьсямышкой(с помощью клавиш на форме), игра может иметь счетчик набранных очков,таблицу лучших игроков, которая может сохранятся и считываться из файла, атакже другие элементы которые увеличивают играбельность игры.

Алгоритм

1) <span Times New Roman"">  

Описываются переменные иконстанты(Dim,Const)

2) <span Times New Roman"">  

Выбор начальных координатслучайным образом(Rnd()).

3) <span Times New Roman"">  

Прорисовка начальногоположения.(Pset(x,y))

4) <span Times New Roman"">  

Генерация на поле яблок ибомб случайным образом(Rnd()).

5) <span Times New Roman"">  

Проверка: не появилось лияблоко или бомба на черве, а также друг на друге.

6) <span Times New Roman"">  

Управление “Змейкой” склавиатуры и мышкой.

7) <span Times New Roman"">  

Проверка: “не укусила” ли“змейка сама себя”, если укусила выводится информационное окно(Инфоформационнаяформа), в противном случае переходим к следующему пункту.

8) <span Times New Roman"">  

Проверка: “не съела” ли“змейка” “яблоко” если съела, то наращиваем ей хвост и переходим к пункту 3), впротивном случае см. Следующий пункт.

9) <span Times New Roman"">  

Проверка: “не съела” ли“змейка” “бомбу”, если съела, то выводится информационное окно(Инфоформационнаяформа), в противном случае переходим к следующему пункту.

10) Перерисовка “Змейки”

P.S.  За движение “Змейки” появление “яблок” и “бомб” отвечают три разныхтаймера. Это было использовано для того, чтобы скорость движения “змейки” былапостоянной, а также чтобы “яблоко” и “бомба” появлялись на поле в разное времяс разным периодом появления.

Не исключено, что в последующем в данную программубудут добавлены другие объекты, а также возможность создания таблицы лучшихигроков, с возможностью хранения этой таблицы в файле, который может бытьсчитан и записан, а так же перезаписан.

Код программы:

Форма_Змейка

'-------Описание переменных-------

Option Explicit

Dim Змейка() As Змея

DimLastPos As Змея

DimApple As Змея

DimBomba As Змея

Dimi, j, Длина As Integer

DimXDir, YDir As Integer

DimFirstXPos, FirstYPos As Integer

DimПроверочная1 As Byte

DimПроверочная2 As Single

DimНЛ As String

'-------Начальные присвоения--------

ConstTIC = 1                                        'Период таймера

ConstBackCollor = &H8000000F          'Цвет заднего плана

ConstWormCollor = &H80&                 'Цвет Змейки

ConstAppleCollor = &HFF00&             'Цвет яблока

ConstBombaCollor = &H80000012        'Цветбомбы

ConstТолщина = 10                             'Толщина червяка

ConstНачДлина = 5                             'Начальная длина Змейки

ConstПриращениеДлины = 3               'Приращение длины Змейки

-------------------------------------------------------------------------------------------------

PublicSub Form_Load()

Поле.BackColor= BackCollor

Поле.DrawWidth= Толщина

Длина= НачДлина

ReDimPreserve Змейка(1 To НачДлина)

'------Начальное положение------

FirstXPos= 5 + Int(Rnd() * 41)

FirstYPos= 5 + Int(Rnd() * 41)

Fori = 1 To 5

Змейка(i).XPos = FirstXPos

Змейка(i).YPos = FirstYPos + i

Nexti

НачПоложение

'------Направление движения------

XDir= 0

YDir= -1 'Вверх

'------Генерация Яблок и Бомб----

AppleGen

BombaGen

Taimer.Interval= TIC

EndSub

'---Прорисовка начального положения---

PrivateSub НачПоложение()

Поле.ForeColor= WormCollor

СчетИгры.Caption= Длина

Fori = 1 To Длина

Поле.PSet (Змейка(i).XPos * 100, Змейка(i).YPos *100)

Nexti

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub Taimer_Timer()

Движение

Перерисовка

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub Движение()

НЛ= Chr(10) & Chr(13)  'Перевод строки

Поле.AutoRedraw= True

Поле.DrawWidth= Толщина

LastPos= Змейка(Длина)

Fori = Длина To 2 Step -1

Змейка(i) = Змейка(i — 1)

Nexti

Змейка(1).XPos= Змейка(1).XPos + XDir

Змейка(1).YPos= Змейка(1).YPos + YDir

'------Не вышел ли за пределы поля------

OnError GoTo ВышелЗаПределы

Проверочная1= Змейка(1).XPos — 1

Проверочная1= Змейка(1).YPos — 1

Проверочная1= Змейка(1).XPos + 206

Проверочная1= Змейка(1).YPos + 206

'------Не укусил ли самого себя------

УкусилСамогоСебя:

Fori = 2 To Длина

If Змейка(1).XPos = Змейка(i).XPos AndЗмейка(1).YPos = Змейка(i).YPos

Then Taimer.Interval = 0

ИнформационнаяФорма.ИнфоПоле.Caption= НЛ & _

«ВАША ЗМЕЙКА»& НЛ & _

«САМА СЕБЯУКУСИЛА» & НЛ & НЛ & _

«Длина змейки „& Длина

ИнформационнаяФорма.Show

Форма_Змейка.Enabled = False

End If

Nexti

'-----Не наткнулся ли на яблоко-----

OnError GoTo Наткнулась1

Проверочная2= 1 / (Abs((Змейка(1).XPos — Apple.XPos)) + Abs((Змейка(1).YPos — Apple.YPos)))

'-----Не наткнулась ли на бомбу------

OnError GoTo Наткнулась2

Проверочная2= 1 / (Abs((Змейка(1).XPos — Bomba.XPos)) + Abs((Змейка(1).YPos — Bomba.YPos)))

ExitSub

'----------------Обравотка столкновений---------------

ВышелЗаПределы:

Taimer.Interval= 0

ИнформационнаяФорма.ИнфоПоле.Caption = НЛ & _

“ВАША ЗМЕЙКА»& НЛ & _

«ВЫШЛА ЗА ПРЕДЕЛЫПОЛЯ» & НЛ & НЛ & _

«Длина змейки „& Длина

ИнформационнаяФорма.Show

Форма_Змейка.Enabled = False

ExitSub

Наткнулась1:

Длина= Длина + ПриращениеДлины

ReDimPreserve Змейка(1 To Длина)

'-------Перемещаемхвост в конец-------

Fori = Длина To ПриращениеДлины + 1 Step -1

Змейка(i) = Змейка(i — ПриращениеДлины)

Nexti

'Добавляем в голову по направлению движения

Fori = ПриращениеДлины To 1 Step -1

Змейка(i).XPos = Змейка(i + 1).XPos + XDir

Змейка(i).YPos = Змейка(i + 1).YPos + YDir

Nexti

AppleGen

НачПоложение

ExitSub

Наткнулась2:

Taimer.Interval= 0

ИнформационнаяФорма.ИнфоПоле.Caption = НЛ & _

“ВАША ЗМЕЙКА»& НЛ & _

«СЪЕЛА БОМБУ»& НЛ & НЛ & _

«Длина змейки „& Длина

ИнформационнаяФорма.Show

Форма_Змейка.Enabled = False

ExitSub

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub Перерисовка()

'------Рисуем змейку-------

Поле.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)

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub TaimerApple_Timer()

TaimerApple.Interval= (5 + Int(Rnd() * 11)) * 1000

Поле.ForeColor= BackCollor

Поле.PSet(Apple.XPos * 100, Apple.YPos * 100)

AppleGen

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub TaimerBomba_Timer()

TaimerBomba.Interval= (5 + Int(Rnd() * 11)) * 1000

Поле.ForeColor= BackCollor

Поле.PSet(Bomba.XPos * 100, Bomba.YPos * 100)

BombaGen

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub AppleGen()

Метка1:

Apple.XPos= 1 + Int(Rnd() * 49)

Apple.YPos= 1 + Int(Rnd() * 49)

i =1

DoWhile i <= Длина

If Apple.XPos = Змейка(i).XPos And Apple.YPos =Змейка(i).YPos Then

GoTo Метка1

Exit Do

End If

i = i + 1

Loop

EndSub

-------------------------------------------------------------------------------------------------

PrivateSub BombaGen()

Метка2:

Bomba.XPos= 1 + Int(Rnd() * 49)

Bomba.YPos= 1 + Int(Rnd() * 49)

i =1

DoWhile 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

EndSub

-------------------------------------------------------------------------------------------------

<span Times New Roman“,»serif"; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: KO;mso-bidi-language:AR-SA">

'-----Обработка клавиш управления------

PrivateSub поле_KeyDown(KeyCode As Integer, Shift As Integer)

SelectCase 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

EndSub

-------------------------------------------------------------------------------------------------

‘Обработканажатий кнопок

PrivateSub Up_Click()

XDir = 0

YDir = -1

EndSub

PrivateSub Down_Click()

XDir = 0

YDir = 1

EndSub

PrivateSub Left_Click()

XDir = -1

YDir = 0

EndSub

PrivateSub Right_Click()

XDir = 1

YDir = 0

EndSub

PrivateSub Command1_Click()

End

EndSub

PrivateSub Command2_Click()

Форма_Змейка.Enabled = True

Форма_Змейка.Form_Load

ИнформационнаяФорма.Hide

EndSub

ИнформационнаяФорма

Dim НЛ As String

-------------------------------------------------------------------------------------------------

PrivateSub Avtor_Click()

НЛ= Chr(10) & Chr(13)

AboutAvtor.Label4.Caption= «Все права защищены,» & НЛ & _

«использование в комерческих целях преследуетсяпо закону»

ИнформационнаяФорма.Enabled = False

AboutAvtor.Show

EndSub

-------------------------------------------------------------------------------------------------

‘Обработканажатий кнопок

PrivateSub Exit_Click()

КнопкаВыход_Click

EndSub

PrivateSub NewGame_Click()

КнопкаПовторить_Click

EndSub

PrivateSub КнопкаВыход_Click()

UnloadФорма_Змейка

UnloadMe

EndSub

Private Sub КнопкаПовторить_Click()

Форма_Змейка.Enabled = True

Форма_Змейка.Form_Load

ИнформационнаяФорма.Hide

EndSub

AboutAvtor

‘Закрытие формы щелчко кнопкимышы по фотографии

Private Sub Image1_Click()

ИнформационнаяФорма.Enabled= True

UnloadMe

End Sub

Module1

Option Explicit

‘Создаем новый тип переменной

PublicTypeЗмея

XPosAs Integer

YPosAs Integer

End Type

еще рефераты
Еще работы по программированию, базе данных