Найти в Дзене
ZDG

Пишем Сапёра на C + SDL!

Мы уже написали Питона на Питоне, там осталась пара доделок, так что можно уже начинать писать Сапёра на C.

Почему C?

Чтобы отдохнуть от Python, познакомиться с прекрасным языком C и получить опыт "реального" программирования.

Что такое "реальное" программирование?

Это просто фигура речи :) Если, скажем, мы пишем программу на Python или JavaScript, то программа готова работать сразу же, как только написана. В обмен на это мы получаем медленную работу, так как текст программы должен транслироваться в машинные коды прямо во время исполнения.

Программа на C тоже транслируется в машинные коды, но только один раз. После этого мы получаем исполняемый файл (в Windows это .exe), который работает очень быстро.

Процесс перевода в машинные коды называется компиляцией (т.е. сборкой) и делается в несколько этапов. Сначала берётся текст программы на C и переводится в текст на языке ассемблера. Это фактически и есть машинные коды, но записанные всё ещё человеческим языком. Например, инструкция на C:

int a = 5

переведётся в такой код на языке ассемблера для процессора x86:

mov a, 5

а если точнее,

mov DWORD PTR -4[rbp], 5

где DWORD PTR -4[rbp] – это собственно вычисление адреса для переменной "a". (Двойное слово по смещению -4 от значения регистра rbp)

После этого ассемблерный файл переводится в специальный формат – объектный файл, и происходит этап линкования. Наша программа линкуется (то есть связывается) с внешними библиотеками, в которых хранятся нужные нам функции.

В Python это делается просто. Скажем, если мы хотим использовать библиотеку pygame, мы пишем в начале программы:

import pygame

В программе на C нам это писать не нужно, но придётся для этапа линкования указать имя библиотеки в командной строке, примерно так:

gcc hello.c -lpygame

Для графики в этом проекте мы будем использовать библиотеку SDL2 (Simple DirectMedia Layer), на которой также основана и pygame. Это кросс-платформенная библиотека, дающая возможность практически напрямую работать с графикой и звуком.

Для компиляции, соответственно, нужна программа-компилятор. Они бывают разные. Причём это не одна программа, а целый комплекс, состоящий из различных утилит, а также стандартных библиотек.

Если вы уже пишете на C и у вас есть Visual Studio или что-то ещё, то можете их использовать, только нужно добавить библиотеку SDL2. Ну а если нет, то мы будем мультиплатформенны до конца и используем компилятор g++, который есть в Linux, а в Windows он представлен пакетом MinGW. Поэтому мы сможем скомпилировать программу и в Windows, и в Linux.

Я поставил себе всё с нуля и расскажу, что и как нужно делать. Но если у вас что-то не заработает, придётся искать решение. Пока речь будет идти о Windows.

Установка MinGW

http://win-builds.org/1.5.0/win-builds-1.5.0.exe

При установке выберите имя папки, куда всё поместить, только советую сделать путь покороче, а то замучаетесь с командной строкой потом. Папка должна быть пустая. Я поставил себе в c:\usr\dev\mingw.

Также выберите опцию x86_64, если у вас 64-битная система.

Далее, там будет вот такой список компонентов:

-2

Я даже ничего не смотрел, просто нажал на кнопку Process в правом верхнем углу, всё это скачалось и установилось. Это заняло примерно 1 гигабайт. Пусть будет.

Внутри каталога, в который вы установили MinGW, есть каталоги bin, include и lib64. Для удобства их надо добавить в переменную среды PATH в вашей системе. Откройте свойства системы, затем дополнительные параметры системы, затем переменные среды, и допишите в конец переменной PATH пути к этим трём каталогам.

-3

На этом установка MinGW закончена. SDL2 там уже есть.

Тестовая программа

Создайте любой каталог, в котором у вас будет проект Сапёра. Создайте в нём простой файл hello.c:

Теперь скомпилируйте этот файл в командной строке, используя:

g++ hello.c

Если всё хорошо, у вас в том же каталоге появится новый файл: a.exe. Запустив его, вы должны увидеть на экране Hello world!

Теперь проверим SDL2. Создайте файл sdl_test.c:

Его нужно скомпилировать следующим образом:

g++ sdl2_test.c -lSDL2main -lSDL2

(l - это маленькая L, а не большая i)

Если всё хорошо, вы опять получите файл a.exe, а при его запуске увидите пустое графическое окно, которое закроется само через 3 секунды.

Поздравляю – можно начинать писать Сапёра на C в следующем выпуске!

Следующая часть: Структура программы

Наука
7 млн интересуются