Programiranje u Skreču, praktikum za peti razred

Наредбе гранања

У програмима са простом линијском структуром свака наредба (блок) извршава се тачно једанпут. У претходном поглављу упознали смо се са управљачким блоковима који омогућавају да се наредбе које се у њих уметну извршавају више пута - блоковима за опис циклуса. Осим блокова који описују циклусе, и блокови који омогућавају гранање имају „уста” у која могу да се уложе други блокoви. У зависности од тога да ли је испуњен услов гранања, уложене наредбе ће се извршити или се неће извршити. На следећој слици приказана су два облика наредбе условног гранања.

_images/if_naredba.png

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

_images/struktura_if.png

Друга наредба условног гранања прескаче неке наредбе било да је услов гранања испуњен или не. Ако је услов гранања испуњен неће се извршити наредбе из НЕ гране, а ако услов није испуњен неће се извршити наредбе из ДА гране. Дакле, за разлику од простих линијских програма у којима се свака наредба извршава тачно једанпут, цикличних у којима постоје наредбе које се могу извршавати више пута (у оквиру тела циклуса), код програма са разгранатом структуром постоје наредбе које се неће извршити ниједном.

_images/struktura_ifelse.png

prouci Проучи следеће примере пројеката

Пример 1 - Пројекат Избор

У овом пројекту стари чаробњак треба да изабере помоћника.

_images/izbor2.png

Сам не може да одлучи кога, па тражи од корисника да му помогне тако што ће унети редни број кандидата за помоћника.

_images/izbor3.png

Ова вредност пореди се наредбом условног преласка са бројем кандидата. Ако је корисник унео број 1, чаробњак се окреће улево ка кандидату 1, а у супротном удесно ка кандидату 2.

_images/izbor4.png

Комплетна скрипта која описује понашање чаробњака приказана је на следећој слици.

_images/izbor5.png

Сличан овом пројекту и пројекат Одлучивање у којем дечак за број који унесе корисник каже да ли је паран или непаран.


Приликом инсталације офлајн едитора можете скинути и матријал за подршку - приручник и примере пројеката. Један од почетних пројеката је игра Понг. Ми ћемо у следећем примеру користити верзију Pong_Starter to Remix.


Пример 2 - Ремикс игре Понг

У нашој верзији игра Понг има 2 лика: Лоптицa и Рекет и 3 позадине: Почетак, Игра и Крај.

_images/pong1.png

По клику на зелену заставицу појављује се позадина Почетак која даје кратко упутство за коришћење програма. Кликом на дирку размак појављује се позадина Игра - празна позорница која на доњем делу целoм дужином има плаву линију. Лоптица почиње да се креће између ивица екрана одбијајући се о њих. Одбијање се постиже наредбом ako_si, а захваљујући почетном усмерењу од 45 o лоптица би се одбијала од све 4 ивице као у пројекту Мењање_ефекта да је играч не спречава да дође до доње ивице.

_images/pong2.png

Међутим играч помоћу стрелица лево и десно помера рекет хоризонтално и труди се да спречи да лоптица падне на подлогу и додирне плаву линију. Ако лопта додирне ту плаву линију, игра се завршава и појављује се позадина Крај са поруком да је игра завршена.

_images/pong3.png

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

Пример 3 - Пројекат Опасне_пахуље

Пројекат Опасне пахуље је једноставна игра у којој корисник покушава да спасе Снешка Белића од крупних опасних пахуља које непрестано падају. Корисник помоћу дирки са стрелицама на тастатури води Снешка лево-десно и покушава да избегне пахуље које са врха екрана падају различитом брзином и под различитим угловима. Ако пахуља додирне Снешка он се надује и деформише и игра је готова.

Ликови и позадина

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

Понашање пахуље

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

Пахуља треба да се појави при врху позорнице и да клизи до њеног дна. Следећи блок наредби описује њено кретање.

_images/pahulja_kretanje.png

Прва наредба поставља пахуљу на место чија се х координата генерише на случајан начин. Трећа наредба задаје тачку до које пахуља клизи између 0.5 и 3.5 секунди и нестаје.

Овај блок наредби уметнућемо у петљу која ће се понављати све док пахуља не додирне Снешка. Када га додирне игра се завршава.

_images/pahulja_skripta.png

Понашање Снешка

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

_images/snesko_2.png

Да би игра била атрактивнија, додаћемо и специјалне ефекте које можемо остварити блоковима из групе изглед. Као што смо видели у примеру 2 лекције Низање корака, наредба promeni_efekat може да промени лик на више начина.

Када пахуља додирне Снешка, ми ћемо мењати његову величину и применити ефекте рибље око и боја. Те промене ћемо поновити 5 пута уз малу паузу после сваке промене (сл. A). Да Снешко при поновном покретању програма не би био деформисан, на почетку ћемо уклонити све графичке ефекте и поставити величину на 100%. (сл. B).

