П р и л о ж е н и е 2

НАЧАЛО РАБОТЫ С SDL 1.2.15, SDL_DRAW 1.2.13 И SDL_TTF 2.0.11В ИНТЕГРИРОВАННОЙ СРЕДЕ РАЗРАБОТКИ DEV-CPP 4.9.9.2 ПОД УПРАВЛЕНИЕМ WINDOWS XP

Предположим, что исходно имеется персональный компьютер под управлением операционной системы Microsoft Windows XP, на котором установлена среда разработки Dev-Cpp 4.9.9.2 для всех пользователей. При этом установка была произведена в каталог C:\Dev-Cpp\, в дальнейшем именуемый «каталогом среды разработки Dev-Cpp», а также в качестве языка пользовательского интерфейса выбран русский и включена возможность анализа заголовочных файлов для поиска функций, классов переменных и т.п.

Предположим также, что для упрощения работы с архивами на компьютере установлен свободно распространяемый файловый менеджер FAR 3.0 с модулем расширения arclite для работы с архивами в форматах zip, tar и tar.gz.

Для подготовки среды разработки Dev-Cpp с библиотеками SDL 1.2 и возможности выполнения созданных приложений в дальнейшем вне среды разработки потребуются следующие свободно распространяемые файлы, скачать которые можно по адресу http://www.libsdl.org/:

—   SDL-1.2.15.zip – исходные тексты библиотеки SDL. Если не заниматься их сборкой, то из данного файла понадобятся лишь заголовочные файлы.

—   SDL-1.2.15-devel-1.2.15-mingw32.tar.gz – архив с файлами для разработки программ в окружении mingw32 (такое же используется в Dev-Cpp), содержит уже собранную динамическую библиотеку SDL.dll для программ, использующих Win32 API, а также необходимые для ее подключения статические библиотеки.

—   SDL_draw-1.2.13.tar.gz – исходные тексты библиотеки графических примитивов SDL_draw. Потребуется собирать библиотеку средствами Dev-Cpp, соответствующий проект входит в состав архива.

—   SDL_ttf-2.0.11.zip – исходные тексты библиотеки SDL_ttf. Если не заниматься их сборкой, то из данного файла понадобятся лишь заголовочные файлы.

—   SDL_ttf-2.0.11-win32.zip – архив с уже собранной динамической библиотекой SDL_ttf для программ, использующих Win32 API и используемыми ей другими динамическими библиотеками: libfreetyp-6.dll и zlib1.dll. К двум последним прилагаются файлы лицензий.

—   CharisSILR.ttf – свободно распространяемый шрифт, включающий символы русского алфавита.

Подключение к среде разработки Dev-Cpp библиотеки SDL-1.2.15:

1. Выделяем в архиве SDL-1.2.15.zip все файлы вида SDL-1.2.15\include\*.h и копируем выделенные файлы в подкаталог \include каталога среды разработки Dev-Cpp.

2. Выделяем в архиве SDL-1.2.15-devel-1.2.15-mingw32.tar.gz все файлы вида SDL-1.2.15-devel-1.2.15-mingw32.tar\SDL-1.2.15\lib\libSDL*.* и копируем три выделенных файла в подкаталог \lib каталога среды разработки Dev-Cpp.

Пример создания проекта, использующего только библиотеку SDL-1.2.15 с динамическим связыванием:

1. Создаем новый каталог для проекта, например C:\SDLtest.

2. Запускаем среду разработки Dev-Cpp, создаем новый C-проект типа Console Application с именем, например, SDLtest, сохраняем файл проекта SDLtest.dev в каталоге C:\SDLtest.

3. В файле main.c вместо автоматически созданной заготовки текста программы вводим следующий текст:

#include <SDL.h>
int main(int argc, char *argv[]){
  SDL_Surface *screen; 
  SDL_Event event;
  SDL_Rect dst;
  if (SDL_Init(SDL_INIT_VIDEO)) 
    return 1; 
  screen = SDL_SetVideoMode(640, 480, 32, 
                            SDL_ANYFORMAT);
  if (!screen){
    SDL_Quit();
    return 1; 
  }
  dst.x = 10;
  dst.y = 10;
  dst.w = 50;
  dst.h = 50;
  SDL_FillRect(screen, &dst, 
               SDL_MapRGB(screen->format,0,255,0));
  SDL_Flip(screen);  
  while(SDL_WaitEvent(&event)){
    if(event.type == SDL_QUIT || 
      (event.type == SDL_KEYDOWN &&
      event.key.keysym.sym == SDLK_ESCAPE))
    {
      SDL_Quit();
      return 0;
    }
  }
  SDL_Quit();
  return 2;
}

