logo
Моделирование алгоритмических исполнителей

2.1.1 Проект в ПервоЛого «Смена Дня и Ночи»

Данный проект является демонстрацией возможностей приложения среды ЛогоМиры ПервоЛого. Чтобы запустить демонстрацию нужно мышкой выделить солнце и луну и щелкнуть по любой из этих черепашек. Сейчас на экране мы видим день, а как только солнце сядет, наступит ночь. И картинка изменится.

Рис.3. День Рис.4. Ночь

Для создания этого проекта прежде всего необходимо создать новые формы для черепашек. Нужно нарисовать небо и землю днем и ночью. Итак, чтобы нарисовать землю и небо днем и ночью, нужно в свободной клетке Поля Форм щелкнуть правой кнопкой мыши. Появится окно редактирования. При помощи инструментов Рисовалки создаются эти объекты.

Рис.5. Поле форм

После создания объектов, на форму помещаются четыре черепашки и «одеваются » в следующем порядке: дневное небо, солнце, луна и дневная земля. Черепашку, которая будет луной нужно повернуть на 180 градусов, чтобы она смотрела вниз. Совмещаем рисунок и должно получиться следующее:

Рис.6. Лист проекта

Теперь, чтобы солнце двигалось по кругу, необходимо задать ему следующую команду: 10 шагов, поворот на 13 градусов и пауза 0.3 сек. В окне команд для солнца нужно задать эту цепочку действий и щелкнув на стрелке, задать многократное повторение этих действий. Чтобы посмотреть что получилось, надо щелкнуть мышкой на солнышко. Оно всходит и заходит, но земля и небо остаются дневными. Это можно исправить с помощью светофора. Для этого надо вызвать окно обучения для солнышка, щелкнуть на закладку с двумя черепашками и выбирать землю, щелкнув на ней мышкой. Теперь на поле команд необходимо выбрать Светофор и установить фиолетовый цвет. Также необходимо научить землю и небо реагировать на изменение сигнала светофора. Для этого надо открыть окно обучения для земли, щелкнув Ключом. Выбирать закладку с светофором и установить фиолетовый цвет и ночную Землю. Точно также учим реагировать на изменение сигнала светофора небо. На данный момент, когда солнышко зашло, Земля и Небо стали ночными, но когда оно вышло, темнота осталась. Чтобы это исправить надо открыть окно обучения для солнца, щелкнув ключом, выбирать закладку с двумя черепашками. Установить дневное небо. В закладке Светофор необходимо установить значок светофора с оранжевым цветом. Теперь землю и небо необходимо обучить реагировать на оранжевый сигнал светофора. Для этого надо вызвать окно обучения для Земли, на закладке Светофор выбрать оранжевый сигнал. Установить дневную форму земли. Закрыть окно обучения. Точно также учим реагировать небо на изменение сигнала светофора. Осталось задать Луне команду движения по кругу. Аналогично солнцу, в окне обучения Луны необходимо записать команду: 10 шагов, поворот на 13 градусов и пауза 0.3 сек.

Приведенный ниже листинг программы генерируется автоматически. Ученики создают команды лишь с помощью мыши.

Листинг программы

это шагай :n

fd :n

my-cmt3

color-react

конец

это removeitem :item :list

let [res []]

dolist [i :list]

[if not equal? :item :i [let [res lput :i :res]]]

op :res

конец

это clr-last-meet :t1 :t2

ask :t1 [if member? :t2 <l-meet> [установи_<l-meet> removeitem :t2 <l-meet>]]

ask :t2 [if member? :t1 <l-meet> [установи_<l-meet> removeitem :t1 <l-meet>]]

конец

это set-last-meet :t1 :t2

ask :t1 [установи_<l-meet> fput :t2 <l-meet>]

ask :t2 [установи_<l-meet> fput :t1 <l-meet>]

конец

это get-some :t1 :t2 :what

if equal? :what "can-meet

[

if equal? :t1 :t2 [op "нет]

dolist [i ask :t1 [<my-meet>]] [if equal? :t2 first :i [op "да]]

dolist [i ask :t2 [<my-meet>]] [if equal? :t1 first :i [op "да]]

op "нет

]

if equal? :what "last-meet

[

if equal? :t1 :t2 [op "нет]

let [

lm1 ask :t1 [<l-meet>]

lm2 ask :t2 [<l-meet>]

t1t2 member? :t2 :lm1

t2t1 member? :t1 :lm2]

op or :t1t2 :t2t1

]

if equal? :what "comm

[

if equal? :t1 :t2 [op [[][]]]

let[com1 []

com2 []

m1 ask :t1 [<my-meet>]

m2 ask :t2 [<my-meet>]

]

dolist [i :m1] [if equal? :t2 first :i [let [com1 last :i]]]

dolist [i :m2] [if equal? :t1 first :i [let [com2 last :i]]]

op list :com1 :com2

]

конец

это find-page :tur

dolist [i pagelist]

[dolist [j get :i "черепашки]

[

if equal? :tur :j [op :i]]]

конец

это my-cmt3

let[tm who

page find-page :tm]

dolist [i get :page "черепашки]

[

if get-some :tm :i "can-meet

[ ifelse touching? :tm :i

[

if not get-some :tm :i "last-meet

[ let [cod get-some :tm :i "comm]

if not empty? first :cod

[launch [ask :tm [run first :cod]]]

if not empty? last :cod

[launch [ask :i [run last :cod]]]

]

set-last-meet :tm :i

]

[ clr-last-meet :tm :i ]

]

]

конец

это get-table-color :color

if :color = 9 [op 1]

if :color = 0 [op 9]

if :color < 70 [op 2 + int (:color / 10)]

op 3 + int (:color / 10)

конец

это color-react

let [pl get-table-color colorunder]

if not empty? item :pl <c-list> [

if not :pl = <l-color> [run item :pl <c-list>]

]

установи_<l-color> :pl

конец

это светофор :n

if :n < 1 [stop]

if :n > 6 [stop]

dolist [i get first pagelist "черепашки ]

[if not empty? item :n ask :i [<traf-list>] [

launch [ask :i [run item :n <traf-list>]]]]

конец

это наугад :n

let[zn 1]

if less? :n 0 [let [zn -1]]

let [n abs :n]

let [res product :zn random sum :n 1]

op :res

конец

это перо :l-com

ifelse equal? item 3 :l-com "true [let [p_col random 255]]

[let [p_col item 2 :l-com ]]

setpensize item 1 :l-com

setc :p_col

конец

это пусто

конец