_images/snesko_3.png

Пример 4 - Пројекат Лов

Овај пројекат је игра за два играча. Сваки од њих диркама са тастатуре води свог мачка у лов на миша који се појављује на случајном месту на екрану. Играч чији мачак први додирне миша добија поен. Када нека од мачака додирне миша он нестаје и појављује се на неком другом месту. Први играч води жуту мачку диркама са стрелицама, а други играч сиву мачку диркама W A S D.

Уводимо сложене услове и логичке операције.

Креирање позадине и ликова

У овом пројекту имамо три лика - Мачка 1, Мачка 2 и Миш и једну позадину. Позадину смо направили малом модификацијом позадине Hay field из Скречове библиотеке.

_images/lov_pozadina.png

Лик Мачка 1 настао је од лика Cat 2 из библиотеке ликова додавањем још једног костима, а лик Мачка 2 је настао умножавањем лика Мачка 1 којем смо затим променили боју. Трећи лик је преузет са интернета и има само један костим пошто у пројекту нема потребе да се анимира његово кретање.

_images/lov_likovi.png

Понашање лика Мачка 1

Прво смо написали скрипте придружене лику Мачка 1 и тестирали их, а затим умножили овај лик и минимално изменили придружене скрипте.

_images/lov_skripta1.png

На самом почетку лик се усмерава према мишу и довољно је да га играч води дирком ↑ до освајања првог поена. У даљем току игре неопходно је да сам усмерава мачка према мишу коришћењем дирки ← и → које окрећу лик за по 15 степени лево и десно. Евентуално може да користи и дирку ↓ за враћање лика уназад. За лик Мачкa 2 скрипте за вођење су исте, једино су дирке измењене. W води лик напред, S назад, а A и D окрећу лик улево и удесно по 15 степени. И скрипта за почетак рада је скоро иста, једина разлика је што други лик иде у леви доњи угао, односно шаље се у тачку са координатама (-190,-130).

Понашање лика Миш

На следећој слици приказана је скрипта придружена мишу. На самом почетку се миш поставља на случајно изабрану локацију. Затим се улази у бесконачно понављање следећих акција.

  1. Чека се да једна од мачака додирне миша
  2. Миш се сакрива и појављује на другој случајно изабраној локацији

(у оквиру петље миш може да се појави и при горњој и доњој ивици екрана јер је интервал за вредност координате у сада [-150, 150])

_images/lov_skripta2.png

Формирање сложеног услова

Услов у наредби cekaj_dok_ne је сложен од два услова: мачак 1 додирује миша или мачак 2 додирује миша.

Сложени услов се формира на следећи начин.

  1. Из групе операција бирамо одговарајућу операцију – у нашем случају логичку операцију или or.
  2. У празне шестоугле постављамо одговарајуће услове,
_images/slozen1.png
  1. На крају овај сложени услов постављамо у блок „чекај док не”.
_images/slozen2.png

Овај пример надоградићемо у следећем поглављу пошто се упознамо са појмом променљива. Сваки додир миша рачунаће ће се играчу који води мачку која га је дотакла као поен. То ће се евидентирати у скрипти за миша. Број поена оба играча моћи ће да се прати на екрану. Такође ћемо увести тајмер који прекида игру по истеку задатог времена. Победник је играч који по истеку времена има више поена.

pitaj Одговори на следећа питања

Питање 1

    Q-34: Да ли ће лик изговорити Здраво по извршењу наредбе условног преласка?

    _images/if01.png
  • да
  • не
  • Услов 1=1 увек је испуњен.

Питање 2

    Q-35: Да ли ће лик изговорити Здраво по извршењу наредбе условног преласка?

    _images/if02.png
  • да
  • Пошто је вредност израза 1=2 увек нетачна, неће се извршити наредба из да гране.
  • не

Питање 3

    Q-36: Који од одговора корисника ће омогућити извршавање наредбе у ДА грани?

    _images/if03.png
  • 5
  • Није 5<5
  • -5
  • Тачно.
  • 0
  • Тачно.
  • 10
  • Није 10<5.

Питање 4

    Q-37: Шта ће изговорити лик ако корисник на питање Да ли пада киша одговори са да?

    _images/if04.png
  • Понеси кишобран.
  • ништа неће изговорити
  • У том случају услов гранања је испуњен.

Питање 5

    Q-38: Шта ће изговорити лик по извршењу наредбе условног преласка?

    _images/if05.png
  • Услов је испуњен.
  • Услов није испуњен.
  • Пошто је вредност израза А=А увек тачна извршава се наредба из да гране.