4. Из архива SDL-1.2.15-devel-1.2.15-mingw32.tar.gz копируем файл SDL-1.2.15-devel-1.2.15-mingw32.tar\SDL-1.2.15\bin\SDL.dll в каталог с созданным проектом (C:\SDLtest).

5. В параметрах проекта (меню «Проект» – «Параметры проекта»), на вкладке «Параметры», добавляем в столбец «Компоновщик» строку:

-lmingw32 -lSDLmain -lSDL

6. Собираем и запускаем проект (меню «Выполнить» – «Скомпилировать и выполнить») – и он успешно запускается: в верхнем левом углу с небольшим отступом от края на черном фоне ярко-зеленый квадрат. Выход из программы по нажатию клавиши Esc или щелчку по системной кнопке закрытия окна в его заголовке.

Подключение к среде разработки Dev-Cpp библиотеки SDL_ttf-2.0.11:v 1. Из архива SDL_ttf-2.0.11.zip копируем файл SDL_ttf-2.0.11\SDL_ttf.h в подкаталог \include каталога среды разработки Dev-Cpp.

2. Из архива SDL_ttf-2.0.11-win32.zip копируем файл SDL_ttf.dll в подкаталог \lib каталога среды разработки Dev-Cpp.

Пример создания проекта, использующего библиотеки SDL-1.2.15 и SDL_ttf-2.0.11 с динамическим связыванием:

1. Создаем новый каталог для проекта, например C:\SDLttftest.

2. Запускаем среду разработки Dev-Cpp, создаем новый C-проект типа Console Application с именем, например, SDLttftest, сохраняем файл проекта SDLttftest.dev в каталоге C:\SDLttftest.

3. В файле main.c вместо автоматически созданной заготовки текста программы вводим следующий текст:

#include <SDL.h>
#include <SDL_ttf.h>
int main(int argc, char *argv[])
{
  SDL_Surface *screen;
  SDL_Event event;
  TTF_Font *fnt = NULL;
  SDL_Color text_color;
  SDL_Rect dest; 
  SDL_Surface *text_surface = NULL; 
  /* Строка "Привет, Мир!" в кодировке utf8 */
  char hello_world[]="?YN€?????µN‚, ????N€!";
  if (SDL_Init(SDL_INIT_VIDEO))
    return 1;  
  if (TTF_Init()) 
    return 1;   
  if(!(screen=SDL_SetVideoMode(640,480,32,
                               SDL_ANYFORMAT))){ 
    TTF_Quit();
    SDL_Quit();
    return 1; 
  }
  if(!(fnt = TTF_OpenFont("CharisSILR.ttf", 29))){
    TTF_Quit();
    SDL_Quit();
    return 3;
  }
  dest.x = 200;
  dest.y = 100;
  dest.w = 1;
  dest.h = 1;
  text_color.r = 0;
  text_color.g = 0;
  text_color.b = 255;
  if(text_surface = TTF_RenderUTF8_Solid(fnt, 
                          hello_world, text_color))
  {
    SDL_BlitSurface(text_surface, NULL, screen, 
                    &dest);
    SDL_FreeSurface(text_surface);
    text_surface = NULL;
  }
  SDL_Flip(screen);
  while(SDL_WaitEvent(&event)){
    if(event.type == SDL_QUIT || 
      (event.type == SDL_KEYDOWN &&
      event.key.keysym.sym == SDLK_ESCAPE))
    {
      TTF_CloseFont(fnt);
      TTF_Quit();
      SDL_Quit();
      return 0;
    }
  }
  TTF_CloseFont(fnt);
  TTF_Quit();
  SDL_Quit();
  return 2;
}

4. Из архива SDL-1.2.15-devel-1.2.15-mingw32.tar.gz копируем файл SDL-1.2.15-devel-1.2.15-mingw32.tar\SDL-1.2.15\bin\SDL.dll в каталог с созданным проектом (C:\SDLttftest).

5. Выделяем в архиве SDL_ttf-2.0.11-win32.zip все файлы вида *.dll и копируем в каталог с созданным проектом (C:\SDLttftest).

6. В параметрах проекта (меню «Проект» – «Параметры проекта»), на вкладке «Параметры», добавляем в столбец «Компоновщик» строку: -lmingw32 -lSDLmain –lSDL –lSDL_ttf

7. Копируем файл CharisSILR.ttf в каталог с созданным проектом (C:\SDLttftest). 8. Собираем и запускаем проект (меню «Выполнить» – «Скомпилировать и выполнить») – и он успешно запускается: на экран выводится ярко-синяя надпись «Привет, Мир!». Выход из программы по нажатию клавиши Esc или щелчку по системной кнопке закрытия окна в его заголовке.

