Циклуси¶
У претходном поглављу већ смо користили наредбе понављања у примерима за цртање линија и геометријских фигура, како бисмо са мање писања постигли да ликови који се крећу са спуштеном оловком нацртају оно што смо желели. На пример, уместо да испишемо 400 наредби којима бисмо нацртали тачкасту линију дужине 400 пиксела, ми смо исписали свега пет: четири које понављају узорак и пету која каже колико пута треба поновити узорак.
У овом поглављу наредбе понављања ћемо повезати са наредбама кретања и изгледа како бисмо направили различите анимације. Направићемо класификацују блокова који представљају наредбе у Скречу, а упознаћемо и функцијске блокове чија је намена да чувају вредности.
Уз то ћемо упознати наредбу која омогућава уношење улазних података и блокове који чувају вредности логичких израза.
Најједноставнији пример наредби понављања је наредба за опис тзв. „бесконачног циклуса”. Наредбе које се понављају чине тело циклуса. Њихово извршавање може се зауставити само прекидањем програма.

На пример, ако желимо да постигнемо илузију да мачак хода, балерина игра или лептир лети, довољно је да им придружите скрипту у којој се у бесконачном циклусу понављају наредбе и
.
Разуме се, лик треба да има бар два костима и чекање треба да буде кратко, на пример 2 десета дела секунде (0.2). Наредба чекања између приказа различитих костима лика неопходна је да бисмо приметили промене у изгледу. Наиме, људско око није у стању да региструје тако брзе промене као оне које компјутер обавља. Зато наредбама чекања „кочимо” приказ следећег изгледа, док наше око не прихвати претходну слику.
У примерима цртања из претходног поглавља користили смо тзв. „бројачке циклусе”. То су понављања код којих се унапред зна колико пута ће се извршити тело циклуса.

Бројачки циклуси коришћени су и у примерима Исцртавање_степеница, Корњача_црта и Цртање_круга.
У Скречу постоји наредба за опис циклуса чији број понављања није унапред познат, већ зависи од тога да ли је испуњен услов за излазак из циклуса.

Услов да ли ће се прескочити наредбе тела циклуса (услов за излазак) проверава се на почетку циклуса, па се може десити да се циклус не изврши ни ако је тај услов испуњен при првој провери. Такође се може десити да се циклус извршава бесконачно ако се услов за излазак из циклуса никада не испуни.
Проучи следеће примере пројеката¶
Пример 1 - Пројекат Шетња¶
У овом пројекту лику мачка ћемо придружити скрипту која анимира његово кретање бесконачним понављањем промене његових костима.

Уз промену костима додаћемо и наредбе кретања тако да непрестано иде од једног до другог краја екрана. То можемо постићи уметањем наредбе
у блок бесконачног понављања. Када дође до десног краја позорнице мачак треба да се окрене и иде налево. То постижемо наредбом
.
Скрипту која описује ово кретање, као и она која омогућава непрестано мењање костима покреће исти догађај - клик на зелену заставицу.

Покрени пројект кликом на зелену заставицу и провери шта се дешава.
Оно што смета је што приликом кретања улево мачак иде наглавчке. То можемо поправити на два начина:
постављањем
лево-десно у информацијама о текућем лику,
укључивањем наредбе
у скрипту лика.
Ми ћемо изабрати други начин и поставићемо блок непосредно иза блока клик на зелену заставицу, пре наредбе бесконачног понављања.
Остаје још да размотримо да ли је неопходно да имамо две скрипте које се паралелно извршавају када се кликне на зелену заставицу или да све акције поставимо у једну бесконачну петљу.
Ако уместо претходне две скрипте мачку придружимо следећу примећујемо да се мачак спорије креће, што у нашем примеру не смета.

Пример 2 - Пројекат Остављам свој печат¶
У овом пројекту користићемо бројачки циклус у оквиру кога ће лик ићи 50 корака, окренути се за 30 степени и затим оставити свој печат.
У Скречу наиме, поред цртања оловком, постоји још један начин за цртање – остављањем печата. Томе служи наредба .
Тело циклуса ћемо поновити 12 пута, тако да ће лик обићи 12*30=360 степени, односно пун круг.
Започни нови пројекат и за лик који црта изабери лик бубамаре Ladybug 1 из библиотеке ликова. Придружи јој скрипту са следеће слике.