Питање 6

    Q-39: Да ли ће се приказати лик по извршењу наредбе условног преласка?

    _images/if06.png
  • да
  • Пошто је вредност израза А=Б увек нетачна извршава се наредба из не гране.
  • не

Питање 7

    Q-40: Какав је резултат извршавања блокова наредби (А) и (В)?

    _images/if07.png
  • различит без обзира на позицију лика
  • У оба случаја је исти услов да се изговори "У центру си позорнице".
  • исти без обзира на позицију лика
  • различит ако је у различито од 0
  • Тада није испуњен услов да се изговори "У центру си позорнице" ни у једном од блокова (А) и (В).
  • различит ако је х различито од 0
  • Тада није испуњен услов да се изговори "У центру си позорнице" ни у једном од блокова (А) и (В).

Питање 8

    Q-41: Која од наредби условног преласка има исправан услов за тврдњу да су координате места лика (0,0), односно да се лик налази у центру позорнице? (Изабери све тачне одговоре)

    _images/if081.png
  • Експлицитно се утврђује да је х=0 и у=0.
  • То су координате неке од тачака на дијагонали координатног система, може бити (0,0), али не мора.
  • То су координате неке од тачака на х оси или у оси. Може бити и тачка њиховог пресека, али не мора.

Питање 9

    Q-42: У пројекту Одлучивање показано је како се операција мод користи за проверу да ли је број дељив са 2. Који од следећих услова омогућава да се провери да ли је унети број дељив са 6? (Изабери све тачне одговоре)

    _images/if101.png
  • Остатак при дељењу са 6 је нула.
  • Бројеви 2 и 3 задовољавају овај услов, а нису дељиви са 6.
  • Број 11 задовољава овај услов, а нијe дељив са 6.
  • Број је дељив са оба проста фактора броја 6.

pokusaj Покушај

Вежба 1

Када се од корисника очекује да унесе неки податак потребно је поставити питање које сугерише и форму одговора, на пример: „Унеси датум рођења (дд.мм.гггг)”. Формулиши како треба да гласе питања за унос:

а) Броја између 1 и 10

б) Броја између -1.0 и 2.25

в) Имена и презимена

г) Тежине

д) Висине

Вежба 2

У прогрaму за рачунање идеалне тежине од корисника се тражи да унесе своју тежину (у кг) и висину (у cm). Напиши делове програма који проверавају да ли је корисник унео коректан податак за тежину, нпр. из интервала [40,160] и висину, нпр. [140,210].

Вежба 3

Напиши шта треба да буду аргументи операције slucajan_broj да би се генерисали бројеви из скупа:

а) {0, 1}

б) {0, 1, 2, 3, … , 10}

в) {–2, 0, 2, 4, 6, 8}

г) {0, 10, 20, 30, … , 100}

д) {0, 0.1, 0.15, 0.26, 0.38, … , 1.0}

Провери своје одговоре тако што ћеш за сваки пример у циклусу који се понавља 5 пута тестирати шта одговарајућа операција враћа.

Упутство:

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

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

_images/vezba6_3.png

Вежба 4

Напиши наредбу условног преласка са сложеним условом еквивалентну следећим композицијама наредби условног преласка:

_images/vezba6_4.png

Провери своје одговоре тако што ћеш тестирати своје одговоре у Скреч окружењу.

Вежба 5

Креирај минипројекат Већи у коме лик тражи од корисника да унесе број између 1 и 100. Затим сам замисли (коришћењем операције случајан број) број од 1 до 100 и саопштава кориснику чији број је већи. Дијалог треба да се покрене кликом на лик.

Упутство:

_images/vezba6_5.png

bug Исправи грешке

Грешка 1

Питање:Ученик је желео да направи скрипту која омогућава да се кретањем лика управља помоћу дирки са стрелицама. Написао је програм приказан на слици лево. Онда је приметио да се 4 пута понавља наредба idi_koraka, па је преправио скрипту у прогрaм приказан на слици десно. Међутим, његовим извршавањем није постигао жељено понашање лика. У чему је грешка?
_images/greska6_1.png

Одговор:

У преправљеном програму наредба idi_koraka ће се стално извршавати и лик ће ићи у смеру који је последњи пут био изабран, без обзира да ли је притиснута или не дирка са тим смером.

Грешка 2

Питање:Ученик је направио пројекат Лов ТАЧНО онако како је описано у примеру 5. Међутим, када је покренуо пројекат лик Мачка 2 није реаговао на дирке W A S D. При том су се ликови Мачка 1 и Миш понашали баш онако како то скрипте које описују њихово понашање захтевају. У чему је грешка?

Одговор:

Проблем је у језику. Ако је изабран српски језик - ћирилићно писмо, рачунар притисак на дирку W тумачи као да је притиснуто слово Њ. Програм ће нормално радити ако се језик пребаци на српски са латиничним писмом или енглески језик.

