Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Пятница, 17.05.2024, 00:26
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Другие статьи

Куда прописывать исходный код? Компоненты, используемые в программировании игр.

Куда прописывать исходный код? Компоненты, используемые в программировании игр.

 

 

Всем доброго времени суток! В данной статье хотелось бы по полочкам для новичков разобрать возможные варианты прописывания исходного кода. А также разобраться с наиболее часто используемыми компонентами Delphi, необходимых для создания компьютерных и не только – игр.

 

Любой, кто хотя бы раз запускал среду Delphi знает, что перед ним сразу открывается новый проект с пустой формой. Форма – это прямоугольная область, на которой могут располагаться любые компоненты и рисоваться графика. Если Вы планируете создавать игры без использования дополнительных графических библиотек типа DirectX и OpenGL, то форма, скорее всего, будет представлять из себя игровое окно.

 

При разработке игр форма, в первую очередь, используется для прорисовки графики (картинок) на ней. Для этого случая у формы существует свойство Draw. Код прорисоки представляет из себя следующую конструкцию:

 

Form1.Canvas.Draw( 0,0, Image );

 

Первые две цифры – два нуля. Это координаты (икс и игрек) относительно верхнего левого угла формы. А Image – это переменная типа TBitmap, в которую загружена картинка.

 

Чаще всего прорисовка графики происходит благодаря компоненту Timer. Да и вообще все игры, кроме пошаговых (Шахматы, Герои меча и магии, Цивилизация и т.д.) не могут обходиться без данного компонента. Этот компонент каждый промежуток времени (интервал задает программист). Чтобы использовать данный компонент необходимо перейти на вкладку System. Затем кликнуть левой клавишей мыши по компоненту, а потом по форме. Таким образом он будет на ней располагаться. Дважды кликаем по компоненту и попадаем в то место, куда можно печатать исходный код в созданную процедуру. Также стоит отметить что при звпуске программы таймер не будет виден. Пользователь сможет лишь наблюдать за результатом его действий, если они отображаются на форме.

 

Еще у таймера есть свойство Interval:

 

Timer1.Interval:=2000;

 

По умолчанию интервал равен 1000 (что равно одной секунде). Тоесть каждую секунду будут запускаться действия, прописанные в таймере. И от этого отталкиваются все расчеты времени:

 

·        2000 – обновление таймера происходит 1 раз в 2 секунды

·        5000 – обновление таймера происходит 1 раз в 5 секунд

·        500 – обновление таймера происходит 2 раз в 1 секунду

·        100 – обновление таймера происходит 10 раз в 1 секунду

·        10 – обновление таймера происходит 100 раз в 1 секунду

 

Кроме прорисовки графики в таймере обычно прописывают искусственный интеллект игровых персонажей (их поведение) и всевозможные игровые проверки:

 

·        Выход персонажей за пределы игрового поля

·        Прорисовка карты в обозначенных границах и со сдвигом

·        Проверка на проходимые и непроходимые участки

·        Проверка на имеющиеся квесты (задания) в наличии

 

Также при создании игр приходится реализовывать управление персонажами. Для этого у формы есть несколько полезных свойств:

 

·        OnClick – при клике (нужной) клавиши мыши

·        OnKeyPress – после того как была нажата, а заем отпущена клавиша клавиатуры

·        OnKeyUp – когда была отпущена клавиша клавиатуры

·        OnKeyDown – когда была зажата клавиша клавиатуры

·        OnMouseDown – когда была зажата клавиша мыши

·        OnMouseUp – когда была отпущена клавиша мыши

 

Дважды кликнув по нужному событию формы мы получаем возможность прописать нужный код. Например можно изменить координаты главного героя на 5 пикселей:

 

Влево: Player.X:=Player.X-5;

Вправо: Player.X:=Player.X+5;

Вверх: Player.X:=Player.Y-5;

Вниз: Player.X:=Player.Y+5;

 

И для диагоналей:

 

Вниз влево: Player.X:=Player.X-5; Player.Y:=Player.Y+5;

Вниз вправо: Player.X:=Player.X+5; Player.Y:=Player.Y+5;

Вверх влево: Player.X:=Player.X-5; Player.Y:=Player.Y-5;

Вверх вправо: Player.X:=Player.X+5; Player.Y:=Player.Y-5;

 

Также часто приходится отслеживать какая именно мыши клавиша была нажата правая или левая:

 

If key=Mb_Left then …

If Key=Mb_Right then …

 

Для клавиш клавиатуры нужно отслеживать или символ нарисованный на клавише или номер клавиши (специальный встроенный), а иногда и отслеживать их специальные названия:

 

If Key=’D’ then …

If Key=’d’ then …

If Key=64 then …

If Key=Vk_Escape then …

 

В принципе здесь же в управлении можно реализовать и проверки на проходимость клеток и на пересечение с другими персонажами или игровыми обьектами. Также важно проверять по таймеру условия победы и поражения. В случае поражения нужно или отключать таймер ( Timer1.Enabled:=false; ) или изменять переменные так, чтобы выполнялись нужные условия, а ненужные не выполнялись.

 

Если возникла необходимость использования DirtectX, то возникает необходимость использования библиотеки DelphiX. Тогда можно будет рисовать не на форме, а непосредственно на экране монитора как и в варианте с OpenGL.

 

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

 

Memo1.Lines.Clear;

 

Для загрузки данных из файла нам понадобиться лишь одна строка:

 

Memo1.Lines.LoadFromFile(‘Text.txt’);

 

Или:

 

Memo1.Lines.LoadFromFiles(‘C;\MyProgram\map.txt’);

 

Далее научимся брать нужную строку и передавать ее данные в переменную. Допустим, нам нужна первая строка:

 

Var

S:String;

S:=Memo1.Lines.Strings[0]; (строки нумеруются с нуля)

 

Также рассмотрим вариант когда нам нужна не вся строка, а лишь ее часть. К примеру выведем в заголовок формы первый символ в строке:

 

Form1.Caption:=S[1];

 

Ведь строка представляет из себя массив символов. А вот если нам необходимо не загружать, а сохранять данные в файл, тогда строка будет выглядеть так:

 

Memo1.Lines.SaveToFile(‘D:\MyProgram\Maps.txt’);

 

Остальные компоненты используются реже. Да и невозможно и не нужно рассматривать новичкам их все. На этом у меня все! Желаю всем удачи в программировании игр!

 

Источник: delgame.at.ua

Категория: Другие статьи | Добавил: Armageddets (04.11.2013) | Автор: Куда прописывать исходный код?
Просмотров: 1556 | Теги: создание игр на делфи, делфи игры, Куда прописывать исходный код, Компоненты используемые в программи | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 103
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0