вторник, 8 июля 2014 г.

Интерфейс

В этой статье пойдет речь о том что я делаю для того чтобы Fallout 2 был кросс-платформенным.

Что такое интерфейс?

Вообще интерфейс это некоторый набор функций, которые хорошо документированы и которые должен использовать конечный программист-пользователь для выполнения действий с определенным контекстом. Идея в том что реализация этих функций скрыта от программиста. Это позволяет в случае необходимости написать интерфейс к другому контексту без изменения основной программы.

Где он может использоваться?

Есть такая проблема в мире - существует множество платформ, под которые должна работать ваша программа. Например, вы хотите чтобы ваша программа работала под Android, Windows, Linux, Macintosh. Как этого достичь? Неужели иметь 4 копии исходного кода, и когда что-то меняется вносить изменения во все 4 проекта?

Конечно нет. Достаточно вынести части программы, которые отвечают за вызовы системных функций в отдельный интерфейс. После этого достаточно сделать реализацию интерфейса под 4 операционных системы - и все. Весь остальной код использует вызовы функций интерфейса - его не надо переписывать.

Интерфейс к операционной системе в моем движке Falout 2

Так исторически сложилось что интерфейс к операционной системе похож на интерфейс других моих приложений, ну просто мне так удобнее. Я совсем не использую стандартную библиотеку языка с++ (только такие вещи как operator new, operator delete и другие служебные функции, которые нельзя не использовать) - так мне понятнее мой код и так он мне кажется гибче.

Глобальное пространство имен


  1. char chlower(char c) - возвращает символ 'c' в нижнем регистре.
  2. char chupper(char c) - возвращает символ 'c' в верхнем регистре.
  3. bool ischa(int c) - возвращает true если символ 'c' является буквой.
  4. int timeticks() - возвращает текущее время тиков со старта системы. Используется для инициализации генератора случайных чисел.

Пространство имен ui


  1. void timer(int milliseconds) - текущий ввод, процедура Input(), будет стараться возвращать событие InputTimer каждые 'milliseconds' миллисекунд.
  2. bool create(const char* title, bool full_screen_mode) - создать окно с заголовком 'title' возможно в полноэкраном режиме.
  3. void caption(const char* text) - смена заголовка окна на другой.
  4. void usepal(unsigned char* pal) - устанавливает палитру для текущего окна. Игра Fallout 2 использует палитру из 256 цветов. Эти цвета надо передать в эту функцию по 3 байта на цвет в порядке B,G,R.
  5. int input() - ключевая процедура. Останавливает выполнение программы до следующего события. Используя эту функцию программа не будет использовать 100% процессорного времени.

Реализуя вышеперечесленные функции можно сделать игру класса Fallout 2.

Комментариев нет:

Отправить комментарий