Шрифт:
Интервал:
Закладка:
Сам бог велел вам добавить в проект управление машиной с помощью мыши. Например, щелчок мышью в стороне от машины вызывает поворот машины в эту сторону, удерживание нажатой левой клавиши мыши — газ, правой — тормоз. Для этого вам нужно будет написать процедуру MouseDown, придавая в ней нужные значения переменным Руль и Педаль аналогично тому, как это делает процедура KeyDown. Вам придется поразмыслить, как правильно сравнить координаты машины и мыши, чтобы добиться нужного результата.
Гонки двух автомобилей
Если вы хотите играть вместе с другом, вам нужны гонки двух машин. Несмотря на то, что ничего нового вам придумывать не придется, размер программы вырастет раза в полтора. Для второй машины нужен будет второй таймер. Вам придется иметь по два экземпляра переменных, описывающих поведение каждой машины. Например, вместо переменной Скорость вам придется иметь две переменные — Скорость1 и Скорость2. Вам придется иметь по два экземпляра процедур, задающих поведение каждой машины. Процедуру KeyDown вам придется дополнить новыми клавишами для управления второй машиной. При этом нужно будет внести серьезные изменения в педали, так как удерживать клавиши нажатыми теперь будет нельзя без усложнения программы. Вы могли бы сократить рост программы, используя процедуры с параметрами, но пока у вас для этого нет достаточных знаний. А если у вас гонки 10 автомобилей? Проблемы нарастают.
Visual Basic конечно же предлагает универсальное решение этой проблемы. Он, как и все серьезные и мощные языки программирования, является объектно-ориентированным языком. В частности, имеется в виду, что он позволяет программисту создавать собственные классы объектов. Вот у вас имеется класс объектов "кнопка" — CommandButton и вы пользуетесь в проекте отдельными экземплярами этого класса — объектами. Поведение кнопок запрограммировано глубоко внутри Visual Basic и вы видите только результаты этого программирования. Например, когда выполняется оператор
Command1.Visible = True
вы видите, что кнопка легко возникает на форме. Однако, чтобы она возникла, нужно чтобы компьютер ее нарисовал из прямоугольников и других элементов и написал что-то на ней, а для этого нужна программа.
Научившись создавать собственные классы, вы сможете создать класс "автомобиль" и пользоваться каким угодно числом экземпляров этого класса. Программу поведения автомобиля вы пишете сами, причем один раз и только для одного автомобиля. Остальные автомобили будут автоматически пользоваться ей же.
Задание на игру "Торпедная атака
Задание 114: "Торпедная атака". Начинается все красивой заставкой с названием игры. Компьютер спрашивает ваше имя, чтобы во время игры оно горело красивыми яркими буквами в углу экрана. В меню вы можете посмотреть правила игры, сведения об авторе, выбрать игру со звуком или без. Но вот игра началась. На экране морской пейзаж (нарисованный вами или взятый готовым). Вдали экрана по горизонтали плывет вражеский корабль. У нижнего края экрана притаился ваш торпедный аппарат. В подходящий момент времени вы нажимаете клавишу — и торпеда плывет вдаль, уменьшаясь по мере удаления. Если вы попали, то экран озаряется вспышкой от взрыва, на мгновение виден и сам взрыв, раздается коротенькая радостная мелодия, на экране — коротенький поздравительный текст, счетчик подбитых кораблей на экране увеличивается на 1. Если не попали, то зрительные и звуковые эффекты — совсем другие. В любом случае уменьшается на 1 счетчик оставшихся торпед. Затем плывет следующий корабль. И так далее. Когда торпеды у вас кончатся (скажем, их было 10), игра заканчивается. Программа анализирует ваши успехи и в зависимости от них выдает на экран текст, скажем "Мазила!", если вы не попали ни разу из 10, или "Профи!", если вы попали 8 раз. Затем спрашивает, будете ли вы играть еще.
Помощь: Как компьютер определит, попал или не попал? Нужно в тот момент, когда торпеда доплывет до линии движения корабля, сравнить горизонтальные координаты корабля и торпеды, и если они достаточно близки, считать, что попал.
Улучшение. Если у всех кораблей будет одинаковая скорость, то попадать будет слишком просто, а значит и играть неинтересно. Сделайте скорость кораблей случайной. Конечно, не совсем уж (скажем, в условных единицах скорости диапазон от 0 до 10 — это слишком), а в пределах разумного (скажем, от 4 до 8 — это нормально). Причем не нужно менять скорость одного и того же корабля в процессе движения. Пусть она остается постоянной, а то все будет зависеть не от вашего мастерства, а от везения. Различаются скорости только разных кораблей.
Пусть игрок сможет выбирать из нескольких уровней трудности. Трудность удобнее всего увеличивать, уменьшая размеры корабля, то есть требуемую величину близости координат корабля и торпеды при определении попадания.
ДИСКУССИИ
Преподавание химии
взгляд научного работника В.Н. Витер
Хотел бы привлечь внимание читателей к следующему вопросу. Упрощенное изложение учебного материала значительно повышает его усвоение. Но злоупотребление этим может привести к ошибочным или оторванным от практики знаниям. А к чему ведет потеря связи с реальностью и практикой можно легко себе представить, вспомнив средневековую схоластику. С другой стороны, нынешнее "усложнение" школьной программы понижает и доступность знаний, и их адекватность.
Поясню примерами. Всех нас учили в школе, что кислоты-неокислители не реагируют с металлами, более электроположительными, чем водород. Правильно? Конечно.
В институте мы узнаем, что водные растворы НВг и HI растворяют Сu, Нg и Аg с выделением Н2. Даже золото способно вытеснять водород из воды в присутствии цианида и в отсутствии кислорода. Про неводные растворы я вообще молчу. Экзотика? Не совсем. Для некоторых технологов и исследователей подобные процессы не более чем обыденная работа. Продолжим.
Учась на 5-м курсе института, я прочитал, как в промышленности получают медный купорос. Сырьем служат: отходы меди, разбавленная серная кислота и воздух. Процесс идет при комнатной температуре. Все это школьных догм никак не опровергает. Но специалист, вооруженный только этими догмами не смог бы предложить столь простой и эффективный метод. На основе школьных и университетских знаний велик соблазн использовать концентрированную H2SO4 при нагревании. Соответственно возникнут проблемы с SO2 и аэрозолем серной кислоты. Все это в промышленных масштабах…
Таким образом, путь получения химических знаний можно упрощенно разделить на этапы:
1. Школа. Тут даются основы. Появляется реальный шанс заинтересовать ученика предметом. В тоже время, полученная информация зачастую не совсем правильна или оторвана от практики.
2. Университеты. Происходит расширение и углубление знаний. А часто и простое опровержение материала, выученного в школе.
3. Работа химика. Наконец, бывшие студенты осознают как все на самом деле. Но только в своей узкой