Експериментиши са смањивањем лика и повећањем броја печата који оставља, променом лика који оставља печат и променом правца кретања.
У следећем пројекту поред бесконачних и бројачких, користићемо и циклусе чији број
извршавања није унапред познат, већ зависи од тога да ли је услов за излазак из
циклуса испуњен.
Пример 3 - Пројекат Ловац на духове¶
Сценарио пројекта
У овом пројекту учествују четири лика - једна вештица и три духа. Вештица крстари својом уклетом шумом летећи при тлу лево-десно између рубова позорнице и не дозвољава никоме да туда пролази. То не знају три духа који лебде и окрећу се при врху дрвећа. Када спази неког од њих, вештица полети навише и уништи духа, па наставља своје крстарење све док не уништи сва три духа.
Понашање вештице
После постављања почетних вредности вештица 3 пута понавља следеће:
лети лево-десно све док се не притисне дирка размак,
затим врисне па полети навише 150 корака тако што 10 пута понови померање навише 15 корака,
сачека 0.5 секунди и врати се на почетну позицију.
Понављање кретања лево-десно све док се не притисне дирка размак остварује се следећом наредбом за опис циклуса.

У овој наредби услов понављања поставља се у поље за услов. Да бисмо разјаснили шта тачно може да се постави у поље за услов наредбе, осврнимо се на типове блокова који се користе у Скречу.

Командни и управљачки блокови одговарају наредбама програмског језика. Неки од њих имају поља у која се може поставити вредност - константа или променљива.
Функцијски блокови враћају вредности. Они не могу да стоје сами у програму, већ се умећу у поља наредби које примају вредности.
Вредности могу бити различитих типова, на пример бројне, логичке, стринг …
Засад нас интересују логичке вредности које се могу добити као резултати логичких израза које у Скречу репрезентује шестоугаони функцијски блок. Логички изрази могу имати само 2 вредности: тачно (true) и нетачно (false).

У поље блока за понављање са условом поставља се логичка вредност. Све док њена вредност није „тачно” понављају се наредбе циклуса. Кад добије вредност тачно остварен је услов за излазак из циклуса и извршава се наредба која следи за наредбом понављања.
У нашем примеру услов за излазак из циклуса је да се притисне дирка размак.
Комплетна скрипта која описује понашање вештице приказана је на следећој слици.

Понашање духова
Сва три духа понашају се исто. Једино се разликују по месту на коме се налазе и брзини окретања. То је и разумљиво јер смо прво програмирали понашање једног, а онда га умножили.
Напомена. У Скречу је могуће умножити (клонирати) лик и програмским путем. У ту сврху се користи наредба .
Њихово понашање описују следеће две скрипте.

Видимо да се у једној од њих у оквиру бесконачног циклуса појављује и циклус који се понавља све док га не додирне вештица, што је услов да се пређе на наредбе које сакривају лик.
Унапређење пројекта Ловац на духове
Једно унапређење пројекта је да вештици уместо циклуса који се понавља 3 пута и тако омогућава да улови 3 духа поставимо бесконачни циклус, тако да може да лови духове све док то играчу не досади. Међутим, то подразумева да се у игри појављује колико год желимо духова. То можемо постићи тако што духа кога је додирнула вештица и који је нестао поново прикажемо. Ако пре тог још на случајан начин изаберемо позицију на којој ће се дух поново појавити, лов ће постати још изазовнији.
Разуме се, играчи би волели да имју евиденцију колико је духова уловила њихова вештица, да добијају награде када освоје одређени број поена и слично, али таква унапређења можемо уводити тек када научимо како се користе променљиве.
У примеру 2 претходног поглавља показали смо како се цртају правилне геометријске фигуре.
Изменићемо тај пројекат тако да црта једну од њих коју зада корисник улазним податком.
Пример 4 - Пројекат Геометријске_фигуре2¶
У овом пројекту се, као и у пројекту Геометријске фигуре 1, по клику на зелену заставицу постављају праметри цртања. Затим се од корисника тражи да унесе број страница многугла који ђе се цртати.
Наредба за уношење податка налази се у групи Осећаји

По извршењу ове наредбе Скреч памти шта је корисник унео у простору који се зове .
Очекује се да корисник унесе број између 3 и 6 јер црта орнаменте састављене од троуглова, четвороуглова, петоуглова или шестоуглова. Међутим, ако корисник унесе број изван овог опсега, програм неће радити како треба, па то треба спречити.
Један од начина да се контролишу улазни подаци је да се понавља захтев кориснику све док не унесе број из задатог интервала.

Пошто се добије коректан улазни податак, он се користи за израчунавање броја понављања и угла окретања, тако да сва четири многоугла можемо да цртамо истим наредбама.

И за следећи пројекат користићемо пример 2 из претходног пројекта. У њему ћемо показати
како концентричном композицијом бројачких циклуса (коришћењем циклуса у циклусу) можемо
да цртамо ефектне слике које се добијају понављањем узорка. Узорак можемо понављати после
извесног броја корака - тако добијамо тзв. бордуре - украсне ивице.
Узорке можемо понављати и после заокрета за неки угао или после комбинације оба померања.
Пример 5 - Пројекат Орнаменти¶
Видели смо да правилан петоугао можемо нацртати следећим низом наредби.