Сборка библиотеки SDL_draw-1.2.13 из исходных текстов: 1. Из архива SDL_draw-1.2.13.tar.gz копируем каталог SDL_draw-1.2.13.tar\SDL_draw-1.2.13 в корень диска C: – получаем каталог C:\SDL_draw-1.2.13\ (диск C: приведен для примера – вместо него возможно любое другое расположение, но далее будет рассматриваться именно такой пример).

2. В каталоге C:\SDL_draw-1.2.13\Dev-Cpp\ открываем проект SDL_draw_static.dev. 3. Выполняем в среде разработки Dev-Cpp команду «Перестроить все» (меню «Выполнить» – «Перестроить все») – в каталоге C:\SDL_draw-1.2.13\Dev-Cpp\ появляется новый файл libSDL_draw.a (статическая библиотека). Закрываем проект.

4. В каталоге C:\SDL_draw-1.2.13\Dev-Cpp\ открываем проект SDL_draw_dynamic.dev.

5. В параметрах проекта (меню «Проект» – «Параметры проекта»), на вкладке «Параметры», в столбце «Компоновщик» заменяем вторую строку на следующую: –lSDL

6. Выполняем в среде разработки Dev-Cpp команду «Перестроить все» (меню «Выполнить» – «Перестроить все») – в каталоге C:\SDL_draw-1.2.13\Dev-Cpp\ появляется новый файл SDL_draw.dll (динамическая библиотека). Закрываем проект.

Подключение к среде разработки Dev-Cpp библиотеки SDL_draw-1.2.13:

1. Из каталога C:\SDL_draw-1.2.13\include копируем файл SDL_draw.h в подкаталог \include каталога среды разработки Dev-Cpp.

2. Из каталога C:\SDL_draw-1.2.13\Dev-Cpp\ копируем файл SDL_draw.dll в подкаталог \lib каталога среды разработки Dev-Cpp.

Пример создания проекта, использующего библиотеки SDL-1.2.15 и SDL_draw-1.2.13 с динамическим связыванием: 1. Создаем новый каталог для проекта, например C:\SDLdrawtest.

2. Запускаем среду разработки Dev-Cpp, создаем новый C-проект типа Console Application с именем, например, SDLdrawtest, сохраняем файл проекта SDLdrawtest.dev в каталоге C:\ SDLdrawtest.

3. В файле main.c вместо автоматически созданной заготовки текста вводим следующий текст программы:

#include <SDL.h>
#include <SDL_draw.h>
int main(int argc, char *argv[])
{
  SDL_Surface *screen;
  SDL_Event event;   
  if (SDL_Init(SDL_INIT_VIDEO))
    return 1; 
  screen = SDL_SetVideoMode(640,480,32,
                            SDL_ANYFORMAT);
  if (!screen)
  {
    SDL_Quit();
    return 1; 
  }
  Draw_FillEllipse(screen, 320, 240, 300, 200,
       SDL_MapRGB(screen->format, 128, 128, 128));
  SDL_Flip(screen);
  while(SDL_WaitEvent(&event))
  {
    if(event.type == SDL_QUIT || 
      (event.type == SDL_KEYDOWN &&
      event.key.keysym.sym == SDLK_ESCAPE))
    {
      SDL_Quit();
      return 0;
    }
  }
  SDL_Quit();
  return 2; 
}

4. Из архива SDL-1.2.15-devel-1.2.15-mingw32.tar.gz копируем файл SDL-1.2.15-devel-1.2.15-mingw32.tar\SDL-1.2.15\bin\SDL.dll в каталог с созданным проектом (C:\SDLdrawtest).

5. Из каталога C:\SDL_draw-1.2.13\Dev-Cpp\ копируем файл SDL_draw.dll в каталог с созданным проектом (C:\SDLdrawtest).

6. В параметрах проекта (меню «Проект» – «Параметры проекта», комбинация клавиш Alt+P), на вкладке «Параметры», добавляем в столбец «Компоновщик» строку:

-lmingw32 -lSDLmain –lSDL –lSDL_draw

7. Собираем и запускаем проект (меню «Выполнить» – «Скомпилировать и выполнить») – и он успешно запускается: на черном фоне отображается серый закрашенный эллипс. Выход из программы по нажатию клавиши Esc или щелчку по системной кнопке закрытия окна в его заголовке.

Создание проектов, использующих библиотеки SDL-1.2.15, SDL_draw-1.2.13 и SDL_ttf-2.0.11 с динамическим связыванием:

1. Сам проект создается аналогично вышеприведенным примерам, в папку с проектом помещаются все требуемые файлы динамических библиотек и используемых шрифтов (см. примеры).

2. В параметрах проекта (меню «Проект» – «Параметры проекта», комбинация клавиш Alt+P), на вкладке «Параметры», в столбец «Компоновщик» добавляется строка, подключающая все три библиотеки:

-lmingw32 -lSDLmain –lSDL –lSDL_draw –lSDL_ttf