Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №14/2009


Только в номере
Лого-карнавал: опыт и плодотворные идеи

Игра с самолетом в ЛогоМирах

Представьте: по листу программы ЛогоМиры летит маленький самолетик. Передвижение рычажка бегунка вправо заставляет самолет повернуть вправо, тянем рычажок бегунка влево — самолет поворачивает налево. Он летит по спирали, выписывает мертвые петли. Как же быmла сделана эта анимация? Мы нарисовали много форм для Черепахи и теперь меняем их в зависимости от направления ее головы? Нет, все гораздо проще!

Как-то на семинаре “Погружение в ЛогоМиры” Евгений Генрихович Кабаков показал нам такой самолетик. Мне эта идея очень понравилась, и я разработала систему заданий для своих учеников — проект “Игра с самолетом”. Я предлагаю его ребятам в конце 7-го класса. К тому времени ученики должны быть знакомы с командами управления движением Черепахи и простыми циклами, уметь реализовать простой ветвящийся алгоритм, знать, как написать процедуру с параметром и разбить сложную задачу на простые подзадачи.

Работу над проектом можно разбить на несколько этапов:

1. “Самолет летит по прямой”.

2. “Управление полетом самолета”.

3. “Игра с самолетом”.

4. “Управление самолетом с клавиатуры”.

Этап 1. “Самолет летит по прямой”

На этом этапе достаточно объяснить самый общий принцип “работы” самолетика — спрятанная Черепаха рисует контур самолета, затем очищает экран, передвигается вперед, снова рисует контур, стирает его, передвигается вперед и так далее. Фактически эта задача разбивается на две подзадачи — рисование фигуры самолета и анимирование его полета. Поэтому нужно просить ребят самостоятельно написать две процедуры: процедуру рисования самолета с двумя параметрами, от которых будет зависеть толщина контура самолета и его размер, и процедуру полета самолета по прямой с одним параметром, от которого будет зависеть скорость самолета. Пусть ученики сами решат, какие значения нужно сделать параметрами.

Один из вариантов готовой первой программы может выглядеть так:

to самолет :x :tp

setpensize :tp

bk :x

rt 45 bk :x * 2 fd :x * 2

lt 90 bk :x * 2 fd :x * 2 rt 45

bk :x * 2

rt 45 bk :x fd :x

lt 90 bk :x fd :x rt 45

fd :x * 3

end

Важно, чтобы рисование самолета начиналось и заканчивалось в одной и той же точке, и Черепаха была повернута в ту же сторону, что и до начала рисования, но не обязательно предупреждать об этом детей заранее. Пусть они сами столкнутся с тем, что самолет “рассыпается” при попытке его “запуска”, и попробуют определить, в чем дело.

Если ребята использовали раньше команду CG, которая очищает экран и возвращает Черепаху в центр листа, нужно познакомить их с командой CLEAN, которая не меняет положения Черепахи.

Чтобы самолетик полетел по прямой, программа может быть такой:

to полет_по_прямой :x :tp :v

ht

repeat 1000 [самолет :x :tp wait 0.5

clean fd :v]

end

Более сильным ученикам можно предложить модифицировать программу так, чтобы самолетик летал не по прямой, а поворачиваясь то в одну, то в другую сторону. Такая программа может выглядеть так:

to полет_с_поворотами :x :tp :v

ht

repeat 1000

[самолет :x :tp wait 0.5

clean fd :v rt random 10

fd :v lt random 10]

end

Этап 2. “Управление полетом самолета”

После того как готовы программы предыдущего этапа, перейдем к управлению самолетом. Но для этого нужно сначала объяснить ребятам, что такое бегунок.

Бегунок — это особый объект в среде ЛогоМиры, который позволяет задавать переменные числовые величины. Значение величины можно изменять вручную с помощью специального рычажка или с помощью команды set. Имя бегунка используется для задания значения параметра команды. Например, создадим бегунок для задания значения скорости полета самолетика:

И подставим его имя в программу в качестве парамет­ра команды FD:

to полет :x :tp

ht

repeat 1000 [самолет :x :tp wait 0.5

clean fd скорость]

end

Кстати, значение бегунка может быть как положительным, так и отрицательным. Если задать значение датчика “скорость” от –5 до 5, то при отрицательных значениях самолетик будет летать задом наперед. Желательно показать эту возможность ребятам, для того чтобы навести их на мысль, как можно управлять движением самолета.

Пусть ребята сами создадут необходимые бегунки. Результат может быть таким:

to полет

ht

repeat 1000 [самолет длина толщина

wait 0.5 clean fd скорость]

end

Теперь можно перейти к программированию управления. Прежде всего нужно попросить ребят организовать повторение отрисовки самолета не с помощью команды REPEAT, а с помощью кнопки. Удалим команду REPEAT из программы “полет”, назначим ее имя как инструкцию кнопке и установим режим выполнения инструкции как многократный:

К этому моменту ребята знают все, что нужно для того, чтобы самим догадаться, как запрограммировать управление самолетом с помощью бегунка. Пусть они попробуют это сделать. А так выглядит один из вариантов программы:

to полет

ht

самолет длина толщина wait 0.5

clean rt штурвал fd скорость

end

