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 gimnaziju

Реаговање на тастере тастатуре

Сваки пут када корисник притисне и када отпусти неки тастер на тастатури региструје се догађај. За сваки клик тастером догоде се два посебна догађаја: pg.KEYDOWN и pg.KEYUP. Сваки од њих се смешта у ред догађаја (заједно са свим осталим догађајима) и у нашем програму можемо написати кôд који ће се извршити када год тај догађај наступи.

У склопу обраде догађаја притиска тастера, често нас занима да сазнамо који је тастер притиснут. Догађај типа 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), али ћемо ми у већини примера користити само стрелице. Функција обраде догађаја у којој се анализирају притисци стрелица се може организовати на следећи начин.

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

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

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

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

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

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

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

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

Цртање лоптице можемо вршити у функцији crtaj која се позива на почетку главне петље.

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

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

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

../_images/spaceship.png

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

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

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

Бројање резултата игре

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

Одржаваћемо две променљиве a и b у којима чувамо поене сваког играча. Пошто ћемо на екрану само исписивати текст дефинисаћемо помоћне функције које исписују дати текст, дате величине, на датој позицији (при чему ће једна функција примати позицију горњег левог угла текста, друга центра текста, а трећа горњег десног угла текста). Приликом обраде догађаја детектоваћемо притисак тастера тастатуре pg.KEYDOWN, а затим проверавати да ли је притиснут тастер A или B. Ако јесте, повећаваћемо број поена одговарајућег играча и сигнализирати да се сцена поново исцрта.