Грешка 3

Питање:Ученик је желео да измени понашање мачка када дотакне миша у пројекту Лов тако да мачак пошто дотакне миша почене да иде у круг (360 пута иде 1 корак и окрене се за један степен). Мачку је придружио скрипте приказане на следећој слици, али када је тестирао пројекат видео је да се мачак после додира миша не окреће. У чему је грешка?
_images/greska6_3.png

Одговор:

Услов се проверава само непосредно по клику на зелену заставицу. Потребно је да се проверава стално, значи условну наредбу треба поставити у бесконачан циклус.

Грешка 4

Питање:Ученик је желео да измени понашање кандидата за избор помоћника чаробњака у пројекту „Избор”. Када чаробњак изабере девојчицу за помоћника, дечак треба да замисли: „Зашто си изабрао њу?”. Зато је дечаку придружио следећу скрипту. Али, дечак је то замислио на самом почетку, још пре но што је чаробњак извршио избор. Како да се ускладе акције чаробњака и дечака?
_images/greska6_4.png

Одговор:

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

_images/resenje6_4.png

Грешка 5

Питање:Ученик је желео да његов лик који се води диркама стрелица лево и стрелица десно упоредо са кретањем изговара и реч „лево” док се налази на левој половини позорнице, а реч „десно” када је на десној половини. Придружио је лику следеће скрипте, али лик уопште није мењао реч коју би изговорио на почетку, без обзира на то што је прелазио на другу страну позорнице. Шта треба променити у скриптама?
_images/greska6_5.png

Одговор:

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

_images/resenje6_5.png

knjiga Шта смо научили

Појмови: разграната линијска структура, сложени услов.

Наредбе: upravljanje - ako_onda, ako_onda_inace, cekaj_dok_ne.

project Уради неки од следећих пројеката

Пројекти игара које предлажемо да урадиш представљени су у књизи Coding Games in Scratch аутора Jоn Woodcock-a.

Како је ова књига наишла на веома леп пријем код публике, на Скречовом сајту можеш пронаћи мноштво ремикса ових игара.

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

Верујемо да ће ти програмирање ових игара омогућити да уживаш док усвајаш знање неопходно за њихово решавање.

Пројекат 1 - Игра Звездоловац

StarHunter

Ловац на звезде је брзи мачак који лови под водом и тако проналази своје благо. Игра је такмичарска (региструје се резултат). Циљ ове игре је да се прикупи што више звезда. Мачак мора да пази на смртоносне хоботнице. Да би успео, мора да се брзо креће.

Ликови:

  • Звезде. Појављују се једна по једна на случајним местима. Додирнути звезду значи добити поен.
  • Хоботнице. Патролирају морем, пливају спорије од мачка, али ако га додирну игра је готова.
  • Мачак. Помера се по екрану пратећи показивач миша.

Пројекат 2 - Игра Потрага за сиром

Cheese Chase

У овој лавиринт игри је основно да брзо размишљамо и реагујемо.

Ликови:

  • Мими је гладан миш који се заглавио у лавиринту. Треба му помоћи да пронађе сир, али и избегне зле бубе. Треба да пази и на духове лавиринта који га прогањају.
  • Бубе јурцају дуж ивица и насумице се окрећу кад ударе у зид.
  • Духови могу да пролазе кроз зидове, појављују се без упозорења, а онда нестану.

Пројекат 3 - Игра Рат кругова

Circle Wars

Игра користи клонове - лик може да се умножава.

Мишем померамо плави круг по екрану и прикупљамо бледо зелене кругове. При том треба да избегавамо црвене који нас јуре. Јарко зелени и јарко црвени кругови, док лутају по екрану, избацују клонове око себе. Скор од 20 бодова је за победу, а ако је мањи од -20 бодова губи се игра.

Ликови:

  • Играч. Играч је плави круг и ако не реагује брзо непријатељски кругови ће га ускоро затрпати.
  • Пријатељи. Пријатељски кругови су зелени. Када их додирнеш добијаш поен и круг нестаје са праском.
  • Непријатељи. Треба се клонити црвених непријатеља. Ако те неки од њих додирне, нестаје уз прасак чинела, али ти губиш 3 поена.

Пројекат 4 - Игра Мајмун скакач

JumpyMonkey

У стварном свету постоје закони које једноставно не можеш избећи. На пример, закон гравитације. Када нешто скочи мора и да падне. JumpyMonkey показује како да додаш гравитацију у своју игру.

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

Ликови:

  • Лансирна рампа. Сврха рампе је да усмери мајмуна помоћу леве и десне стрелице.
  • Мајмун. Брзину мајмуна бираш стрелицама горе и доле.
  • Банане. Ако мајмун додирне било који део банане, појешће их.

Игра се наставља док мајмун не поједе све банане.