Добрый день, дорогие друзья. Этой статьей я начинаю серию уроков посвященных одному из самых популярных языков программирования - с++. Уроки направлены в первую очередь на пользователей, который не знакомы с программированием, поэтому профессионалы, не будьте строги, хотя поддерживаю критику, особенно в свой адрес. В своих уроках я буду использовать среду разработки Code::Blocks , который можно скачать и использовать бесплатно. Начнем конечно с классического Hello, world =)
Я надеюсь что Вы уже скачали и установили Code::Blocks, если это так, то начнем. Запускаем среду разработки
Первым делом создаем новый пустой проект File->New->Project и выбираем Empty project
кликаем Go, затем Next
и в появившемся окне в поле Project title набираем заголовок проекта, в Project filename название проекта и снова Next.
В следующем окне удаляем Objects dir из разделов Create "Debug" configuration и Create "Release" configuration, как показано на скриншоте выше и нажимаем по кнопке Finish. Справа должен появится проект с названием "Hello world"
Следующий этап, добавляем в проект файл File->New->FIle... и в появившемся окне выбираем c/c++ source.
Снова Go, Next, выбираем с++, Next и видим следующее окно
,
тут нам необходимо указать имя файла (я назвал main) и его путь, желательно папку с проектом. Ставим галочки на Debug и Release и кликаем Finish.
И мы получили пустой файл с++, в котором будем писать сам код программы.
Теперь начинаем писать сам код программы. Для вывода информации на экран, нам потребуется библиотека ввода/вывода iostream.
#include
using namespace std ;
Затем пропишем главную функцию, которая будет выполняться при запуске программы
int main()
она обязательно должна называться "main" и указываем ей тип int (об этом мы поговорим в следующих уроках). Между фигурных скобок и будет находится код программы. Мы напишем простую программу, которая будет в консоли выводить приветствие "Hello, world!".
cout<<"Hello, world!" ;
После каждой команду обязательно нужно ставить ";", это говорит компилятору, что команда закончена и можно обрабатывать следующую. cout - выводит значения переменных или строки в командную строку.
Полный листинг программы.
#include
using namespace std;
int main()
cout<< "Hello, world!" ;
return 0 ;
Запускаем проект и видим результат.
Ниже прилагаю видео урок, к даной статье.
Если возникли вопросы, комментарии пишите на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ,">Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. , буду дорабатывать уроки или просто помогать в изучении материалов.
Совсем недавно вышла новая версия среды разработки CodeBlocks (официальное написание через два двоеточия - Code::Blocks). Эта среда разработки уже успела стать очень популярной среди новичков и профессионалов. Если работа над CodeBlocks будет продолжаться в том же духе, он сможет составить весьма достойную конкуренцию Microsoft Visual Studio.
CodeBlocks - это очень популярная свободная кроссплатформенная среда разработки. CodeBlocks имеет в своем арсенале все самое необходимое для разработки: редактор, компилятор, отладчик. Распространяется по лицензии GPL и разрабатывается под такие платформы, как Windows, Linux и Mac OS X. Эту замечательную среду разработки можно собрать из исходников практически под любую Unix-подобную систему (Linux, FreeBSD, ...). Сама CodeBlocks написана на Си++ и использует для работы библиотеку wxWidgets. Легко может масштабироваться за счет подключаемых модулей, благодаря тому, что имеет открытую архитектуру. Поддерживает такие языки программирования, как С, С++, D.
Давайте теперь подробнее остановимся на возможностях среды.
Компиляция
Отличительной особенностью среды разработки CodeBlocks
является то, что в ней реализована поддержка
множества компиляторов. Это очень удобно, например, когда вам нужно открыть уже написанную под какой-то компилятор
ранее программу. Либо, попробовать откомпилировать свой проект с помощью разных компиляторов. Каждый компилятор
имеет свои особенности и объем выдаваемого после компиляции экзешника. Для каждого проекта вы можете выбрать свой
компилятор: выбрать можно как при создании проекта, так и уже в созданном проекте через свойства. Список
поддерживаемых компиляторов приведен ниже.
Также в CodeBlocks имеется поддержка многопрофильных проектов, поддержка рабочих пространств. Имеется возможность импорта проектов, созданных в среде Dev-C++, импорт проектов и рабочих пространств Microsoft Visual Studio.
Интерфейс
Отладка
Реализована возможность визуализации значений переменных и функций, что конечно же упрощает отладку программного кода. Пример смотрим на скрине.
Хочу рассказать о своем первом опыте в геймдеве. Сразу стоит оговориться, что статья будет чисто технической, поскольку моей целью было всего лишь получение навыков разработки графических приложений, использующих Direct3D, без привлечения высокоуровневых средств разработки игр типа Unity. Соответственно, никаких разговоров о внедрении, монетизации и раскрутке игры также не будет. Статья ориентирована на новичков в программировании приложений Direct3D, а также просто на людей, интересующихся ключевыми механизмами работы подобных приложений. Также в конце привожу список литературы по геймдеву, тщательно отобранный мной из более чем ста книг по программированию игр и компьютерной графики.
Что ж, вызов принят. Вот что мы имеем:
Debug или retail
Почему Code::blocks? Наверное, глупо было использовать кросс-платформенную IDE для разработки приложения, использующего некросс-платформенный API. Просто Code::blocks занимает в несколько раз меньше места, чем Visual Studio, что оказалось очень актуальным для моего дачного ПК.
Старт разработки с Direct3D оказался очень прост. В Code::blocks я создал пустой проект (empty project), затем в build options нужно было сделать две вещи:
1) На вкладке search directories и подвкладке compiler добавить путь к директории include DirectX SDK — например, так:
Search directories
Linker
#include "d3d9.h" #include "d3dx9.h"
Класс TGame
class TGame {
private:
BOOL gameOver;
TCell *cells;
WORD *path;
WORD pathLen;
LONG score;
void ClearField();
WORD GetSelected();
WORD GetNeighbours(WORD cellId, WORD *pNeighbours);
BOOL CheckPipeDetonate(WORD *pPipeCells);
public:
TGame();
~TGame();
void New();
BOOL CreateBalls(WORD count);
void Select(WORD cellId);
BOOL TryMove(WORD targetCellId);
BOOL DetonateTest();
WORD GetNewBallList(TBallInfo **ppNewList);
WORD GetLastMovePath(WORD **ppMovePath);
WORD GetDetonateList(WORD **ppDetonateList);
LONG GetScore();
BOOL IsGameOver();
};
Класс TEngine
class TEngine {
private:
HWND hWindow;
RECT WinRect;
D3DXVECTOR3 CameraPos;
LPDIRECT3D9 pD3d;
LPDIRECT3DDEVICE9 pDevice;
LPDIRECT3DTEXTURE9 pTex;
LPD3DXFONT pFont;
D3DPRESENT_PARAMETERS settings;
clock_t currentTime;
TGeometry *cellGeometry;
TGeometry *ballGeometry;
TParticleSystem *psystem;
TBall *balls;
TAnimate *jumpAnimation;
TAnimate *moveAnimation;
TAnimate *appearAnimation;
LONG score;
void InitD3d();
void InitGeometry();
void InitAnimation();
void DrawPlatform();
void DrawBalls();
void UpdateView();
public:
TEngine(HWND hWindow);
~TEngine();
void AppearBalls(TBallInfo *ballInfo, WORD count);
void MoveBall(WORD *path, WORD pathLen);
void DetonateBalls(WORD *detonateList, WORD count);
BOOL IsSelected();
BOOL IsMoving();
BOOL IsAppearing();
BOOL IsDetonating();
void OnResetGame();
WORD OnClick(WORD x, WORD y, BOOL *IsCell);
void OnRotateY(INT offset);
void OnRotateX(INT offset);
void OnZoom(INT zoom);
void OnResize();
void OnUpdateScore(LONG score);
void Render();
};
Класс TApplication
class TApplication {
private:
HINSTANCE hInstance;
HWND hWindow;
POINT mouseCoords;
TEngine* engine;
TGame* game;
BOOL moveStarted;
BOOL detonateStarted;
BOOL appearStarted;
void RegWindow();
static LRESULT CALLBACK MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void ProcessGame();
public:
TApplication(HINSTANCE hInstance, INT cmdShow);
~TApplication();
TEngine* GetEngine();
TGame* GetGame();
INT MainLoop();
};
Рассмотрим подробнее классы движка и контроллера.
TEngine::Render()
void TEngine::Render()
{
//вычисляем, сколько миллисекунд прошло с момента отрисовки предыдущего кадра
clock_t elapsed=clock(), deltaTime=elapsed-currentTime;
currentTime=elapsed;
//обновляем позиции анимаций, если они активны
if(jumpAnimation->IsActive())
{
jumpAnimation->UpdatePosition(deltaTime);
}
if(appearAnimation->IsActive())
{
appearAnimation->UpdatePosition(deltaTime);
}
if(moveAnimation->IsActive())
{
moveAnimation->UpdatePosition(deltaTime);
}
pDevice->Clear(0,NULL,D3DCLEAR_STENCIL|D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
pDevice->BeginScene();
//рисуем платформу
DrawPlatform();
//рисуем шары
DrawBalls();
//если активна система частиц, то обновляем положения частиц и рендерим их с текстурой
if(psystem->IsActive())
{
pDevice->SetTexture(0,pTex);
psystem->Update(deltaTime);
psystem->Render();
pDevice->SetTexture(0,0);
}
//вывод заработанных очков
char buf="Score: ",tmp;
itoa(score,tmp,10);
strcat(buf,tmp);
RECT fontRect;
fontRect.left=0;
fontRect.right=GetSystemMetrics(SM_CXSCREEN);
fontRect.top=0;
fontRect.bottom=40;
pFont->DrawText(NULL,_T(buf),-1,&fontRect,DT_CENTER,D3DCOLOR_XRGB(0,255,255));
pDevice->EndScene();
pDevice->Present(NULL,NULL,NULL,NULL);
}
TApplication::MainLoop()
INT TApplication::MainLoop()
{
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//если нет сообщений, то обрабатываем состояние игры и занимаемся рендерингом
ProcessGame();
engine->Render();
}
}
return (INT)msg.wParam;
}
А вот и функция менеджера состояний:
TApplication::ProcessGame()
void TApplication::ProcessGame()
{
if(moveStarted)
{
//ждем до окончания анимации перемещения
if(!engine->IsMoving())
{
//перемещение окончено - тестируем на взрыв
moveStarted=FALSE;
if(game->DetonateTest())
{
//инициируем взрыв и увеличиваем очки
WORD *detonateList,
count=game->GetDetonateList(&detonateList);
detonateStarted=TRUE;
engine->DetonateBalls(detonateList,count);
engine->OnUpdateScore(game->GetScore());
}
else
{
//иначе пытаемся добавить шары
if(game->CreateBalls(APPEAR_COUNT))
{
TBallInfo *appearList;
WORD count=game->GetNewBallList(&appearList);
appearStarted=TRUE;
engine->AppearBalls(appearList,count);
}
else
{
//game over!
}
}
}
}
if(appearStarted)
{
//ждем до окончания анимации появления
if(!engine->IsAppearing())
{
appearStarted=FALSE;
//появление окончено - тестируем на взрыв на всякий случай
if(game->DetonateTest())
{
//инициируем взрыв и увеличиваем очки
WORD *detonateList,
count=game->GetDetonateList(&detonateList);
detonateStarted=TRUE;
engine->DetonateBalls(detonateList,count);
engine->OnUpdateScore(game->GetScore());
}
}
}
if(detonateStarted)
{
//ждем до окончания анимации взрыва
if(!engine->IsDetonating())
{
//просто сбрасываем флаг
detonateStarted=FALSE;
}
}
}
Надеюсь, мои изыскания принесут кому-то пользу. Кстати, исходники на github .
Спасибо за внимание!
Теги: Добавить метки
Интегрированная среда разработки (IDE) Code::Blocks (далее CB) представляет собой полноценный продукт для разработки приложений на языке C/C++. CB – это кроссплатформенная среда, разработанная с использованием библиотеки инструментов wxWidgets. Имеются версии среды как для Windows, так и для других операционных систем (ОС) - Linux и Mac OS. Эта IDE абсолютно бесплатна, имеет открытый исходный код и построена полностью с использованием открытых технологий. Одним из самых сильных сторон CB является поддержка создания приложений wxWidgets – т. е. такого программного обеспечения (ПО), которое для отрисовки графического пользовательского интерфейса (GUI) использует API ОС. Другими словами, CB позволяет создавать кроссплатформенное ПО на любой вкус.
CB умеет работать с большим количеством компиляторов. Если в системе их установлено несколько - можно с лёгкостью переключаться между ними, в зависимости от потребности. Плюс ко всему, IDE сама на этапе установки просканирует систему на наличие доступных компиляторов и предложит задействовать один как основной. Доступна возможность позже изменять эти настройки как глобально, так и отдельно для проектов. Для глобальных настроек среды существует целый раздел «Settings» в главном меню CB. Чтобы внести какие-либо специфические настройки, характерные для конкретного проекта, нужно открыть окно свойств проекта. Для этого необходимо вызвать контекстное меню проекта, кликнув по нему правой клавишей мыши, и выбрать пункт «Properties». Сами проекты (открытые в данный момент в IDE) выведены в виде дерева в док-панели «Management», в её вкладке «Projects». Теперь, в открывшемся окне свойств можно настраивать самые разнообразные параметры, начиная от редактирования целей сборки и заканчивая подключением сторонних библиотек. Кнопка «Project’s build options» на вкладке «Project Settings» того же окна свойств позволит очень гибко настроить для конкретного проекта конфигурацию сборки: ключи компилятора, выбрать сам компилятор, подключить библиотеки для линковщика и т. п. Всё это можно проделать для отдельных режимов: «Release» «Debug».
GUI CB построен на основе плавающих и растягивающихся док-панелей, которые можно пристыковывать к любым сторонам главного окна IDE, просто перетаскивая их мышкой. Благодаря этому, можно очень гибко настраивать различные компоновки интерфейса для различных размеров экрана, оптимизируя эргономику GUI. Если мониторов несколько - удобно отделить некоторые панели от основного окна и разместить их на соседних мониторах.
Подсветка, автодополнение кода и средства редактирования в CB делают процесс работ с кодом лёгким и комфортным. Огромный арсенал настроек позволяет очень тонко настраивать среду «под себя». Очень полезным является наличие поддержки работы с переменными окружения. Благодаря этой возможности CB можно очень тесно интегрировать в систему и расширять его возможности, например, таким образом можно подключать библиотеку wxWidgets.
В этом пособии вы найдете легкие инструкции со скриншотами для установки компилятора (MINGW компилятора), инструмента, который позволит вам преобразовать код, который вы пишете в программу и Code::Blocks, бесплатную среду разработки для C и C++. В этом пособии объясняется как установить Code::Blocks на Windows 2000, XP, Vista или Windows 7. Примечание: если вы работаете в Linux, перейдите по ссылке, чтобы узнать, как использовать GCC, если вы используете OS X, нажмите здесь, чтобы настроить его с помощью Apple XCode.
Перед вами откроется окно Compilers auto-detection:
Когда перед вами появится окно автоматического обнаружения компилятора, просто нажмите OK. Code::Blocks может спросить, хотите ли вы связать его с просмотром C/C++ файлов по умолчанию — я советую вам это сделать.
Нажмите на меню File и в разделе New , выберите Project ... Появится следующее окно:
Нажмите на Console Application , а затем Go . Нажимайте next , пока не дойдете до :
Вам будет предложено выбрать между C или C++. Если вы не уверены, используйте C++. В противном случае, выберите язык, который вы изучаете. (Вы можете найти пособия по С и С++ .)
После нажатия Next , Code::Blocks спросит, где вы хотите сохранить консольное приложение:
После нажатия Next еще раз, вам будет предложено настроить компилятор:
Вам не нужно ничего делать, просто нажмите Finish и используйте значения по умолчанию.
Теперь слева вы можете открыть файл main.cpp:
(Вам, возможно, потребуется раскрыть содержание папки Sources , если вы не видите main.cpp).
Теперь у вас есть свой файл main.cpp , который вы можете изменять при желании. На данный момент, он просто говорит: Hello World! , поэтому мы можем запустить его таким, какой он есть. Нажмите F9 , для того чтобы сначала скомпилировать, а потом запустить его.
Теперь у вас есть работающая программа! Вы можете просто отредактировать main.cpp, а затем нажать клавишу F9, чтобы скомпилировать и запустить его снова.
Теперь, когда вы закончили установку компилятора, самое время учиться программированию: на C++ (или, если вы изучаете C, программирование на C).
Если что-то не работает, то чаще всего появляется сообщение:
CB01 — Debug» uses an invalid compiler. Probably the toolchain path within the compiler options is not setup correctly?! Skipping…
Во-первых, убедитесь, что вы скачали правильную версию Code::Blocks, ту, которая содержит MinGW . Если так вы не решите проблему, то, скорее всего, проблема с автоматическим обнаружением компилятора. Вы можете проверить текущее состояние «авто-определения» так. Перейдите в Settings|Compiler and Debugger... . Затем слева выберите Global Compiler Settings (он имеет значок с изображением шестеренки), а справа, выберите вкладку Toolchain executables . В этой вкладке есть Auto-Detect , который можно использовать. Это может решить проблему — если нет, вы можете сделать это вручную. На скриншоте показано, как все это выглядит на моей системе. Измените путь с пометкой Compiler"s installation directory , если вы установили в другом месте, и убедитесь, что все остальное заполняется как показано на рисунке.
После того как вы сделали это, попробуйте нажать F9 еще раз, чтобы проверить, можете ли вы запустить программу.