Диапазон бегунка “штурвал” не нужно делать слишком большим, достаточно установить его от –3 до 3. Тогда при положительных значениях самолет будет поворачивать направо, при отрицательных — налево, а при значении 0 лететь прямо.

Этап 3. “Игра с самолетом”

Теперь, когда мы сделали штурвал, можно придумать игровой сценарий, в котором был бы задействован управляемый самолетик. Для этого можно предложить ребятам использовать организацию постоянной проверки цвета поля, на котором находится самолет, с помощью датчика colorunder. В зависимости от цвета поля самолет может вести себя так или иначе. Самый простой вариант такой игры — “Полет среди грозовых туч”. На экране нарисована грозовая туча. Если самолет залетает на нее, его начинает трясти (траектория движения становится другая) или он погибает.

Так как команда CLEAN стирает все, что нарисовано на экране, нам потребуется “заморозить” фон. Это делает команда FREEZEBG. А размораживает фон команда UNFREEZEBG.

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

Вот примеры сценариев, которые предлагали ребята:

“Воздушные гонки”. Рисуется замкнутая трасса (ластиком на фоне определенного цвета). Нужно провести самолет три круга по трассе, не вылетая за границы (фактически не касаясь фонового цвета). Каждый вылет за трассу дает штрафные очки, они подсчитываются с помощью переменной. Задача — набрать как можно меньше штрафных очков.

“Черные дыры”. На экране раскидано несколько небольших пятен определенного цвета. Попадая на такое пятно, самолет проваливается в “черную дыру”, то есть становится невидимым (поднимается перо и Черепаха делает прыжок, чтобы уйти с пятна на поле). Вылететь можно из другой дыры. Для этого человек должен энергично дергать бегунок поворота в надежде, что Черепаха случайно долетит до другого пятна. Тогда Черепаха снова выпрыгивает на поле, перо опускается и начинает рисовать самолет.

“Полет в грозу”. На экране нарисованы несколько больших грозовых туч и аэропорт (прямоугольник другого цвета). За каждое касание тучи у самолета уменьшается количество “жизней”, за пролет через аэропорт “жизни” восстанавливаются. Самолету необходимо продержаться в небе определенное время. Если к концу этого времени “жизни” остались, игрок победил.

Вот пример экрана такого игрового проекта и две процедуры из него:

to polet

pu fd скорость rt штурвал samolet

wait 0.5 clean

if colorunder = 104

[make "x :x + 1 bk 10 rt 180

if :x < 6

[announce ( SE [Вы налетели

на грозовую тучу] :x [–й раз])

]

if :x = 6

[announce ( SE [Вы налетели

на тучу уже] :x

[–й раз! Если вы еще раз на неё

налетите, то произойдет

катастрофа!])

]

]

if colorunder = 64

[announce [Вас приветствует

Шереметьево!]

fd 50 if :x > 0 [make "x :x — 1]

]

if :x = 7

[announce [Увы! Это конец!

Вы проиграли.] clean wait 10 stopall

]

polet

end

 

to полетели!

make "x 0

launch [polet]

launch [wait 10 * время_игры announce

[Вы выиграли! Поздравляю!] stopall ]

end

Не обязательно, чтобы все ребята сделали сложные проекты. Все зависит от их уровня и мотивированности. Желающим можно дополнительно рассказать о команде запуска параллельных процессов (LAUNCH) или о том, как управлять самолетиком не с помощью бегунка, а с помощью клавиатуры. >

Этап 4. “Управление самолетом с клавиатуры”

Мы устанавливали значение бегунка вручную с помощью рычажка, но это можно сделать и с помощью команды в программе. Тогда управление самолетом станет более удобным. В этом нам поможет команда SET.

SET позволяет изменять значения свойств самых разных объектов — бегунков, кнопок, черепах, листов, текстовых окон и т.д. Она записывается так:

set <имя объекта> <имя свойства>

<значение свойства>

Например: set "штурвал "значение 3

Нужно написать процедуру, которая будет ожидать нажатия клавиши на клавиатуре, определять ASCII-код полученного символа и, в зависимости от кода, менять значение бегунка “штурвал”. Выглядеть эта процедура может так:

to klav

make "p readchar make "z ascii :p

if :z = 37 [make "q штурвал — 1 if :q > –3

[set "штурвал "значение штурвал — 1]]

if :z = 39 [make "q штурвал + 1

if :q < 3

[set "штурвал "значение штурвал + 1]]

wait 0.1

klav

end

Здесь 37 — код клавиши , а 39 — код клавиши . Так мы будем управлять поворотами самолета.

Добавим вызов этой процедуры в процедуру полетели!.

Процедуру klav часть учеников можно попросить написать самостоятельно, а кому-то дать уже готовой и разобрать вместе с ними, что в ней происходит.

Работа над проектом позволяет организовать повторение и закрепление материала, а также мотивирует ребят на изучение новых команд и конструкций. Систему заданий можно сделать разноуровневой. Вместо самолета можно выбрать другие фигуры (вид сверху), например, корабль, танк, автомобиль. Управляемый самолетик вызывает восхищение у большинства детей, и они стремятся сделать его сами и придумать для него игру.

Св. А. Дьячкова

TopList