Предварительный анализ

Принцип работы программы очень простой: получив код клавиши, надо сдвинуть объект в соответствующую сторону. Если обозначить изменения координат фигуры 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: