Принцип работы программы очень простой: получив код клавиши, надо сдвинуть объект в соответствующую сторону. Если обозначить изменения координат фигуры x и y за 1 шаг цикла через dx и dy, для движения в четырех направлениях получаем:
движение влево dx < 0, dy = 0
движение вправо dx > 0, dy = 0
движение вверх dx = 0, dy < 0
движение вниз dx = 0, dy > 0
Это значит, что надо сделать выбор одного из четырех вариантов в зависимости от кода нажатой клавиши. Для этого можно использовать несколько условных операторов if, но существует специальный оператор switch, который позволяет легко организовать выбор из нескольких вариантов.
Еще одна проблема связана с тем, что клавиши управления курсором (стрелки) – не совсем обычные клавиши. Они относятся к группе функциональных клавиш, у которых нет кодов в таблице символов. Когда нажата одна из специальных клавиш, система реагирует на нее как на 2 нажатия, причем для первого код символа всегда равен нулю, а для второго мы получим специальный код (так называемый скан-код, номер клавиши на клавиатуре). Мы будем использовать упрощенный подход, когда анализируется только этот второй код:
|
|
Влево 75 вверх 72
Вправо 77 вниз 80
У такого приема есть единственный недостаток: объект будет также реагировать на нажатие клавиш с кодами 75, 77, 72 и 80 в таблице символов, то есть на заглавные латинские буквы K,
M, H и P.
Простейший случай
Составим программу, при выполнении которой фигура будет двигаться только тогда, ко-гда мы нажмем на клавишу-стрелку. В цикле мы сначала рисуем фигуру, ждем нажатия на клавишу и принимаем ее код с помощью функции getch. После этого стираем фигуру в том же месте (пока не изменились координаты) и, в зависимости от этого кода, меняем координаты фигуры нужным образом.
Здесь используется бесконечный цикл while(1). Выйти из него можно только одним
способом – черезоператор break (досрочный выход из цикла).
В операторе switch значения координат меняются на единицу, хотя можно использовать любой шаг. В конце обработки каждого варианта надо ставить оператор break, чтобы не выполнялись строки, стоящие ниже. Обратите внимание, что целую переменную code нужно объявить в начале основной программы.
Непрерывное движение
Теперь рассмотрим более сложный случай, когда объект продолжает движение в выбран-
ном направлении даже тогда, когда ни одни клавиша не нажата, а при нажатии клавишистрелки меняет направление. Здесь надо использовать переменные dx и dy, которые задают направление движения. Сначала мы определяем, нажата ли клавиша, а затем определяем ее код,записываем его в переменную code, и обрабатываем это нажатие с помощью оператора
switch.