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

29.2. Догађаји тастатуре

Када корисник притисне неки тастер на тастатури, региструје се догађај 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.

  • У функцији crtaj ћемо цртати круг, чија ће дебљина зависити од вредности глобалне променљиве obojen. Подсетимо се, дебљина 0 означава да круг треба да буде испуњен.

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

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

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

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

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

  • Стање сцене је одређено положајем лоптице. Променљиве x и y памтиће тренутни положај центра лоптице у прозору (на почетку у центру прозора). Променљива r садржаће полупречник лоптице.

  • У функцији crtaj бојићемо позадину прозора у бело (брише се претходни садржај) и исцртаваћемо лоптицу на текућем положају (x , y).

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

Решење са коришћењем речника

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

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

Померање свемирског брода

Уместо лоптице, можемо да померамо неку сличицу и тако добијемо основу једноставне игрице. На пример свемирски брод (spaceship.png). Не заборави ископираш сличицу ако радиш у ИДЛЕ окружењу!

../_images/spaceship.png

Сусретање са ивицом прозора

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

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

  • Функцију crtaj ћемо модификовати тако да у обзир узме и вредност променљиве boja.

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

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