Установка MinGW

  1. Скачиваем и устанавливаем http://www.mingw.org/ ( mingw-get-setup.exe )
  2. В окне Installation Manager выставляем все галочки ( установить все пакеты )
  3. Далее в этом же окне Installation — Apply Changes — Apply (процесс установки ооочень долгий!)
  4. Прописать C:\MinGW\bin в Path системных переменных.
  5. В командной строке проверяем: g++ —version

Установка Atom

  1. Устанавливаем Atom (привыкаем находить ссылки в гугле самостоятельно =))
  2. После запуска Atom заходим File — Settings — Install
  3. Устанавливаем плагин gpp-compiler (автор kriscross07)

Создание простейшей программы

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
    MessageBox(NULL, "Medvedev School ;)", "Note", MB_OK);
    return 0;
}

Может еще пригодиться

Плагин для запуска Makefile https://atom.io/packages/gcc-make-run

#include 
#include 
#include 
#define LEFT 1
#define UP 2
#define RIGHT 3
#define DOWN 4

BOOL InitApp(HINSTANCE);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void draw_map(HDC&, HBRUSH &myBrush);
void DrawSquare(HDC&, int, int);
void DrawBGSquare(HDC &hdc, int row, int col);
void timer_func(HWND hwnd);
void DrawCherry(HDC &hdc, int row, int col);
void genCherry();

char const szClassName[]   = "WindowAppClass";
char const szWindowTitle[] = "Window Application";
int ro=2, co=3, d=RIGHT;
int rCherry, cCherry;
COLORREF background=RGB(80,120,170);
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow){
  MSG  msg;
  HWND hwnd;
  if(!hPrevInstance)
  {
    if(!InitApp(hInstance))
      return FALSE;
  }
  hwnd = CreateWindow(
    szClassName,         // имя класса окна
    szWindowTitle,       // заголовок окна
    WS_OVERLAPPEDWINDOW, // стиль окна
    5,       // задаем размеры и расположение
    5,       // окна, принятые по умолчанию
    1000,
   900,
    0,                   // идентификатор родительского окна
    0,                   // идентификатор меню
    hInstance,           // идентификатор приложения
    NULL);               // указатель на дополнительные параметры
  // Если создать окно не удалось, завершаем приложение
  //if(!hwnd) return FALSE;
  ShowWindow(hwnd, nCmdShow);
  UpdateWindow(hwnd);
  while(GetMessage(&msg, 0, 0, 0))
  {
    DispatchMessage(&msg);
  }
  return msg.wParam;
}

BOOL
InitApp(HINSTANCE hInstance)
{
  ATOM aWndClass; // атом для кода возврата
  WNDCLASS wc;    // структура для регистрации класса окна
  memset(&wc, 0, sizeof(wc));
  wc.style = 0;
  wc.lpfnWndProc = (WNDPROC) WndProc;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = hInstance;
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wc.lpszMenuName = (LPSTR)NULL;
  wc.lpszClassName = (LPSTR)szClassName;
  aWndClass = RegisterClass(&wc);
  return (aWndClass != 0);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HPEN hpen;
	HBRUSH myBrush;
	srand(time(NULL));
  switch (msg)
  {
  case WM_PAINT:
	  {
		  hdc=BeginPaint(hwnd,&ps);
			// Создание пера
			hpen = CreatePen(PS_SOLID, 2, RGB(200,50,0));
			SelectObject(hdc, hpen);
			// Создание кисти
			myBrush = CreateSolidBrush(background);
			SelectObject(hdc,myBrush);
			draw_map(hdc, myBrush);
			DrawSquare(hdc,ro,co);
			DrawCherry(hdc, rCherry, cCherry);
			// CLEAR
			DeleteObject(myBrush);
			DeleteObject(hpen);
		  EndPaint(hwnd,&ps);
		  return 0;
	  }
	  case WM_KEYDOWN:
	  {
		  switch(wParam)
		  {
		  case VK_RIGHT:
			  {
			      d=RIGHT;
                return 0;
			  }
			  case VK_LEFT:
              {
                  d=LEFT;
                  return 0;
			  }
			  case VK_UP:
                {
                    d=UP;
                    return 0;
                }
              case VK_DOWN:
                {
                    d=DOWN;
                    return 0;
                }
              case VK_SPACE:
                genCherry();
                SetTimer(hwnd,1,300,0);///скорость
                return 0;
          default: return 0;
		  }
	  }
    case WM_TIMER:
	  {
		  timer_func(hwnd);
		  return 0;
	  }
    case WM_DESTROY:
    {
      PostQuitMessage(0);
      return 0;
    }
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}

void DrawLine(HDC &hdc, int x1, int y1, int x2, int y2){
        MoveToEx(hdc, x1, y1, NULL);
        LineTo(hdc, x2, y2);
}

void DrawSquare(HDC &hdc, int row, int col){
        HPEN hpen = CreatePen(PS_SOLID, 0, RGB(111,33,200));
        SelectObject(hdc,hpen);
        HBRUSH myBrush = CreateSolidBrush(RGB(0, 255, 110));
        SelectObject(hdc, myBrush);
        Rectangle(hdc, col*25+4, row*25+4,(col*25+4)+26,(row*25+4)+26);
        DeleteObject(myBrush);
        DeleteObject(hpen);
}

void DrawBGSquare(HDC &hdc, int row, int col){
        HPEN hpen = CreatePen(PS_SOLID, 0, RGB(111,33,200));
        SelectObject(hdc,hpen);
        HBRUSH myBrush = CreateSolidBrush(background);
        SelectObject(hdc, myBrush);
        Rectangle(hdc, col*25+4, row*25+4,(col*25+4)+26,(row*25+4)+26);
        DeleteObject(myBrush);
        DeleteObject(hpen);
}

void draw_map(HDC &hdc, HBRUSH &myBrush){
    HPEN hpen = CreatePen(PS_SOLID, 4, RGB(57,15,125));
    SelectObject(hdc, hpen);

     Rectangle(hdc, 2, 2, 958, 858);

     HPEN hpen1 = CreatePen(PS_SOLID, 1, RGB(111,33,200));
     SelectObject(hdc, hpen1);

     for(int j=29;j<954;j+=25){
         DrawLine(hdc, j, 4, j, 854);
         DrawLine(hdc,4,j,954,j);
     }
    DrawLine(hdc, 954, 4, 954, 854);
}

void timer_func(HWND hwnd){
    if(d==RIGHT){
        if(co!=37){
          co++;
        }
    } else if(d==LEFT){
        if(co!=0){
        co--;
        }
    } else if(d==UP){
        if(ro!=0){
        ro--;
        }
    } else if(d==DOWN){
        if(ro!=33){
        ro++;
        }
    }
    InvalidateRect(hwnd,0,0);
}

void DrawCherry(HDC &hdc, int row, int col){
     Ellipse(hdc, col*25+9, row*25+10,(col*25+4)+19,(row*25+4)+20);
}

void genCherry(){
    srand(time(0));//
    cCherry = rand() % 38;
    rCherry = rand() % 34;
}

Makefile для сборки программы

all: first
	g++.exe -o main.exe main.o -lgdi32 -luser32 -lkernel32 -lcomctl32 -mwindows
first:
	g++.exe -Wall -g -c main.cpp -o main.o
run:
	"main.exe" $(ARGS)