Заготовка игрушки

(работа с клавишами)

Как запрограммировать обработку нажатий на клавиши? Здесь все очень просто. Есть две основных функции: GetKeyClicked и GetKeyPressed, которые возвращают код нажатой клавиши. Разница между ними лишь в том, что первая возвращает последнюю нажатую клавишу, а вторая - клавишу, нажатую в данных момент. Разные телефоны (и устройства вообще) могут возвратить для одной и той же клавиши разные коды и тогда программа, которая прекрасно работала на одном телефоне, совершенно откажется работать на другом. Эту проблему решает функция KeyToAction, которая сама определяет, какая клавиша была нажата и выдает ее значение. Например, если был нажат джойстик вверх, то значение будет GA_UP, если вправо, то - GA_RIGHT. GA_UP и GA_RIGHT - это так называемые константы. Константа - это идентификатор, который заменяет в программе некоторое число (или другие данные). Для чего это нужно? Для того, чтобы программа стала более понятной. Например, при том же опросе клавиш: вместо того, чтобы сравнивать возвращенное значение с непонятно что означающим числом, мы сравниваем, допустим, с константой GA_RIGHT. Сразу становится понятно, что это проверка нажатия клавиши "Вправо". Благодаря константам уменьшается вероятность ошибки. Подробнее о константах читайте в Справочнике MidletPascal.

А теперь поясню все вышесказанное на практике:

while KeyToAction (GetKeyClicked) <> GA_FIRE do
  begin
    Delay(100);
  end;

Этот пример был взят из помощи по Midlet Pascal. Данный цикл (а значит и программа в данном случае) будет работать до тех пор, пока не будет нажат центр джойстика и функция опроса клавиатуры не вернет значение, равное константе GA_FIRE.

А теперь я хочу показать, как все это применить на практике. Напишем небольшую заготовку игрушки. Мы будем управлять летающей тарелкой. Для этого надо добавить в проект картинку самой тарелки и фон космоса, где, собственно и будет происходить действие.


NLO.png

Cosmos.png

Далее приведу просто текст программы. Здесь полно комментариев и, я думаю, вы разберетесь здесь без проблем.

program ufo;
var
  Cosmos:image; // Переменная для хранения фона
  NLO:image; // Переменная для хранения самой тарелки
  X,Y:integer; // Координаты тарелки
  Key:integer; // Код нажатой кнопки
begin
  // Загружаем картинки
  Cosmos:=LoadImage('/Cosmos.png');
  NLO:=LoadImage('/NLO.png');

  // Задаем начальные координаты тарелки
  X:=50;
  Y:=50;

  // Цикл до нажатия на центр джойстика
  while (Key<>GA_FIRE) do 
    begin
  // Выводим изображения и обязательно ставим небольшую паузу 
      DrawImage(Cosmos,0,0);
      DrawImage(NLO,X,Y);
      Delay(100); 
      repaint;
      
      // Обрабатываем нажатия кнопок и меняем координаты тарелки
      Key:=KeyToAction(getKeyPressed);
      if (Key=GA_LEFT) then X:=X-3;
      if (Key=GA_RIGHT) then X:=X+3;
      if (Key=GA_UP) then Y:=Y-3;
      if (Key=GA_DOWN) then Y:=Y+3;
    end; 
end.

Вот как это выглядит на экране телефона:

Ну, и в заключение, добавим в игру фоновую музыку. Если не помните как, прочитайте еще раз главу "Воспроизведение музыки". Не забудьте добавить в проект файл music.mid!

взять music.mid ("Правая кнопка" -> "Сохранить как").

program ufo;
var
  Cosmos:image; // Переменная для хранения фона
  NLO:image; // Переменная для хранения самой тарелки
  X,Y:integer; // Координаты тарелки
  Key:integer; // Код нажатой кнопки
begin
  // Включаем мелодию
  if not OpenPlayer('/music.mid', 'audio/midi') then Halt;  // Открыть в проигрывателе звуковой файд
							   // Если файл отсутствует, завершить программу
  if not SetPlayerCount(-1) then Halt; // Установить бесконечное число повторов мелодии
			             // Если ошибка, то завершить программу
  if not StartPlayer then Halt; // Начать проигрывание мелодии
			       // Если плейер не поддерживает данный формат midi, завершить программу
  // Загружаем картинки
  Cosmos:=LoadImage('/Cosmos.png');
  NLO:=LoadImage('/NLO.png');

  // Задаем начальные координаты тарелки
  X:=50;
  Y:=50;

  // Цикл до нажатия на центр джойстика
  while (Key<>GA_FIRE) do 
    begin
  // Выводим изображения и обязательно ставим небольшую паузу 
      DrawImage(Cosmos,0,0);
      DrawImage(NLO,X,Y);
      Delay(100); 
      repaint;
      
      // Обрабатываем нажатия кнопок и меняем координаты тарелки
      Key:=KeyToAction(getKeyPressed);
      if (Key=GA_LEFT) then X:=X-3;
      if (Key=GA_RIGHT) then X:=X+3;
      if (Key=GA_UP) then Y:=Y-3;
      if (Key=GA_DOWN) then Y:=Y+3;
    end; 
end.




 
К содержанию

 
Скачать новую версию данного учебника в одном архиве

Курс находится в процессе разработки, поэтому архив постоянно обновляется!




 
Hosted by uCoz