Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный.
М. Монтень
Одно из заблуждений у начинающих программистов — это то, что в программировании много математики в чистом виде. На самом деле, в программировании это встречается довольно редко.
Логики, напротив, очень много. Необходимость думать наперёд, понимать, в каком порядке выполнять действия и как контролировать этот поток, пронизывает все аспекты программирования. Здесь можно руководствоваться высказыванием Ломоносова: «Математику уже затем учить надо, что она ум в порядок приводит». Главным для программиста является то, что математика развивает логическое мышление, которое является неотъемлемым компонентом.
Даже самые сложные задачи программирования имеют логическое решение. Поэтому в первую очередь, хороший разработчик должен обладать аналитическим складом ума.
Чтобы приступить к написанию программ, специалист должен знать и владеть следующими разделами математики: теория графов, математическая логика.Это поможет в понимании логики работы условий и при построении алгоритмов.
Существует множество способов для развития логического мышления. Логические игры, как один из способов, является хорошим и наиболее эффективным упражнением.
Логические игры — игры, непосредственно связанные с решением различных логических задач. Наиболее широко такие игры применяются в педагогике для обучения. Логическое мышление в таких играх развивается путем разгадывания анаграмм, решением специальных логических задач, составлением кроссвордов и головоломок.
Существуют курсы, построенные на развитии полезных навыков через игру. При этом используются совершенно разные игры: от шахмат до головоломок для современных мобильных платформ. Для многих людей решение подобных задачек стало привычным досугом, который к тому же развивает мышление, а не является пустым времяпровождением.
Разработчик логических игр должен обладать алгоритмическим и логическим мышлением.
Алгоритмизация — это набор определенных практических приемов, особых специфических навыков рационального мышления в рамках заданных языковых средств.
Логическое мышление — это особый вид мышления, при котором пользуются четкими понятиями, правилами и законами, логическими конструкциями. Оно необходимо при принятии решений в конкретной ситуации, когда требуется анализ ранее полученных знаний.
Логическое мышление, как и любой другой навык, надо постоянно тренировать. Логические игры способствуют развитию нестандартного мышления, внимания и памяти.
Игры надо воспринимать как психологическую модель развития интеллектуальных способностей человека, и прежде всего, как развитие внимания, которое всегда находится в эпицентре мыслительной деятельности. Интеллектуальная игра развивает воображение — главный компонент творческого мышления. Воспитывает способность сомневаться в очевидном, и учит искать альтернативные пути решения задачи.
Для того, чтобы организовать программирование логической игры средствами языка C++, необходимо использовать графическую библиотеку. Программист должен реализовывать алгоритмы не только логических вычислений, но и отрисовки графики, действий пользователя. Одной из подходящих для этого графических библиотек является Simple DirectMedia Layer (SDL).
SDL — свободная кроссплатформенная библиотека, написанная на Cи. Может быть использована на большом количестве языков программирования. Активно используется для создания компьютерных игр.
SDL основана на структурном программировании и для создания небольших анимированных изображений, часто состоящих всего из нескольких кадров, не требует особых затрат по времени.
Основная часть библиотеки предлагает лишь ограниченный базовый набор функций, тогда как для использования дополнительных (таких как вывод текста, например) необходимо подключать дополнительные расширения.
Рассмотрим структуру игрового проекта, написанного при помощи SDL (рис.1.). При запуске программы инициализируется большинство переменных, такие как SDL_Window, SDL_Renderer и другие, необходимые конкретно в данном проекте. Далее создается какое-то начальное графическое изображение, которое отрисовывается в начале игры.
Рис. 1. Структурная схема игрового проекта
После начальной инициализации параметров происходит вход в игровой цикл, выход из которого организуется при помощи проверки определенного действия пользователя (чаще всего нажатием кнопки «Закрыть» или нажатием клавиши ESCAPE).
Игровой цикл построен так: сначала идет проверка различных действий пользователя (чаще всего нажатие определенных клавиш) и пересчет параметров, зависящих от этих действий. Затем идет пересчет параметров, не зависящих от действий игрока. Дальше отрисовывается новое изображение. И в конце цикла нужно выполнить очистку памяти и удаление созданных объектов.
Всё рисование в SDL происходит через рисовальщик — SDL_Renderer. Создать рисовальщик можно с помощью функции SDL_CreateRenderer(window, index, flags), где window — созданное ранее окно, index — номер желаемого рисовальщика, flags — перечисление флагов.
Библиотека SDL содержит функции для отрисовки графических примитивов, таких как прямоугольник, точка и линия:
SDL_RenderDrawPoint(renderer, x, y) — нарисовать точку в координатах x, y.
SDL_RenderDrawLine(renderer, x1, y1, x2, y2) — нарисовать отрезок из точки (x1; y1) в точку (x2, y2).
SDL_RenderDrawRect(renderer, rect) — нарисовать прямоугольник, rect — указатель на структуру, описывающую координаты прямоугольника (описано ниже).
SDL_RenderFillRect(renderer, rect) — нарисовать закрашенный прямоугольник.
Кроме того, рисовальщик позволяет нарисовать набор примитивов за один вызов функции. Нужные координаты передаются через массив специальных структур.
SDL_RenderDrawPoints(renderer, points, count) — нарисовать count точек из массива points. Каждая точка задаётся структурой, описывающей её координаты.
SDL_RenderDrawLines(renderer, points, count) — нарисовать ломаную из count-1 отрезков, заданных count точками из массива points.
SDL_RenderDrawRects(renderer, rects, count) — нарисовать набор прямоугольников.
SDL_RenderFillRects(renderer, rects, count) — нарисовать набор закрашенных прямоугольников.
Присутствует возможность загрузки изображений и текстур из файлов.
Для чтения событий есть две функции: SDL_WaitEvent(&event) и SDL_PollEvent(&event). Первая функция приостанавливает работу программы до того момента, как произойдет какое-либо событие. Вторая функция получает информацию о произошедшем событии в режиме реального времени.
SDL позволяет получать информацию о различных типах собыий. Для программирования игры наибольший интерес представляют события клавиатуры и мыши. Информация о произошедшем событии хранится в объекте структуры SDL_event. Для клавиатуры сохранятеся не только факт произошедшего события, но и тип нажатой клавиши. События мыши различаются на события перемещения и события нажатой кнопки (левой и правой, а также количество кликов).
Для работы с аудио применяются функции, описанные в заголовочном файле SDL_audio.h. Для загрузки звука применяется функция SDL_LoadWAV(). Присутствует возможность работы с фоновой музыкой и отдельными звуками.
Исходя из вышесказанного, можно сделать вывод, что для программирования в целом необходимо каждый день развивать логическое мышление, в чем помогают различные логические игры. При их разработке программист не только улучшает свои навыки, но и учится смотреть на программу со стороны пользователя.
Написание игровых проектов очень часто применяется при выборе тем курсовых работ у первокурсников. Эта тема позволяет в полной мере продемонстрировать умение студента работать с основными приемами программирования. Написание игры требует навыков работы с графикой. Графическая библиотека SDL наиболее широко позволяет показать умения владеть языком С и развить навыки алгоритмизации.
Литература:
- Кнут Д. Э. Искусство программирования. Том 1. Выпуск 1. MMIX — RISC-компьютер для нового тысячелетия // Вильямс. — 2007. — С. 682.
- Коптенок Е. В., Кустова Д. В., Полшкова И. В. Применение графической библиотеки SDL2.0 для программирования компьютерных игр на языке СИ // Молодой ученый. — 2017. — № 46. — С. 30–33.
- Официальный сайт библиотеки SDL. URL: http://www.libsdl.org/
- Официальный сайт документации для библиотеки SDL. URL: http://wiki.libsdl.org/FrontPage