Садржај
1. Робот Карел - линијски програми и бројачка петља
2. Робот Карел - условна петља и гранање
3. Робот Карел - задаци за вежбање
4. Корњача графика - линијски програми и петље
5. Корњача графика - гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - задаци за вежбање
9. Израчунавања - коришћење и дефинисање функција
10. Израчунавања - задаци за вежбање
13. Контрола тока - вежбање
17. Програмирање 2Д графике - Увод у Pygame

26.1. Анимације - задаци

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

Насумично цртање кругова

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

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

    Q-86: Које променљиве одређују стање анимације?

  • Координата x центра лоптице.
  • Тачно.
  • Брзина лоптице.
  • Покушај поново.
  • Координата y центра лоптице.
  • Тачно.
  • Боја лоптице.
  • Тачно.
  • Број лоптица у прозору.
  • Покушај поново.
  • Дакле, тренутно стање сцене одређено је координатама центра x и y, полупречником r и бојом круга boja и њих ћемо представити глобалним променљивама (при чему се полупречник неће мењати).

Размисли сада шта је задатак функције crtaj.

    Q-87: Шта функција crtaj треба да уради?

  • Да насумично одреди положај лоптице тако што ће одредити вредности променљивих ``x`` и ``y``.
  • Покушај поново.
  • Да пре цртања обоји позадину у бело, како би се обрисао претходни цртеж.
  • Тачно.
  • Да нацрта круг са центром у тачки одређеној координатама ``x`` и ``y``.
  • Тачно.
  • Да обоји позадину прозора у боју ``boja``.
  • Покушај поново.
  • Да помери лоптицу један пиксел удесно увећавајући вредност променљиве ``x``.
  • Покушај поново.
  • Дакле, функција crtaj ће бојити позадину у бело (како би се обрисао претходни круг) и цртаће круг на основу тренутних вредности глобалних променљивих.

Размисли сада шта је задатак функције novi_frejm.

    Q-88: Шта функција novi_frejm треба да уради?

  • Да помери лоптицу један пиксел удесно увећавајући вредност променљиве ``x``.
  • Покушај поново.
  • Да увећа полупречник лоптице ``r`` за 1.
  • Покушај поново.
  • Да нацрта круг са центром у тачки одређеној координатама ``x`` и ``y``.
  • Покушај поново.
  • Да на насумичан начин одреди нову вредност променљиве ``boja``.
  • Tачно.
  • Да насумично одреди положај лоптице тако што ће одредити вредности променљивих ``x`` и ``y``.
  • Тачно.
  • Дакле, функција novi_frejm ће насумично одредити боју новог круга и одредиће x и y координате центра, тако да круг не испадне ван екрана. То ће важити ако x координата буде у интервалу \([r, sirina-r]\), а y координата буде у интервалу \([r, visina-r]\).

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

Срце које куца

Напиши програм који приказује анимацију срца које куца. Срце можеш приказати коришћењем слике srce.png.

../_images/srce.png
  • Једини податак који се мења од фрејма до фрејма је то да ли треба или не треба приказати срце. Можемо увести логичку променљиву treba_crtati.

  • У функцији crtaj слику ћемо приказивати само ако променљива treba_crtati има вредност тачно (тј. True).

  • У функцији novi_frejm мењаћемо вредност променљиве treba_crtati. Ако јој је тренутно вредност True, треба да се промени у False, а ако јој је тренутно вредност False, тада треба да се промени у True. Најлакши начин да се то уради је да текућу вредност негирамо помоћу оператора not (наравно, можемо употребити и гранање).

Покушај да на основу овога допуниш започети програмски кôд.

Смајлић и тужић

Микица често мења расположење. Час је срећна, час је тужна. Напиши програм који приказује слике смајлића и тужића које се смењују. Можеш употребити слике smajlic.png и tuzic.png.

../_images/smajlic.png ../_images/tuzic.png

Овај задатак је поново веома сличан претходном.

  • Логичка променљива smajlic ће одређивати стање програма.

  • Ако је у функцији crtaj вредност те променљиве True, приказаћемо слику смајлића, а ако је вредност False, приказаћемо слику тужића.

  • У функцији novi_frejm негираћемо вредност променљиве smajlic.

Покушај да на основу овога потпуно самостално напишеш програм. Ако не успеш, онда потражи помоћ и допуни започети програмски кôд.

Сијалице

Напиши програм који приказује дисплеј на коме је поређано 10 сијалица тако да се наизменично укључује једна по једна.

  • Стање програма ће у потпуности бити одређено вредношћу променљиве редним бројем сијалице која је укључена.

  • У функцији crtaj исцртаваћемо само укључену сијалицу у облику белог круга. Пречник сваке сијалице ћемо одредити тако што ћемо ширину екрана поделити редним бројем сијалице. Координата x центра те сијалице биће одређена редним бројем укључене сијалице (центар сијалице 0 налази се на растојању r од леве ивице екрана, центар сијалице 1 на растојању r+2r, центар сијалице 2 на растојању r+4r и тако даље).

  • У функцији novi_frejm увећаваћемо редни број укључене сијалице, при чему ћемо га враћати на нулу када достигне укупан број сијалица.

Покушај да на основу претходне дискусије потпуно самостално решиш задатак. Ако не успеш, потражи помоћ, па допуни започети кôд.

Цртани филм

Напиши програм који приказује цртани филм тако што наизменично приказује пет слика на екрану на којима је приказан дечак који се шета у различитим положајима. Слике носе називе setanje1.png до setanje5.png.

../_images/setanje1.png ../_images/setanje2.png ../_images/setanje3.png ../_images/setanje4.png ../_images/setanje5.png

Овај задатак личи на задатак у ком смо током анимације циклично мењали боје позадине, једино што ћемо уместо листе која садржи називе боја чувати листу која садржи слике које чине цртани филм. Слике је пожељно учитати на почетку програма, пре почетка анимације (не заборави, слику можеш учитати помоћу функције pg.image.load).

  • Стање анимације биће одређено искључиво редним бројем слике која се тренутно приказује. Променљива slika представљаће позицију слике у листи која се приказује у текућем фрејму.

  • Функција crtaj има задатак само да обрише екран (бојећи позадину у бело) и да затим прикаже слику из листе slike која се налази на позицији одређеној променљивом slika (сетићеш се да слику приказујемо помоћу функције prozor.blit).

  • Функција novi_frejm ће имати задатак да увећа вредност променљиве slika, тако да се вредност врати на нулу када превазиђе последњу вредност у листи.

На основу претходне дискусије допуни наредни програм.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+