В процедуре Ставим_машину_на_старт вы вполне сможете разобраться по комментариям самостоятельно.
Ну вот, кажется, и все пояснения.
Текст программы
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 'Горизонтальная координата верхнего левого угла газона