Ако овај бројачки циклус поновимо више пута, добићемо орнамент - сложенију слику састављену од петоуглова. На пример, ако нацртамо 20 оваквих петоуглова крећући се од левог до десног руба позорнице, добићемо следећу бордуру.

Ако пак понављамо цртање петоуглова мењајући усмерење лика пред цртање сваког од њих тако да он обрне цео круг, добићемо следећи орнамент.

Ако између свака два цртања лик и промени угао и иде по 10 корака, добијамо нешто измењен орнамент.

А ако поновимо други орнамент 4 пута идићи од левог ка десном рубу екрана, добијамо следећу слику.

Пројекат омогућава да се црта сваки од приказаних орнамената тако што се кликне на једну од дирки 1 - 4 тастатуре. Осим ове 4 скрипте постоји и скрипта коју покреће клик на зелену заставицу и скрипта која се покреће поруком упутство. Поруку упутство разглашава свака скрипта на крају свог рада. Кад лик прими ову поруку приказује се при врху екрана и даје упутство како се покреће цртање орнамената.
Одговори на следећа питања¶
Питање 1¶
Питање 2¶
Питање 3¶
Питање 4¶
Питање 5¶
Питање 7¶
Q-34: Колико пута ће се извршити тело циклуса (А), ако корисник на питања уноси одговоре следећим редом: 1, 2, 3, 0.
Питање 8¶

Q-35: Којим словом је обележен део програма који ће извршити исту акцију као yоквирен низ наредби?
Питање 9¶

Q-36: Којим словом је обележен услов који ће омогућити да улазна провера податка буде коректна?
Исправи грешке¶
Грешка 1¶
- Питање
Ученик је желео да унапреди пројекат Ловац на духове. Духовима је додао следећу скрипту, али, духови су се поново појавили само једанпут. У чему је грешка?

Грешка 2¶
- Питање
Ученик је желео да унапреди пројекат Ловац на духове додавањем музике. Изабрао је звук dance slow mo који је поставио у бесконачни циклус. Желео је да се врисак вештице чује у случајним временским тренуцима, па је ова два звука искомбиновао на следећи начин. Али уместо вриска за време музике, прво се чула музика, па онда врисак. У чему је грешка?

Грешка 3¶
- Питање
Ученик је желео да се његов лик корача између леве и десне ивице позорнице. Зато је у бесконачан циклус унео стално мењање костима и корачање по 10 корака док не дође до руба, када се окреће. Међутим, није му се свидело што лик ка левој ивици позорнице корача наглавачке. Шта треба да уради да поправи ову грешку?

Грешка 4¶
- Питање
Ученик је желео да његов лик лептир, који има два костима - са подигнутим и спуштеним крилима, стално клизи машући крилима између тачака чије се координате бирају на случајан начин. Али његов програм то није омогућио. Лептир је од једне до друге тачке клизио или са спуштеним или са подигнутим крилима. У чему је грешка?

Грешка 5¶
- Питање
Ученик је желео да његов лик Cassy Dance игра уз музику dance around која траје око 15 секунди. Зато је промену костима са задршком од 0.3 секунди ставио у циклус који се понавља 50 пута. Међутим, прво се чула музика, а девојка је почела да игра тек пошто се музика завршила. У чему је грешка?

Шта смо научили¶
Појмови: циклус - бесконачни, бројачки, са условом; тело циклуса, блокови - командни, функцијски, почетни, управљачки; логички израз.
Наредбе: -
;
-
;
-
;
-
,
;
Функцијски блокови: ,
,
,
,
,
,
,
,
.
Уради неки од следећих пројеката¶
Пројекат 1 - Гладна ајкула¶
Направи пројекат сличан примеру Ловац на духове у коме ће главни лик - Ајкула ловити рибе. Све ликове (ајкулу и 3 рибе) и позадину учитај из библиотека ликова и позадина. Ајкула (Shark) има три костима, па њена реакција када је притиском на дирку размак пошаљеш да поједе плен, може да буде ефектнија од реакције вештице (која је само вриштала када би се устремила на духа). Нека се у пројекту бесконачно понавља крстарење ајкуле лево десно, а рибе које су поједене нека се поново појављују после 3-5 секунди. Различито трајање паузе између два појављивања риба и различито место на коме ће се појављивати обезбеди коришћењем операције случајан број.
Пројекат 2 - Троугаони орнаменти¶
Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од троуглова.
Пројекат 3 - Ротирајући квадрати¶
Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од квадрата.
Пројекат 4 - Шестоугаони орнаменти¶
Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од шестоуглова.
Пројекат 5 - Кругови¶
Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од кругова различитих величина.