[ [[tutorial-ru-001 | Введение]] | [[tutorial-ru-002 | Основы]] | [[tutorial-ru-003 | if/else]] | [[tutorial-ru-004 | Циклы]] | [[tutorial-ru-005 | Массивы]] | [[tutorial-ru-006 | Графика]] | [[tutorial-ru-007 | Анимация]] | [[tutorial-ru-008 | Мышь]] | [[tutorial-ru-009 | Клавиатура]] | [[tutorial-ru-010 | Математика]] | [[tutorial-ru-011 | Методы]] | [[tutorial-ru-012 | Текст]] | [[tutorial-ru-013 | Задачи]] ] ---- == Java для школьников: урок 9 == ====== Работа с клавиатурой ====== С помощью метода getKeyState() можно узнать, нажата ли в настоящий момент нужная клавиша. ^ Возвращаемое значение ^ Имя метода и параметры ^ Описание ^ | boolean | getKeyState(String key) | Возвращает true если клавиша нажата | Напишем программу, которая печатает состояние клавиш-стрелок. По клавише Esc программа завершается. void main() { while (true) { // Проверяем нажатие клавиш-стрелок if (getKeyState("up")) { printLine("Вверх"); } if (getKeyState("down")) { printLine("Вниз"); } if (getKeyState("left")) { printLine("Влево"); } if (getKeyState("right")) { printLine("Вправо"); } // По клавише Esc завершаем программу if (getKeyState("escape")) { break; } // Каждую секунду печатаем точку if (getTimerEvent(1)) { print("."); } } printLine("Выполнение завершено."); } Обратите внимание: по клавише escape выполняется оператор "break;", который прерывает выполнение цикла, и в результате программа завершается. ====== Названия клавиш ====== В качестве параметра методу getKeyState() передается название клавиши в виде строки. Буквы, цифры и обычные символы можно указывать непосредственно, например "A", "ж", "!". Стрелки и другие специальные клавиши имеют особые имена: | "escape" | Клавиша Esc | | "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12" | Клавиши F1...F12 | | "up", "down", "left", "right" | Стрелки вверх, вниз, влево, вправо | | "page up", "page down" | Клавиши Page Up, Page Down | | "home", "end" | Клавиши Home, End | | "insert", "delete" | Клавиши Insert, Delete | | "backspace" | Клавиша Backspace | | "enter" | Клавиша Enter | | "tab" | Клавиша Tab | | "space" | Пробел | | "print screen" | Клавиша Print Screen | | "scroll lock" | Клавиша Scroll Lock | | "pause" | Клавиша Pause | | "caps lock" | Клавиша Caps Lock | | "num lock" | Клавиша Num Lock | | "meta" | Клавиша Meta | | "control" | Клавиша Control | | "shift" | Клавиша Shift | | "alt" | Клавиша Alt | ====== Двигаем шарик ====== На прошлом занятии мы двигали красный шарик с помощью мыши. Теперь будем двигать его клавишами-стрелками. void main() { // Объявляем переменные x и y int x = 0; int y = 0; // Начинаем цикл while (true) { // Проверяем нажатие клавиш-стрелок if (getKeyState("up")) { if (y >= 20) y = y - 20; } if (getKeyState("down")) { if (y < getDrawingHeight() - 60) y = y + 20; } if (getKeyState("left")) { if (x >= 20) x = x - 20; } if (getKeyState("right")) { if (x < getDrawingWidth() - 60) x = x + 20; } // Если прошло достаточно времени, передвигаем шарик if (getTimerEvent(0.05)) { // Рисуем шарик clearDrawing(); setColor(red); fillCircle(x, y, 20); if (y < getDrawingHeight() - 42) { // Смещаем каждый раз вниз на 2 точки y = y + 2; } } // Заканчиваем цикл } } ** Упражнения: ** * Измените программу так, чтобы стрелки изменяли не положение шарика, а его скорость. Причем скорость должна уменьшаться со временем до нуля. * Научите шарик отскакивать от стенок. * Пусть шарик свободно летает, отскакивая от верхней и нижней стенок. У правой и левой стенок поставьте "теннисные ракетки". Положение левой ракетки управляется клавишами A и Z, правой - стрелками вверх-вниз. Шарик должен отскакивать от ракеток. Поиграйте с друзьями в получившуюся игру. Что можно улучшить в программе, чтобы играть было интереснее? * Напишите игру "тетрис". ---- [[tutorial-ru-010 | Перейдем к следующему уроку]].