Курсовая работа: Разработка игры "Крестики-нолики"

}

Далее следует рассказать о блоке, отвечающем за рисование крестиков и ноликов после щелчков мыши на клетках поля.

Kогда игрок щелкает левой клавишей и указатель мыши находится в пределах клиентской области окна, оно получает сообщение WM_LBUTTONDOWN. Для отслеживания подобных событий используется принадлежащая классу view функция OnLButtonDown . В начале модуля XvsOv1View находится карта сообщений - особая таблица, в которой устанавливаются соответствия между сообщениями и их обработчиками); с ее помощью будет обеспечиваться вызов функции OnLButtonDown при приеме View-модулем сообщения WM_LBUTTONDOWN. В составе функции OnLButtonDown также присутствует блок преобразования координат поля в размерность MM_LOENGLISH:

CClientDC dc (this);dc.SetMapMode (MM_LOENGLISH);

dc.DPtoLP (&point);


Итак, функция OnLButtonDown при щелчке на клетке игрового поля обращается к функции GetSquare класса document, чтобы выяснить, оставлен ли в ней значок Х или О. Если GetSquare передает в качестве результата 0, значит клетка пуста, и OnLButtonDown вызывает функцию IsItXsTurn, чтобы получить информацию о том, какой значок нужно вставить - Х или О. Далее с помощью функций AddX или AddO класса document в клетку заносится крестик или нолик. Затем выполняется функция DrawX или DrawO класса view. В конце выполняется функция VinControl(). (Обо всех этих функциях будет сказано ниже). Функция OnLButtonDown выглядит следующим образом:

void CXvsOv1View::OnLButtonDown(UINT nFlags, CPoint point)

{

//

// Получаем указатель на класс document:

CXvsOv1Doc* pDoc = GetDocument ();

//

//Берется контекст устройства для клиентской области окна, в качестве схемы

// соответствия для контекста задается MM_LOENGLISH

CClientDC dc (this);

dc.SetMapMode (MM_LOENGLISH); //Конвертация CPoint-компонентов в MM_LOENGLISH

dc.DPtoLP (&point);

//

// Проверяем попадание указателя мыши

// на клетку игрового поля.

// Если да, рисуем Х или О.

//

BOOL bQuit = FALSE;

for (int i=0; i<5 && !bQuit; i++) {

for (int j=0; j<5 && !bQuit; j++) {

if (m_rect[i][j].PtInRect (point)) {

//Если после преобразования функция PtInRect передает ненулевое RETURN-значение,

//следовательно курсор находится внутри клетки. В этом случае переменные i и j

//содержит индексы, указывающие положение данной клетки.

//Если координаты, переданные аргументом CPoint, лежат за пределами всех

К-во Просмотров: 671
Бесплатно скачать Курсовая работа: Разработка игры "Крестики-нолики"