Авторские права пренадлежат DCamer (взято с оффициального форума CryZone)
Статья 1 : Первое знакомство.
1. Небольшое введение.
Было ли у вас такое, что запустив свою любимую игру, вы в очередной раз вздыхали: «Вот если бы при ударе этим молотом земля вздрагивала», «Почему эта магическая стрела не проходит на вылет и не поражает следующих врагов», «А вот эту кнопочку было бы удобнее переместить сюда».
А может быть у вас уже давно есть идея сделать собственную игру, вот только вы не знаете как, с чего начать. Что ж, я попытаюсь вам в этом помочь.
Большинство тех захватывающих игр, что заставляли вас ночи напролет просиживать у монитора, написаны на языке программирования С++.
В этой и последующих статьях я познакомлю вас с основами этого замечательного языка. Сделать это я попытаюсь как можно проще и понятнее. И, поскольку мы учим С++ для того, чтобы делать игры, каждая статья будет строится на примере создания простенькой игры.
Постепенно, вместе с ростом наших знаний и опыта, игры будут усложняться.
Конечно, путь этот долог и тернист, но не переживайте, у вас обязательно все получиться. Главное – не сомневаться в себе и быть настойчивым.
2. Первая программа на С++
Начнем. Думаю, что такое программа вообще, вы знаете, ну или, в крайнем случае - догадываетесь. Но что же такое программа на С++. Если не вдаваться в особые подробности то программа на С++ это никакая не программа, а текстовый документ содержащий набор необходимых инструкций, и оформленных с соблюдениями некоторых правил, которые называют синтаксисом языка. Этот текстовый документ также называют исходным текстом или исходным кодом.
Выглядит все это приблизительно так:
#include using namespace std; int main( void ) // главная функция программы { cout << "Начинающий программист приветствует этот мир!"; return 0; }
Совершенно непонятно, да к тому же и на английском. Правда? Ну что ж, сейчас будем со всем разбираться.
Первая строчка:
#include
В мире очень много программистов. Чтобы облегчить им жизнь и сэкономить время, некоторые часто используемые фрагменты кода были собрана в обширные библиотеки. Для лучшей ориентации в этих библиотеках их содержимое описывают в специальных заголовочных файлах. Команда #include подключает один из таких файлов с названием iostream.
Следующая строчка:
using namespace std;
тесно связана с предыдущей. Она заставляет работать подключенные библиотеки так, как нам нужно. Более подробно ее назначение будет объяснено в следующих статьях, поскольку сейчас оно окажется весьма сложным.
Далее идет:
int main( void ) // главная функция программы
Первая часть строки:
int main( void )
это название самой главной функции, с которой начинается выполнение программы. Функция - это код или фрагмент кода, выполняющий определенные действия. С ними мы также познакомимся позже. Сейчас достаточно знать, что функция с названием main должна содержаться в каждой программе.
Вторая часть строки:
// главная функция программы
это комментарий.
Комментарии никак не влияют на выполнение программы. Они используются для вставки пояснений, зачем предназначен конкретный код, делая его таким образом намного понятнее.
Есть два способа писать комментарии.
Первый, тот что был использован нами в примере: (//) – использование пары слешей( слеш - это вертикальная, наклоненная вправо косая черта). Все что находится после слешей и до конца текущей строки считается комментарием.
Второй способ – использование следующей конструкции:
/*коментарий*/
/* - открывает комментарий, а */ - его закрывает. Все, что находится между ними, считается комментарием и игнорируется. Таким образом комментарий можно растянуть на несколько строк или вставить в любое место кода. Вот так:
using namespace /*комментарий*/ std;
или так:
int main(/*комментарий*/void )
Следующая строка состоит всего из одного символа – фигурной скобки:
{
Эта скобка открывающая. Если посмотреть дальше по коду то можно найти ее сестру } – скобку закрывающую. Между этими скобками заключается принадлежащий функции main код. Этот код также называют «телом функции».
Но мы немного забрались вперед, поэтому возвращаемся назад к строчке:
cout « "Здравствуй, мир!";
Здесь cout – некий объект, представляющий средство для вывода данных. Для того, чтобы им пользоваться мы и подключили файл iostream.
cout можно перевести с английского как с-Вывод(с-Out). Все что он делает в нашем случае, это печатает строку "Здравствуй, мир!" на экране.
Ну и на конец:
return 0;
Этой строчкой заканчивается выполнение функции main. Обычно выполняющая какую либо работу функция, возвращает таким образом результат своей деятельности. Но, поскольку main у нас самая главная, и после нее уже никакие действия выполняться не будут, возвратив 0, она показывает системе, что ее работа успешно завершена.
Как вы наверное заметили, большинство строк заканчивается точкой с запятой (
.
Таким образом в исходном коде эти строки отделяются друг от друга. Это обязательное правило, но не для всех строк. Чтобы понять где ставить точку с запятой, а где нет, введем такое понятие как инструкция. Каждая строчка кода, предназначенная для выполнения какого либо действия в конечной программе, называется инструкцией или оператором. По сути оператор это символ(+,-), пара символов(++, ==) или даже некий термин(sizeof), которые заставляют компьютер выполнять определенные действия. После инструкции или оператора обязательно ставится точка с запятой.
Но как мы можем видеть, после #include запятой нет. Все потому что #include - это так называемая директива предпроцессора. Директива начинаются со знака # и после нее точка с запятой не ставится. Директивы выполняются компилятором еще до начала процесса компиляции, поэтому на компиляцию поступают не они сами, а результат их работы.
Я только что трижды использовал непонятное слово – компиляция. Дальше вы узнаете, что это такое.
3. Немного о компиляции
Мы уже разобрались с устройством простейшей программы на С++. Все, что теперь нужно, это увидеть как она работает. Но не все так просто. Для того чтобы запустить программу, из понятной нам ее нужно сделать понятной для нашего компьютера.
Представьте что компьютер это иностранец, с которым вам необходимо поговорить, но требуемого языка вы не знаете. В таком случае вам поможет переводчик. Вот и в компьютере используется подобный переводчик, превращающий написанный вами исходный текст в понятный компьютеру «машинный код». Это делается с помощью специальной программы - компилятора, а сам процесс называется компиляцией. Только странный это переводчик. В машинный код он переводить умеет, а вот обратно – нет.
Но компиляция не делает из исходного кода полноценную программу. Компилятор лишь выдает нам результат своей работы - объектный файл. Почему так?
В нашей программе используется средство для вывода текста в виде объекта cout, функциональность которого обеспечивается сторонней библиотекой. Для работы эта библиотека, да и другие, о которых вы пока и понятия не имеете, должна быть подключена к вашей программе. Эти функции выполняет программа компоновщик. Она запускается после компилятора и компонует (собирает вместе) ваш объектный файл с необходимыми библиотеками, в результате чего создает исполняемый файл.
Как же все сложно, скажете вы. И будете правы. Когда-то все эти действия приходилось выполнять вручную, но сейчас для этих целей созданы специальные программы, в которых все необходимые инструменты (компилятор, компоновщик, редактор исходного кода и другие) собраны (интегрированы) вместе. Они так и называются - Интегрированная среда разработки программного обеспечения. На английском - Integrated Development Environment или сокращенно – IDE. Этим нерусским термином мы и будем чаще всего пользоваться.
4. Подготовка и основы работы с IDE Microsoft Visual Studio 2008
В процессе обучения мы будем использовать среду разработки Microsoft Visual Studio 2008. Взять ее можно на официальном сайте компании Микрософт. Студия поставляется в нескольких версиях:
Express – бесплатная, но с сильно урезанной функциональностью.
Standard, Professional, Team System
– платные и полнофункциональные, но Микрософт дает на них довольно продолжительный период ознакомительного (триал) использования, на некоторые версии до 180 дней. Для обучения вполне хватит.
В общем, выбор я оставляю на ваше усмотрения, но сам буду использовать Microsoft Visual Studio Team System 2008 (в дальнейшем я буду называть ее просто - Студия). Если у вас не эта версия, то возможны некоторые отличия в интерфейсе на скринах. Обязательно качайте русскую версию, так будет проще и вам и мне.
Если вы выбрали Express, то рекомендую также скачать и установить отдельно поставляемую библиотеку документации – MSDN. Для остальных версий она входит в пакет установки. Поверьте, эта документация вам еще не раз пригодится.
Приступаем к работе
Будем считать, что Студию вы уже скачали и установили. Запустив ее, вы увидите вот такое окно:
- СПОЙЛЕР:
Кроме панелей инструментов, в основном окне присутствуют три области – три окна:
Окно, в котором сейчас по умолчанию открыт Проводник решений – нечто вроде Проводника Windows, только этот служит для навигации по файлам проекта.
Рабочая область – окно, в котором сейчас открыта начальная страница, а в дальнейшем здесь будет открыт файл исходного кода.
Окно определения кода – в этом месте, во множестве вкладок, будет выводится информация о процессе создания программы, ее работе, уведомления об ошибках и другое.
Создание нового проекта
Далее для работы нам необходимо создать новый проект и добавить в него файл для исходного кода.
Делается это так:
1.
Выберите пункт Файл→Создать→Проект (подобная запись означает что вам необходимо кликнуть на пункте меню «Файл», затем в появившейся панели выбрать «Создать» и в следующей панели кликнуть на меню «Проект…»)
- СПОЙЛЕР:
Откроется окно Новый проект. В левой его части Типы проектов необходимо кликнуть на плюсике напротив пункта Visual C++ и в открывшемся списке выбрать Win32. После этого в правой части Шаблоны выбрать «Консольное приложение Win32». Далее внизу указать имя нового проекта (у меня это Siege, вы же можете выбрать какое вам понравится), расположение каталога для проекта и поставить галочку напротив пункта «Создать каталог для решения». Имя решения будет заполнено автоматически, но при желании его можно изменить. Мы этого делать не будем.
- СПОЙЛЕР:
Жмем ОК.
В следующем окне Мастер приложений Win32 в левой его части выбираем пункт Параметры приложения и в правой отмечаем галочкой Пустой проект. Если этого не сделать будет создан проект с несколькими файлами и пока нежелательными для нас настройками.
- СПОЙЛЕР:
Жмем Готово.
После этого обозреватель решений примет такой вид:
- СПОЙЛЕР:
В нем появился наш проект и три папки. Папка Заголовочные файлы и Файлы исходного кода предназначены для, как нетрудно догадаться, хранения файлов исходного кода.
В папке Файлы ресурсов будут хранится всевозможные ресурсы, которые предполагается встраивать в исполняемый файл.
Добавление файлов для исходного кода
Как мы и хотели ранее, проект пуст. Поэтому сейчас нам необходимо добавить файл для написания исходного кода. Делается это просто. Кликаем правой кнопкой в обозревателе решений на папке Файлы исходного кода и в появившемся контекстном меню выбираем Добавить → Создать элемент…
Откроется следующее окно:
- СПОЙЛЕР:
В Категориях нужно выбрать пункт Код, а в Шаблонах – Файл С++(.срр). (.срр - это формат расширения текстового файла, в котором содержатся исходные коды, написанные на языке С++).
В строку Имя необходимо ввести желаемое имя файла.
После этого можно нажать Добавить.
В обозревателе решений в папке Файлы исходного кода должен появиться новый файл. В моем случае это Siege.cpp.
- СПОЙЛЕР:
Первая программа на С++ в действии.
Пустой файл для исходного кода у нас теперь имеется, можно попробовать в действии программу, которую мы рассматривали во второй части статьи.
Производим двойной клик в обозревателе решений на нашем файле, после чего он открывается во встроенном в студию редакторе, там, где раньше была открыта начальная страница.
Далее, копируем в редактор исходный код нашей первой программы.
Как мы можем видеть - код раскрасило разными цветами. Это умная студия решила нам помочь, улучшив таким образом ориентацию в коде. Каждый цвет служит своим целям. Синий – ключевые слова, красный – строки, зеленый – комментарии, черный – иные операторы и инструкции.
- СПОЙЛЕР:
Теперь все что нам необходимо это создать исполняемую программу, или как это называется в студии - построить решение. Для этого нужно:
Откомпилировать исходный код.
Провести его компоновку, то есть собрать файлы проекта в один исполняемый файл.
Делается все это нажатием всего одной кнопки - F7.
Студия быстро выполнит все необходимые действия попутно выводя отчет о работе во вкладку Вывод, открывшуюся внизу вместо «Окно определения кода».
- СПОЙЛЕР:
После этого приложение можно запустить, нажав комбинацию клавиш Ctrl+F5 или просто F5. Разницу между этими комбинациями мы узнаем немного позже.
При этом может появится вот такое диалоговое окно с вопросом:
- СПОЙЛЕР:
Оно означает, что с момента последнего построения в исходный код были внесены изменения. Рекомендую отметить «Больше не выводить это сообщение» и нажать Да.
Кстати, из этого также следует, что специально проводить построение нет необходимости, достаточно нажать Ctrl+F5 или F5, и если исходный код изменялся, студия откомпилирует и скомпонует его автоматически.
В общем, вы нажали кнопку, но вместо запущенной программы на долю секунды появилось и пропало черное окно. В чем же проблема? Возможно ошибка?
Нет! Посмотрев в окно Вывод можно заметить там такую строчку.
Программа "[3724] Siege.exe: Машинный код" завершилась с кодом 0 (0x0).
Ничего вам не напоминает? Объясняя код первой программы, я говорил о команде return 0;. О том, что в случае успешного завершения работы программы она возвращает ноль. «завершилась с кодом 0» - это он и есть. А значит, программа отработала так, как нужно. Все дело в том, что после того, как была отображена надпись, программа сразуже закрылась, и мы ничего не увидели. Нужно ее как-то затормозить.
Это мы сможем сделать, добавив перед return 0; следующую строчку:
cin.get();
Она заставит окно программы оставаться открытым, пока не будет нажата любая клавиша. Внеся изменения в код, запускаем проект и появившемся окне видим следующее:
- СПОЙЛЕР:
Еще одна неприятность. Вместо нашего текста выводится какая-то абра-кадабра. Все дело в том, что командная строка по умолчанию не поддерживает русский язык.
Исправить это нам поможет еще одна строчка кода, которая настроит консоль на правильное отображение русских букв:
setlocale( LC_ALL, "Russian" );
Поместить ее необходимо внутри функции main перед выводом текста:
setlocale( LC_ALL, "Russian" ); cout << "Начинающий программист приветствует этот мир!";
После этого все заработает так, как нужно и после запуска появится вот такое окно.
- СПОЙЛЕР:
Что ж, поздравляю. На этом знакомство с основами работы с Microsoft Visual Studio завершено. В процессе обучения я, по мере необходимости, буду давать информацию на этот счет, а пока вы узнали все, что нужно.
Прежде чем переходить к освоению следующего материала, советую немного поиграться со Студией, потыкать кнопочки, поковырять менюшки. На данном этапе вам необходимо освоиться с этой средой разработки и только после этого следовать дальше.