Prijavi problem


Obeleži sve katergorije koje odgovaraju problemu

Jos detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link
Na žalost nismo trenutno u mogućnosti da obradimo Vaš zahtev.
Molimo Vas da pokušate kasnije.

Programiranje grafike pomoću Pygame, priručnik za sedmi razred

Кретање објеката по екрану

Аутомобил који се креће

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

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

Централни задатак је цртање аутомобила. Положај аутомобила биће одређен познавањем координата његовог центра (то можемо чувати коришћењем променљивих sredina_x и sredina_y). Поред тога, можемо чувати и променљиве којима су представљене димензије аутомобила. Аутомобил се исцртава помоћу два правоугаоника (горњег и доњег дела каросерије аутомобила) и два круга (точкова аутомобила). Израчунавање њихових координата врши се у односу на познати положај средине аутомобила, слично као што смо то радили у неколико задатака приказаних у поглављу о цртању.

Померање аутомобила вршићемо само по оси x. У сваком кораку петље координату sredina_x ћемо увећавати за одговарајући померај dx. Потребно је још проверити да ли је аутомобил излетео иза десне ивице екрана и ако јесте, она га пребацити на крајњи леви део екрана (иза леве ивице прозора). На основу дужине и координата средине аутомобила можемо израчунати координате његовог левог краја и проверити да ли је координата x постала већа од ширине екрана. Ако јесте, онда ћемо координату sredina_x поставити тако да десни крај аутомобила буде тачно на левој ивици прозора.

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

Одбијање лоптице

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

У сваком тренутку је потребно да знамо положај лоптице на екрану. То је најједноставније остварити тако што ћемо у променљивама x и y памтити координате центра лоптице (на почетку их можемо иницијализовати на половину ширине и висине, тако да се лотпица налази у центру екрана). Полупречник лоптице ћемо представити променљивом r.

Кретање лоптице се остварује тако што јој се у правилним временским интервалима мењају x и y координата. Пошто претпостављамо да је брзина константна у сваком тренутку ће промена сваке од координата бити идентична: координату x ћемо увећавати или умањивати за по 5 пиксела и координату y ћемо увећавати или умањивати за по 5 пиксела. Пошто су промене по обе координате идентичне, лоптица ће се увек кретати под углом од 45 степени у односу на ивице прозора. Промену координате x ћемо представити променљивом dx која ће имати вредност или 5 или -5, у зависности од тога да ли се лоптица креће надесно или налево. Слично ћемо употребљавати и променљиву dy. Уређени пар (dx, dy) заправо представља вектор брзине кретања лоптице. У правилним временским интервалима (на пример, на сваких 25 милисекунди) помераћемо лоптицу тако што x увећамо за dx, а y за dy.

Након сваког померања провераваћемо да ли је лоптица излетела ван граница екрана. Хоризонталну проверу можемо извршити тако што ћемо проверити да ли је леви крај лоптице лево од леве ивице екрана, или је десни крај лоптице десно од десне ивице екрана. Леви крај лоптице има x координату једнаку x-r, а десни крај има x координату једнаку x+r, па се провера своди на то да се провери да ли x-r < 0 или је x+r > sirina. Ако је то случај, тада се мења смер хоризонталног кретања тако што се промени знак вредности dx. Потпуно аналогно се врши и вертикална провера (само се уместо x користи y, уместо dx користи dy и уместо sirina користи visina).

Анимацију можемо реализовати на било који од начина који смо у уводу приказали (најједноставније је након сваког извршавања тела петље у којем се лоптица помера и исцртава правити паузу од 25 милисекунди помоћу pg.time.wait(25)).

Стражар који патролира

Напиши програм који приказује стражара који патролира лево десно по екрану. Претпостави да на располагању имаш слике strazar_levo.png на којој је приказан стражар окренут на лево и strazar_desno.png на којој је приказан исти стражар окренут на десно.

../_images/strazar_levo.png ../_images/strazar_desno.png

Решење задатка је прилично слично оном у коме се ауто кретао ширином екрана. Постоје две разлике. Прво, уместо цртања слике помоћу графичких примитива (правоугаоника, кругова), учитавамо готову слику и приказујемо је на одговарајућем месту. Друго, када стражар дође до краја екрана не мења му се позиција, већ му се мења смер кретања. Дакле, у сваком тренутку је позната позиција стражара (на пример, позиција горњег левог угла слике којој је стражар представљен). У сваком кораку анимације мењамо координату x те позиције. Док се стражар креће на десно, ту координату ћемо увећавати за вредност dx, а док се креће на лево умањиваћемо је за dx. Умањивање за dx можемо схватити и као увећавање за -dx, па онда у сваком кораку можемо заправо увећавати за dx, при чему ће знак dx одређивати да ли се стражар креће налево или надесно. Када стражар испадне ван екрана (када му је координата x десног краја већа од ширине екрана или му је координата x левог краја мања од нуле, тј. када је x < 0 или је x + strazar_sirina > sirina), тада му се смер кретања мења тако што се промени знак помераја dx. Пошто знак броја dx одређује и смер кретања, на основу њега одређујемо и слику коју ћемо приказивати.

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

Мачка која се креће по ободу прозора

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

Претпостављамо да на располагању имамо слику macka.png. Ако програм покрећеш из локала (а не из прегледача веба), мораш преузети и ову слику и снимити је на исто место на ком се и програм налази.

../_images/macka.png

У сваком тренутку можемо да пратимо смер у ком се мачка креће. Једноставан начин је да за то употребимо ниску ('levo', 'desno', 'gore', 'dole') и положај горњег левог темена слике мачке. На почетку мачку постављамо у горњи леви угао екрана (координате јој постављамо на (0, 0)) и смер кретања на десно. Гранањем на основу смера кретања одређујемо како ће се мачка померати. Приликом померања мачке провераваћемо и да ли је дошла до ивице екрана у смеру у ком се тренутно креће и ако јесте, мењаћемо јој смер кретања на одговарајући начин.

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

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