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
). Не
заборави ископираш сличицу ако радиш у ИДЛЕ окружењу!

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

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