Мы уже написали Питона на Питоне, там осталась пара доделок, так что можно уже начинать писать Сапёра на 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-битная система.
Далее, там будет вот такой список компонентов:
Я даже ничего не смотрел, просто нажал на кнопку Process в правом верхнем углу, всё это скачалось и установилось. Это заняло примерно 1 гигабайт. Пусть будет.
Внутри каталога, в который вы установили MinGW, есть каталоги bin, include и lib64. Для удобства их надо добавить в переменную среды PATH в вашей системе. Откройте свойства системы, затем дополнительные параметры системы, затем переменные среды, и допишите в конец переменной PATH пути к этим трём каталогам.
На этом установка 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 в следующем выпуске!
Следующая часть: Структура программы