Пошаговое создание игры «Same Game». Урок №2

  Дмитрий Бушуев  | 

  Обновл. 13 Авг 2019  | 

 1815

В этом уроке мы поговорим об архитектуре «Document/View» и о том, как и зачем она используется, а также начнём уже писать код нашей игры.

Архитектура «Document/View»

Архитектура «Document/View» — это очень интересная парадигма в программировании, в которой мы отделяем фактические данные нашего приложения от отображения их пользователю. Document содержит все данные, в то время как View получает эти данные из Document и отображает их пользователю в том или ином виде. Здесь наши данные — это игровая доска, время, необходимое для завершения игры, и другая соответствующая информация. Наш View отображает игровое поле в виде цветных блоков и позволяет пользователю кликать по блокам. View обрабатывает взаимодействие с пользователем и изменяет игровые данные в документе соответствующим образом, а затем обновляется, чтобы отразить изменения. Затем цикл повторяется.

При выборе архитектуры «Document/View» в мастере приложений MFC, автоматически создаётся вся необходимая кодовая база вместе со всеми нужными механизмами, относящимися к использованию данной технологии.

The Document: Хранение данных


Наконец-то пришло время начать писать исходный код нашей игры. Прежде, чем мы сможем отобразить что-либо на экране, нам понадобятся данные.

Сначала мы создаём класс, представляющий нашу игровую доску — CSameGameBoard. Создайте новый класс, щёлкнув правой кнопкой мыши по проекту SameGame в «Обозревателе решений» и выбрав «Добавить > Класс...». Укажите CSameGameBoard в качестве имени класса.

Теперь давайте заполним класс игровой доски. Вот код для заголовочного файла SameGame.h:

Этот класс сам по себе довольно простой. Он содержит указатель m_arrBoard на двумерный массив целых чисел, которые представляют один из трёх цветов (элементы с индексами 1-3), либо цвет фона (элемент с индексом 0). Затем мы добавляем переменные-члены, чтобы отслеживать строки (m_nRows), столбцы (m_nColumns), ширину (m_nHeight) и высоту (m_nHeight) в пикселях. Здесь также присутствуют функции для создания, настройки и удаления доски.

Метод CreateBoard() нужен для выделения памяти под двумерный массив, в котором будет храниться игровое поле, и для инициализации всех блоков значением фонового цвета. Метод SetupBoard() сбрасывает игровое поле путём случайного выбора цвета для каждого элемента поля на доске. Наконец, метод DeleteBoard() освобождает память, которую мы используем для игровой доски (в противном случае, это может привести к утечкам памяти).

В игровой доске также присутствует массив m_arrColors[] элементов типа COLORREF. Тип COLORREF — это 32-битный целочисленный тип unsigned, который содержит значение цвета блока в формате RGBA. Элемент массива m_arrColors[0] хранит фоновый цвет игровой доски, а элементы m_arrColors[1], m_arrColors[2] и m_arrColors[3] — цвет блоков. В конструкторе ниже мы будем использовать макрос RGB для создания значения COLORREF из трёх целых чисел, представляющих собой числовое обозначение красного, зеленого и синего цветов.

Ниже приведена реализация класса CSameGameBoard в SameGameBoard.cpp:

Теперь, когда наша игровая доска инкапсулирована в объект, мы можем создать экземпляр этого объекта в классе документа. Помните, что класс документа содержит все наши игровые данные и отделён от кода View.

Вот заголовочный файл SameGameDoc.h:

Большая часть этого кода покажется вам уже знакомой, за исключением нескольких вещей, специфичных для MFC. Пока мы не будем заострять внимание на строках с DECLARE_DYNCREATE и DECLARE_MESSAGE_MAP, так они являются типичными директивами MFC.

Сейчас документ по сути является простой обёрткой для нашего класса. Мы добавили экземпляр нашего класса и семь функций, которые вызывают аналогичные функции класса SameGameBoard. Благодаря этому View сможет получить доступ к данным игровой доски, хранящихся в Document. Исходный файл для Document (SameGameDoc.cpp) также очень прост, так как все функции, которые мы добавили, имеют свою реализацию:

На самом деле всё, что мы добавили, это вызов функции SetupBoard() в обработчике OnNewDocument. Всё это позволяет пользователю начать новую игру с помощью нажатия Ctrl+N или из меню File -> New.

В следующих уроках мы добавим новые функции к игровому полю и к Document, но на данный момент мы закончили с Document и готовы выводить всю эту информацию во View.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (7 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *

telegram канал
НОВОСТИ RAVESLI