Реферат: Игра на ловкость Змейка
Название: Игра на ловкость Змейка Раздел: Рефераты по информатике, программированию Тип: реферат |
Алгоритм
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 Постановка задачи. Цель: Создать законченный вариант игры на ловкость “Змейка” Законченный вариант игры змейка должен содержать:
P.S. Необязательным условием(по желанию учащегося), “змейка” может управляться мышкой(с помощью клавиш на форме), игра может иметь счетчик набранных очков, таблицу лучших игроков, которая может сохранятся и считываться из файла, а также другие элементы которые увеличивают играбельность игры. |