LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Мой тетрис в MacOS X

Posted by LG.BALUKATION на 2008/12/06

Решил, что пораб уж переставать просто юзать MacOS X и начинать потихоньку пробовать программировать под ней. Видимо с юзаньем всёж освоился более-менее уже…

Примерно неделю хотел опробовать тут OpenGL, но пока всё не до того было. Сегодня тож не особо до того — после работы посильно участвовал в потреблении 12 литров светлого Василеостровского в «том самом» пиццо-баре, на чём мои приключения не закончились… Но однажды всёж добрался до дивана, более-менее пришёл в норму и решил всёж попробовать.

Для начала взялся собрать что-нить проверенное, чтоб просто узнать как оно делается. «Проверенным» только что выступила моя полу-игровая заготовка тетриса, которую я тож от нех делать как-то почти всю сваял за один вечер и бросил, будучи ещё студентом несколько лет назат. Это простая штука на C++ и GLUT, фигуры в случайном порядке падают в стакан и ими можно управлять, собирая горизонтальные ряды… Ну наверно все играли в тетрис, и так прекрасно знаете каково оно +)

Писалось изначально в Linux, но вроде как я не помнил там ничего привязанного к конкретной ОСи и рассчитывал что пойдёт «где угодно». В общем-то на Mac’е и пошло без осложнений — пришлось просто учесть несколько нюансов.

MacOS X активно эксплуатирует идею т. н. фреймворков. Принципиальных отличий от классических библиотек я пока не особо заметил, те же объектные файлы да заголовки. В фирмовых IDE можно лёгким мыше-движением подрубить к проекту нужный фреймворк и его функционал станет доступен софтине, я же решил собрать свой тетрис из консоли ибо он был предельно прост и такие мощные средства ему ни к чему.

Сделать это оказалось весьма просто. Помимо указания пути к заголовкам фреймворка, нужно указать и объектный код библиотеки. Я просто подставил эти параметры в командную строку и поскоку она получилась не самой короткой — вынес это дело в скрипт оболочки (для настоящего программирования рекомендую писать Makefile’ы или пользовать IDE!)

У меня получился такой файл:

localhost:~ oleg$ cat build.sh
#!/bin/sh
GLUT_INC=»-I/System/Library/Frameworks/GLUT.framework/Headers»
GLUT_LIB=»/System/Library/Frameworks/GLUT.framework/GLUT»
OPENGL_LIB=»/System/Library/Frameworks/OpenGL.framework/OpenGL»
g++ -Wall tetris.cpp ${GLUT_INC} ${GLUT_LIB} ${OPENGL_LIB}

Сперва мы как всегда указываем, чем исполнять данный скрипт, потом запоминаем где лежат заголовки и библиотеки нужных фреймворков и в последней строчке запускаем компиляцию файла tetris.cpp вместе с запомненными параметрами. Опции gcc описаны в его справочных руководствах, я же кратко отмечу, что I указывает директорию для поиска заголовочных файлов, а Wall будет показывать все предупреждения.

Так же стоит немного исправить исходный код — ведь заголок GLUT теперь известен компилятору и его не надо искать по каким-либо директориям. Отличия просто в пути директивы инклуда:

localhost:~ oleg$ diff tetris.cpp tetris.cpp_original
7c7
< #include // заголовки OpenGL и GLUT

> #include // заголовки OpenGL и GLUT

Теперь моя поделка нормально собирается и работает под MacOS X. Из интересных штучек замечу, что Apple правила GLUT для своей системы, убрав некоторые ошибки и добавив совместимость с Cocoa. Последнее дало забавный эффект — тут даже у такой простой программы появилось меню со стандартными пунктами и даже кое-какими настройками (в Windows и Linux никаких меню и настроек я не помню).

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s