Разчитане на клавиатурата¶
Придобиването на информация за натискане на клавиши на клавиатура е много подобно на четене на бутоните на мишката. Функция pg.key.get_press()
връща комплект, чиито елементи се използват като логически стойности, показвайки за всеки клавиш на клавиатурата дали в момента е натиснат или не.
Тъй като клавиатурата има много повече клавиши от мишката, използването на индекси 0, 1, 2 и т.н. за определени клавиши би било непрактично. За да не се налага да помним кой индекс в комплекта на кой клавиш съответства, библиотеката на PyGame съдържа наименувани константи, които използваме като индекси. Например, константи pg.K_LEFT
, pg.K_RIGHT
, pg.K_UP
, pg.K_DOWN
съответстват на често използваните клавиши със стрелки. За клавиша за интервал съответната константа е pg.K_SPACE
, докато за буквите за букви, например a, b, c, съответните константи ще бъдат pg.K_a
, pg.K_b
, pg .K_c
и пр. Пълният списък на тези константи можете да видите тук <https://www.pygame.org/docs/ref/key.html> __.
Примери и задачи¶
Пример - Космически кораб: В този пример имаме изображение на космически кораб, който преместваме наляво и надясно в съответствие с натиснатите клавиши със стрелки. Освен това можем да стреляме от кораба, като натискаме клавиша за интервал.
Първо обърнете внимание на подчертаната част от кода с по-светъл фон (линии 23-37). Тази част е нова тук и се коментира по-подробно в самия код.
Останалата част от програмата е просто анимиране на множество обекти, техника, известна от преди.

Така че, след като прочетем състоянието на всички клавиши и го поставим в комплекта натиснат, можем просто да проверим състоянието на ключовете, които се интересуваме от използването на оператора if.
Задача - навигация:
Изпълнете следната програма, така че 4-те клавиши със стрелки да контролират жълтия кръг, както в примера. Кръгът не трябва да се движи, ако не са натиснати стрелки и да се движи един пиксел в посока на стрелките, които са натиснати (противоположните стрелки се отменят една друга навън).
Задача - змия:
Попълнете следната програма, така че стрелките да могат да контролират „змия“, състояща се от няколко квадрата, както в примера.
Променливите d_row и d_col указват посоката на движение на змията. Въпреки че не се натискат стрелки, стойността на тези променливи не се променя и змията продължава да се движи в същата посока. Вашата задача е да добавите команди за четене на състоянието на клавиатурата и изчисляване на нови стойности за (d_row, d_col) въз основа на натиснатите стрелки, така че движението да продължи в избраната посока.
Съвет: ако главата на змията беше в квадрата (ред, колона), в новата рамка тя ще бъде в квадрата (row + d_row, col + d_col). Проверете дали сте разбрали как трябва да присвоите стойности на променливите d_red, d_kol за всяка посока:
- Нагоре
- Не, стойностите за нагоре са (d_row, d_col) = (-1, 0)
- Надолу
- Не, стойностите за надолу са (d_row, d_col) = (1, 0)
- Наляво
- Правилно
- Надясно
- Не, стойностите за дясно са (d_row, d_col) = (0, 1)
Q-75: Ако на променливи (d_row, d_col) са присвоени стойности (0, -1), в коя посока движението продължава?
Въпроси¶
Докато отговаряте на въпросите, върнете се към програмата „змия“, ако е необходимо, и потърсете частите, на които трябва да отговорите.
Колко реда има дъската?
- x = row*a + a, y = col*a + a
- Опитай пак
- x = col*a + a, y = row*a + a
- Опитай пак
- x = row*a, y = col*a
- Опитай пак
- x = col*a, y = row*a
- Правилно
Q-76: Какви са координатите на крайния ляв ъгъл на площта (row, col)?
- Във всеки списък 'змия' се разширява от нов елемент, представляващ новата позиция на главата на змията.
- Няма такава команда в програмата
- Списък „змия“ има еднакъв брой елементи в цялата програма.
- Правилно
- Един елемент, който представлява края на змийската опашка, се премахва от списъка „змия“ във всеки кадър.
- Няма такава команда в програмата
Q-77: Избери вярното.