Выбрать главу

В процедуре Ставим_машину_на_старт вы вполне сможете разобраться по комментариям самостоятельно.

Ну вот, кажется, и все пояснения.

Текст программы

Dim х As Integer 'Горизонтальная координата автомобиля

Dim у As Integer 'Вертикальная координата автомобиля

Dim Х_старта As Integer 'Координаты старта и финиша

Dim У_старта As Integer

Dim Х_финиша As Integer Dim У_финиша As Integer

Dim Размер_старта As Integer 'Старт — квадрат, это сторона квадрата

Dim Размер_финиша As Integer 'Финиш — квадрат, это сторона квадрата

Dim Число_газонов As Integer 'Каждый газон — это случайный прямоугольник в случайном месте

Dim Максимальный_размер_гаpона As Integer

Dim Размер_поля As Integer 'Поле — квадрат, это сторона квадрата

Dim Отступ_поля_от_края_формы As Integer 'Имеется в виду отступ слева и сверху

Dim Путь As Long 'Путь автомобиля с момента старта (в твипах)

Dim Время As Integer 'Время измеряется количеством импульсов таймера с момента щелчка по кнопке начала

Dim Скорость As Integer 'Скорость — это не скорость, а расстояние. Она численно равна шагу автомобиля на каждом такте таймера

Dim Пороговая_скорость As Integer 'Скорость, выше которой не работает руль

Dim Цвет_под_автомобилем As Long 'Нужен чтобы знать, где находится автомобиль — на газоне, на финише, врезался в ограждение

Private Enum типРуль

вверх

влево

вниз

вправо

End Enum

Dim Руль As типРуль

Private Enum типПедаль

тормоз

газ

ни_та_ни_эта

End Enum

Dim Педаль As типПедаль

Dim Приехали As Boolean 'Приехали = True, когда приехали на финиш или врезались в ограждение

Dim Клавиатура_сработала As Boolean 'Чтобы секундомер судьи запускался автоматически, когда мы стартуем, не раньше

Private Sub Form_Load()

Timer1.Enabled = False 'Нечего мотору зря работать до начала гонки

Randomize 'Нам придется рисовать случайные газоны

WindowState = 2 'Окно игры распахнуто на весь экран

BackColor = vbWhite 'Асфальт белый

'Задаем и вычисляем размеры элементов поля (все числа подбирайте на опыте):

Отступ_поля_от_края_формы = 500

ScaleLeft = — Отступ_поля_от_края_формы 'Смещаем для удобства начало

системы координат в левый верхний угол поля

ScaleTop = — Отступ_поля_от_края_формы

Размер_поля = Screen.Height — 2 * Отступ_поля_от_края_формы 'Отступ от края экрана должен быть и снизу Размер_старта = 600 Размер_финиша = 600

Х_старта = Размер_поля — Размер_старта 'Чтобы старт находился у правой кромки поля

Х_финиша = 0 'Чтобы финиш находился у левой кромки поля

У_старта = Размер_поля / 2 'Чтобы старт по высоте находился посредине поля

У_финиша = Размер_поля / 2 'Чтобы финиш по высоте находился посредине поля

Число_газонов = 30

Максимальный_размер_газона = Размер_поля / 6 Пороговая_скорость = 200

End Sub

Private Sub Кнопка_начинай_сначала_С1ick()

Клавиатура_сработала = False 'Мы еще не стартовали

Timer1.Enabled = False 'Нечего мотору зря работать до начала гонки

'Рисуем поле игры со всеми элементами:

Cls 'Перед тем, как заново рисовать, надо все стереть

Рисуем_границы_поля

Рисуем_старт

Рисуем_финиш

Рисуем_газоны

'Необходимые начальные установки:

Ставим_машину_на_старт

Приехали = False

Timer1.Enabled = True 'Заводим мотор, скоро начало гонки

Спидометр. SetFocus 'Это чтобы фокус ушел с кнопки, а то первое нажатие на стрелку действует не так, как нам надо

End Sub

Private Sub Рисуем_границы_поля()

DrawWidth = 10

Line (0, 0) — (Размер_поля, Размер_поля), vbRed, В

DrawWidth = 1 'Возвращаем нормальную толщину карандаша

End Sub

Private Sub Рисуем_старт()

Line (Х_старта, У_старта)-(Х_старта + Размер_старта, У_старта + Размер_старта), vbGreen, BF

End Sub

Private Sub Рисуем_финиш()

Line (Х_финиша, У_финиша) — (Х_финиша + Размер_финиша, У_финиша + Размер_финиша), vbBlue, BF

End Sub

Private Sub Рисуем_газоны() 'Каждый газон — это прямоугольник случайного размера в случайном месте Dim i As Integer

Dim Х_газона As Integer 'Горизонтальная координата верхнего левого угла газона