Разработка программы-игры «Змея» на языке С++ с использованием функций WinAPI, страница 7

class CBuffer

{

private:

    HDC hDC;

    HBITMAP hBitmap;

public:

    POINT Size;

CBuffer(HDC hParentDC, int XSize,

  int Size);

    ~CBuffer();

    void Clear();

    HDC GetDC();

};

·  Класс, который формирует финальное изображение из всех кусочков описанных выше.

class CView

{

public:

    …

    CBuffer *Self;

    CView(HWND hWnd);

    void Pause();

    void Win(HWND hWnd);

    void Lose(HWND hWnd);

    void Resume();

    void Refresh(HWND hWnd);

    void Resize(HWND hWnd);

    void DrawTo(HDC hDC);

    ~CView();

};


3 РАЗРАБОТКА ПРОГРАММЫ

         При разработке программы, часто повторяющие блоки операторов для уменьшения размера программы и увеличения быстродействия помещают в функции. В данной программе (не считая функции-методы описанных выше классов) было разработано несколько функций для обеспечения взаимодействия пользователя с этими классами. Рассмотрим каждую из них подробней.

·  double PolarToX(double dx, double radius,

   double angle);

double PolarToY(double dy, double radius,

   double angle);

используются для получения координат в декартовой системе, из следующих данных: смещение центра полярных координат относительно центра в декартовой системе, и собственно координат в полярной системе (радиуса, и угла). Использование данных функций продиктовано условием частого размещения объектов относительно друг друга на определенном расстоянии в определенном направлении, в частности каждого из сегментов тела змеи.

·  VOID CALLBACK Move(HWND hwnd, UINT message, UINT idTimer,

  DWORD dwTime);

вызывается по таймеру и отвечает за обновление изображения на экране и за перерисовку объектов при их изменении если это необходимо.

·  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

является оконной процедурой главного окна. Оконная процедура – это функция, которая вызывается каждый раз, когда в очередь сообщений программы приходить сообщение. В оконной процедуре обязательно должны обрабатываться как минимум три сообщения: WM_CREATE, WM_PAINT и WM_DESTROY.  Но кроме этих трёх, в ней могут обрабатываться и другие. Например, в данном проекте ещё  обрабатывается и сообщение WM_COMMAND, приходящее при в частности при нажатии кнопок на главном окне. С помощью данного сообщения мы осуществляем функционирование меню. При обработке сообщения WM_CREATE, мы создаем и инициализируем классы объектов, создаем меню, используя для этого обычные кнопки, а также стартуем таймер, который будет отвечать за обновление игровой ситуации посредством функции SetTimer. В сообщении WM_PAINT мы вызываем метод DrawTo класса View, с указанием контекста главного окна как цель, куда необходимо выводить полученное в результате обработки изображение. При сообщении WM_DESTROY мы освобождаем всю выделенную ранее память. При  сообщении WM_KEYDOWN мы обрабатываем нажатия пробела и клавиши Enter, в первом случае мы ставим игру на паузу, а во втором иммитируем съедание змеей яблока, реализуя так называемый чит.