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.KEYDOWN и pg.KEYUP. Сваки од тих догађаја се смешта у ред догађаја (заједно са свим осталим догађајима) и у нашем програму можемо написати код који ће се извршити када год тај догађај наступи.

Бојење круга тастатуром

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

Контролу да ли круг треба или не треба да буде обојен вршимо помоћу логичке променљиве obojen. Потребно је да приликом догађаја pg.KEYDOWN њену вредност поставимо на True, а приликом догађаја pg.KEYUP њену вредност поставимо на False.

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

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

Шетање лоптице тастатуром

Напиши програм у којем корисник шета лоптицу по екрану тастатуром.

Када се неки тастер на тастатури притисне, генерише се догађај pg.KEYDOWN. У склопу обраде тог догађаја, често нас занима да сазнамо који је тастер притиснут. Догађај типа pg.KEYDOWN податак о томе чува у пољу key, па ако је догађај сачуван у променљивој dogadjaj, анализом вредности dogadjaj.key можемо одредити који је тастер притиснут и реаговати на одговарајући начин. Ако је притиснута нека од стрелица, dogadjaj.key ће имати вредности pg.K_LEFT (стрелица на лево), pg.K_RIGHT (стрелица на десно), pg.K_UP (стрелица на горе) или pg.K_DOWN (стрелица на доле). Сличне константе постоје и за друге тастере (на пример, за слова можемо користити pg.K_a, pg.K_b, …, pg.K_z), али ћемо ми у већини примера користити само стрелице. Главна петља у којој се анализирају притисци стрелица се може организовати на следећи начин.

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

Када притиснемо стрелицу на десно, тада увећавамо променљиву x за вредност dx. Слично, када притиснемо стрелицу на лево, тада умањујемо променљиву x за dx, када притиснемо стрелицу на горе тада умањујемо променљиву y за dy, а када притиснемо стрелицу на доле, тада увећавамо променљиву y за dy.

Цртање лоптице можемо вршити на почетку главне петље. Ако догађаје прихватамо и обрађујемо помоћу pg.event.wait(), тада ћемо цртање вршити приликом сваког догађаја (на пример, док корисник мишем превлачи преко прозора, лоптица ће се беспотребно пуно пута изнова цртати). Да бисмо то спречили, можемо употребити променљиву treba_crtati, на исти начин који смо то раније приказали. Њену вредност можемо поставити на True када год се притисне нека од стрелица (или, једноставније, када год се притисне било који тастер).

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

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

Tада се реакција на притисак тастера може реализовати веома једноставно.

Додатно, уместо цртања лоптице можемо да шетамо неку сличицу по екрану и тиме добијемо основу неке једноставне игрице. То, на пример, може бити следећи свемирски брод (слика се зове spaceship.png и не заборави да је ископираш ако покрећеш овај пример у локалу).

../_images/spaceship.png

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

Уводимо променљиву boja која ће садржати боју лоптице (она ће бити постављена насумично, помоћу функције nasumicna_boja).

Након сваке промене положаја центра лоптице, треба проверити да ли је она испала ван граница екрана и ако јесте, вратити је и променити јој боју. Притиском стрелица на десно лоптица која је била на екрану је могла испасти једино преко десне ивице екрана. Зато је приликом реакције на догађај притиска тог тастера довољно само проверити да ли је десни крај лоптице десно од десне ивице екрана тј. да ли је вредност x + r већа од ширине екрана тј. вредности променљиве sirina. Ако јесте, тада x можемо поставити на sirina - r (што је најдешњи положај лоптице у коме се она још налази на екрану) и променити јој насумично боју. Веома слично, приликом реаговања на догађај притиска стрелице на лево умањиваћемо x за dx, проверавати да ли је x - r постало негативно и ако јесте постављати x на r и лоптици мењати боју. Аналогно ћемо поступати и у случају друге две стрелице (једино што ћемо тада мењати y за dy).