`
Читать книги » Книги » Разная литература » Газеты и журналы » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Перейти на страницу:
экрана должен быть и снизу Размер_старта = 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 'Горизонтальная координата верхнего левого угла газона

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

For i = 1 То Число_газонов ' Числа в формулах подобраны на опыте:

Х_газона = 2 * Размер_финиша + Размер_поля * Rnd *2/3

У_газона = Размер_финиша + (Размер_поля — Размер_финиша — Максимальный_размер_газона) * Rnd

Line (Х_газона, У_газона)-(Х_газона + Максимальный_размер_газона * Rnd, У_газона + Максимальный_размер_газона * Rnd), vbMagenta, BF Next

End Sub

Private Sub Ставим_машину_на_старт()

x = Х_старта:

у = У_старта 'Координаты машины приравниваются координатам точки старта

Скорость = 0: Путь = 0: Время = 0

Руль = влево 'Это чтобы машина знала, куда ехать, когда стартуем нажатием на газ

Едем_влево 'Отсюда нам нужна только ориентация машины налево, а шага не будет, так как скорость=0

Педаль = ни_та_ни_эта 'Газовать пока нельзя, а тормозить бессмысленно

Image_авто. Visible = True 'До первого старта я сделал машину невидимой, теперь пришла пора ей появиться

Показываем_автомобиль

End Sub

Private Sub Timer1_Timer()

Определяем_где_мы

If Приехали Then Exit Sub

Изменяем_скорость

Выбираем_куда_ехать_и_делаем_шаг

Показываем автомобиль

Отображаем_информацию

End Sub

Private Sub Определяем_где_мы()

Цвет_под_автомобилем = Point(x, y)

Select Case Цвет_под_автомобилем

Case vbMagenta: Скорость = 15 'На газоне скорость мала

Case vbBlue: Сообщение.Text = "Финиш!": Timer1.Enabled = False: Приехали = True

Case vbRed: Сообщение.Text = "Врезались в ограждение!":

Timer1.Enabled = False: Приехали = True

End Select

End Sub

Private Sub Изменяем_скорость()

Select Case Педаль

Case газ

Скорость = Скорость + 5

Case тормоз

If Скорость > 0 Then Скорость = Скорость — 10 'потому, что тормоз быстрее газа

If Скорость < 0 Then Скорость =0 'В результате быстрого торможения скорость может стать отрицательной, что и предотвращается

End Select

Педаль = ни_та_ни_эта 'Это чтобы во время набора скорости и торможения приходилось без перерыва жать на педаль

End Sub

Private Sub Выбираем_куда_ехать_и_делаем_шаг()

Select Case Руль

Case вверх: Едем_вверх

Case вниз: Едем_вниз

Case влево: Едем_влево

Case вправо: Едем_вправо

End Select

End Sub

Private Sub Едем_вверх()

Image_авто. Picture = Image_вверх. Picture

у = у — Скорость

End Sub

Private Sub Едем_вниз()

Image_авто. Picture = Image_вниз. Picture

у = у + Скорость

End Sub

Private Sub Едем_влево()

Image_авто. Picture = Image_налево. Picture

x = x — Скорость

End Sub

Private Sub Едем вправо()

Image_авто. Picture = Image_направо. Picture

х = х + Скорость

End Sub

Private Sub Показываем_автомобиль()

Image_авто. Left = x

Image_авто. Top = у

End Sub

Private Sub Отображаем_информацию()

Спидометр.Text = Скорость

Путь = Путь + Скорость 'Нужно помнить, что именем Скорость назван шаг автомобиля

txtПуть.Text = Путь

If Клавиатура_сработала Then Время = Время + 1 'Счетчик времени запускается только тогда, когда мы стартуем

txtBpeмя.Text = Время

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Клавиатура_сработала = True

Select Case KeyCode

Case vbKeyUp: If Скорость < Пороговая_скорость Then Руль = вверх 'Поворот на большой скорости запрещен

Case vbKeyLeft: If Скорость < Пороговая_скорость Then Руль = влево

Case vbKeyDown: If Скорость < Пороговая_скорость Then Руль = вниз

Case vbKeyRight: If Скорость < Пороговая_скорость Then Руль = вправо

Case vbKeySpace: Педаль = газ

Case vbKeyB: Педаль = тормоз

End Select

KeyCode = 0 ' Это чтобы объекты на форме не реагировали на клавиатуру

End Sub

Недоработки проекта

Замеченные мной недоработки вызваны в основном нежеланием увеличивать размер кода и заключаются в следующем:

Координатами (х, у) машины считается ее левый верхний угол, а не центр. Причина этого — слишком простые операторы в процедуре Показываем_автомобиль. Это приводит к некоторой ассиметрии поведения машины при переезде с цвета на цвет. Немного повозившись, вы сможете исправить положение.

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

Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория», относящееся к жанру Газеты и журналы / Периодические издания / Сделай сам / Хобби и ремесла. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)