Курсовая работа: Разработка игры "Крестики-нолики"
if (pDoc->GetSquare (i, j) == 0) {
if (pDoc->IsItXsTurn ()) {
pDoc->AddX (i, j);
DrawX (&dc, &m_rect[i][j]);
} else {
pDoc->AddO (i, j);
Draw0 (&dc, &m_rect[i][j]);
}
}
bQuit = TRUE;
}
}
}
CXvsOv1View::VinControl();
CView::OnLButtonDown(nFlags, point);
}
Для прорисовки крестиков и ноликов используется две функции класса view - DrawX и DrawO . В процессе рисования они используют функции вывода класса CDC. Сначала DrawX создает инструмент для рисования - красный карандаш (pen) для линий толщиной 10 условных единиц (для типа отображения MM_LOENGLISH одна условная единица эквивалентна 0,1 логического дюйма):
CPen pen (PS_SOLID, 10, RGB(255, 0, 0));
Затем с помощью следующих предложений рисуются две пересекающиеся линии:
pDC->MoveTo (rect.left, rect.top);pDC->LineTo (rect.right, rect.bottom);pDC->MoveTo (rect.left, rect.bottom);pDC->LineTo (rect.right, rect.top);Аналогичным образом функция DrawO создает свой инструмент для рисования - карандаш синего цвета для линий толщиной 10 условных единиц:
CPen pen (PS_SOLID, 10, RGB(0, 0, 255));и рисует O с помощью MFC-функции CDC::Ellipse
pDC->Ellipse (rect);В обоих случаях до начала каких-либо операций рисования нужный карандаш выбирается в контекст устройства с помощью функции CDC::SelectObject и возвращается обратно по завершении работ с ним:
CPen* pOldPen = pDC->SelectObject (&pen);...pDC->SelectObject (pOldPen);Чтобы внутренняя область значка О не закрашивалась, в view-функции DrawO перед обращением к CDC::Ellipse выбирается в контекст NULL-кисть - не заполняющая область рисования:
pDC->SelectStockObject (NULL_BRUSH); ??????? DrawX ? DrawO ???????? ????????? ???????: void CXvsOv1View::DrawX(CDC *pDC, CRect *pRect){// ??????????? ????????? ??????????? ?????????????? ?// ????????? ??? ???????.//CRect rect;rect.CopyRect (pRect);rect.DeflateRect (10, 10); //// ??????? ??????? ???????? ? ?????????? ?? ?.//CPen pen (PS_SOLID, 10, RGB (255, 0, 0));//?????? ???????? ?????????? ? ???????? ?????????? ? ??????? ??????? CDC::SelectObjectCPen* pOldPen = pDC->SelectObject (&pen);pDC->MoveTo (rect.left, rect.top); //pDC->LineTo (rect.right, rect.bottom); //pDC->MoveTo (rect.left, rect.bottom); //???????? ??? ?????????????? ?????pDC->LineTo (rect.right, rect.top); ////???????? ???????????? ??????? ?? ?????????? ????? ? ???pDC->SelectObject (pOldPen); } void CXvsOv1View::Draw0(CDC *pDC, CRect *pRect){// ??????????? ????????? ??????????? ?????????????? ?// ????????? ??? ???????.//CRect rect;rect.CopyRect (pRect);rect.DeflateRect (10, 10); //// ??????? ????? ???????? ? ?????????? ?? 0.//CPen pen (PS_SOLID, 10, RGB (0, 0, 255));CPen* pOldPen = pDC->SelectObject (&pen);pDC->SelectStockObject (NULL_BRUSH); pDC->Ellipse (rect);//???????? ??????//???????? ???????????? ??????? ?? ?????????? ????? ? ???pDC->SelectObject (pOldPen); } ??????? VinControl() ???????????? ????????, ????????? ?? ? ??? 4 ???????? ??? ?????? ? ??????? ??????????????? ????????? ??? ?????????? ???? ???????. ??????? ???????? 56 ??????, ??? ?????????? ??????? ?? ???????? ????????? ??????????????? ?????????: "???????? ????????? ???!" ??? "?????? ????????? ???!". ??????? VinControl()???????? ????????? ???????: void CXvsOv1View::VinControl(){ CXvsOv1Doc* pDoc = GetDocument (); // ???????? ????????? ?? ????? document://???????? ?????? ????????? ?? ????????????if ((pDoc->m_grid[0][0] == 1) && (pDoc->m_grid[1][0] == 1) && (pDoc->m_grid[2][0] == 1) && (pDoc->m_grid[3][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][0] == 1) && (pDoc->m_grid[2][0] == 1) && (pDoc->m_grid[3][0] == 1) && (pDoc->m_grid[4][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][1] == 1) && (pDoc->m_grid[1][1] == 1) && (pDoc->m_grid[2][1] == 1) && (pDoc->m_grid[3][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][1] == 1) && (pDoc->m_grid[2][1] == 1) && (pDoc->m_grid[3][1] == 1) && (pDoc->m_grid[4][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][2] == 1) && (pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][2] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][2] == 1) && (pDoc->m_grid[4][2] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][3] == 1) && (pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[3][3] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[3][3] == 1) && (pDoc->m_grid[4][3] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][4] == 1) && (pDoc->m_grid[1][4] == 1) && (pDoc->m_grid[2][4] == 1) && (pDoc->m_grid[3][4] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][4] == 1) && (pDoc->m_grid[2][4] == 1) && (pDoc->m_grid[3][4] == 1) && (pDoc->m_grid[4][4] == 1))AfxMessageBox("???????? ????????? ???!"); //???????? ?????? ????????? ?? ??????????if ((pDoc->m_grid[0][4] == 1) && (pDoc->m_grid[0][3] == 1) && (pDoc->m_grid[0][2] == 1) && (pDoc->m_grid[0][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][3] == 1) && (pDoc->m_grid[0][2] == 1) && (pDoc->m_grid[0][1] == 1) && (pDoc->m_grid[0][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][4] == 1) && (pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[1][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[1][1] == 1) && (pDoc->m_grid[1][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[2][4] == 1) && (pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[2][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[2][1] == 1) && (pDoc->m_grid[2][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[3][4] == 1) && (pDoc->m_grid[3][3] == 1) && (pDoc->m_grid[3][2] == 1) && (pDoc->m_grid[3][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[3][3] == 1) && (pDoc->m_grid[3][2] == 1) && (pDoc->m_grid[3][1] == 1) && (pDoc->m_grid[3][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[4][4] == 1) && (pDoc->m_grid[4][3] == 1) && (pDoc->m_grid[4][2] == 1) && (pDoc->m_grid[4][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[4][3] == 1) && (pDoc->m_grid[4][2] == 1) && (pDoc->m_grid[4][1] == 1) && (pDoc->m_grid[4][0] == 1))AfxMessageBox("???????? ????????? ???!"); //???????? ?????? ????????? ?? ?????????? ????? ????? - ????? ??????if ((pDoc->m_grid[0][3] == 1) && (pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[2][1] == 1) && (pDoc->m_grid[3][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][4] == 1) && (pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][1] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][3] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][1] == 1) && (pDoc->m_grid[4][0] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][4] == 1) && (pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[3][2] == 1) && (pDoc->m_grid[4][1] == 1))AfxMessageBox("???????? ????????? ???!"); //???????? ?????? ????????? ?? ?????????? ????? ?????? - ????? ?????if ((pDoc->m_grid[1][0] == 1) && (pDoc->m_grid[2][1] == 1) && (pDoc->m_grid[3][2] == 1) && (pDoc->m_grid[4][3] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][0] == 1) && (pDoc->m_grid[1][1] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][3] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[1][1] == 1) && (pDoc->m_grid[2][2] == 1) && (pDoc->m_grid[3][3] == 1) && (pDoc->m_grid[4][4] == 1))AfxMessageBox("???????? ????????? ???!");if ((pDoc->m_grid[0][1] == 1) && (pDoc->m_grid[1][2] == 1) && (pDoc->m_grid[2][3] == 1) && (pDoc->m_grid[3][4] == 1))AfxMessageBox("???????? ????????? ???!"); //--------------------------------------------------------------------------------- //???????? ?????? ??????? ?? ????????????if ((pDoc->m_grid[0][0] == 2) && (pDoc->m_grid[1][0] == 2) && (pDoc->m_grid[2][0] == 2) && (pDoc->m_grid[3][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][0] == 2) && (pDoc->m_grid[2][0] == 2) && (pDoc->m_grid[3][0] == 2) && (pDoc->m_grid[4][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][1] == 2) && (pDoc->m_grid[1][1] == 2) && (pDoc->m_grid[2][1] == 2) && (pDoc->m_grid[3][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][1] == 2) && (pDoc->m_grid[2][1] == 2) && (pDoc->m_grid[3][1] == 2) && (pDoc->m_grid[4][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][2] == 2) && (pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][2] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][2] == 2) && (pDoc->m_grid[4][2] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][3] == 2) && (pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[3][3] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[3][3] == 2) && (pDoc->m_grid[4][3] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][4] == 2) && (pDoc->m_grid[1][4] == 2) && (pDoc->m_grid[2][4] == 2) && (pDoc->m_grid[3][4] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][4] == 2) && (pDoc->m_grid[2][4] == 2) && (pDoc->m_grid[3][4] == 2) && (pDoc->m_grid[4][4] == 2))AfxMessageBox("?????? ????????? ???!"); //???????? ?????? ????????? ?? ??????????if ((pDoc->m_grid[0][4] == 2) && (pDoc->m_grid[0][3] == 2) && (pDoc->m_grid[0][2] == 2) && (pDoc->m_grid[0][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][3] == 2) && (pDoc->m_grid[0][2] == 2) && (pDoc->m_grid[0][1] == 2) && (pDoc->m_grid[0][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][4] == 2) && (pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[1][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[1][1] == 2) && (pDoc->m_grid[1][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[2][4] == 2) && (pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[2][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[2][1] == 2) && (pDoc->m_grid[2][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[3][4] == 2) && (pDoc->m_grid[3][3] == 2) && (pDoc->m_grid[3][2] == 2) && (pDoc->m_grid[3][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[3][3] == 2) && (pDoc->m_grid[3][2] == 2) && (pDoc->m_grid[3][1] == 2) && (pDoc->m_grid[3][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[4][4] == 2) && (pDoc->m_grid[4][3] == 2) && (pDoc->m_grid[4][2] == 2) && (pDoc->m_grid[4][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[4][3] == 2) && (pDoc->m_grid[4][2] == 2) && (pDoc->m_grid[4][1] == 2) && (pDoc->m_grid[4][0] == 2))AfxMessageBox("?????? ????????? ???!"); //???????? ?????? ????????? ?? ?????????? ????? ????? - ????? ??????if ((pDoc->m_grid[0][3] == 2) && (pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[2][1] == 2) && (pDoc->m_grid[3][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][4] == 2) && (pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][1] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][3] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][1] == 2) && (pDoc->m_grid[4][0] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][4] == 2) && (pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[3][2] == 2) && (pDoc->m_grid[4][1] == 2))AfxMessageBox("?????? ????????? ???!"); //???????? ?????? ????????? ?? ?????????? ????? ?????? - ????? ?????if ((pDoc->m_grid[1][0] == 2) && (pDoc->m_grid[2][1] == 2) && (pDoc->m_grid[3][2] == 2) && (pDoc->m_grid[4][3] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][0] == 2) && (pDoc->m_grid[1][1] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][3] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[1][1] == 2) && (pDoc->m_grid[2][2] == 2) && (pDoc->m_grid[3][3] == 2) && (pDoc->m_grid[4][4] == 2))AfxMessageBox("?????? ????????? ???!");if ((pDoc->m_grid[0][1] == 2) && (pDoc->m_grid[1][2] == 2) && (pDoc->m_grid[2][3] == 2) && (pDoc->m_grid[3][4] == 2))AfxMessageBox("?????? ????????? ???!");} ?????? ????? ?????????? ? ??????, ????????? ? ????????? ?????? ? ????????? ? ???????, ??? ??????????? ?? ????? document. ? ??? ?????????? ????????????? ?????????? m_grid, ?????????????? ????? ?????? 5?5, ????????? ?? 1-???? ?????????. ?????? ??????? ????? ??????? ????????????? ????? ?????? ???????? ????. ??? ?????? ???? ????????? ????????????? ??????? ????????, ????? ??? ?????? ????????? ???????. ??? ????? X ??? O ??????????? ???????? ????????????? ?????????????? ???????? 1 ??? 2. ????? ????????? ??????????? ??????? ????????? ?? ?????? view ? ??????? m_grid, ????????? ??? ????????????? public-??????? - AddX ? AddO, ??????? ?????? ? ???? ?????? ???????? ? ????????? ? ???????. ????????????? ??????? m_grid ? ????????? ??? ????????? ?????????? ? ??????? OnNewDocument , ?? ???? ??? ???????? ??????? ?????? ????????? (??? ?????? ?????? ????? ????). ???? ??? ??????? OnNewDocument (? ?????????? ?????????? m_bXsTurn ????? ??????? ???????): BOOL CXvsOv1Doc::OnNewDocument(){if (!CDocument::OnNewDocument())return FALSE; for (int i=0; i<5; i++)for (int j=0; j<5; j++)m_grid[i][j]=0;// TODO: add reinitialization code here// (SDI documents will reuse this document) m_bXsTurn=TRUE;return TRUE;} ??? ???????? ???????? ? ????????? ? ??????? ? ?????? m_grid ???????????? ????????????? ??? ??? public-??????? Add X ? AddO . ??????? AddX ??????????? ???????????????? ???????? ??????? 1, ? ??????? AddO ? 2.?????? ?????? ??? ????????? ?????? ????? ?????????, ??????????, ????? ? ?????? view ??????????? ????????, ????? ?? ?????? ??????. ??? ????? ? ?????? document ?????????? ????????????? public-??????? ? ?????? GetSquare , ??????? ????????? ???????????? ? ?????? ? ????????? ???????????? ??????. ???? ? ??????? GetSquare ?????????? ??????????? ?????? ?????? ? ???????, ??? ???????? 0, ???? ????????? ?????? ?????; 1, ???? ? ??? ????????? X; ??? 2, ???? ? ??? O. ???? ?? return-???????? -1, ??????, ??? ?????? ???????????? ????? ?????? ??? ???????.??? ???????????? ??????????? ?????????? ????????????? ?????????? m_bXsTurn ; ????? ??? X, ?? ???????? ??????????????? ?????? TRUE, ????? ??? O - FALSE. ????????? m_bXsTurn, ??? ? m_grid, ????????? ? ?????? ?????????, ?? ??? ????????? ? ?????? document. ?? ????????? ???????? TRUE ????? ?????????? ? CXvsOv1Doc::OnNewDocument; ???? ? document ??????????? X, ?? ???????????????? ???????? FALSE, ? ???? O ? TRUE.???? ??????? OnNewDocument, AddX, AddO ? IsItXsTurn .???????? ????????? ??????? (? ?????????? ??????????? ?????? ????????? SetModifiedFlag() ??????? ????) : void CXvsOv1Doc::AddX(int i, int j) //??? - ????????????? ??????? m_grid public-???????, ??????? ????? ??????? ? ????//???????? ? ????????? ? ???????.{if ((i >= 0) && (i <= 4) && (j >= 0) && (j <= 4))m_grid[i][j]=1; //?????????? X ? ??????SetModifiedFlag (); // ????????? ?????? ?????????// ? ?????? documentm_bXsTurn=FALSE;// ?????????? m_bXsTurn ????? ????????????? ???????? FALSE, ???? ? ??????// m_grid ???????? X.//????? ??????? O } void CXvsOv1Doc::AddO(int i, int j) //??? - ????????????? ??????? m_grid public-???????, ??????? ????? ??????? ? ????//???????? ? ????????? ? ???????.{if ((i >= 0) && (i <= 4) && (j >= 0) && (j <= 4))m_grid[i][j]=2; //?????????? O ? ?????? SetModifiedFlag (); // ????????? ?????? ?????????// ? ?????? documentm_bXsTurn=TRUE; //?????????? m_bXsTurn ????? ????????????? ???????? TRUE, ???? ? ??????//m_grid ???????? O.//????? ??????? X} BYTE CXvsOv1Doc::GetSquare(int i, int j){if ((i >= 0) && (i <= 4) && (j >= 0) && (j <= 4))return m_grid[i][j];return (BYTE) -1; //???? ? ??????? GetSquare ?????????? ??????????? ?????? ?????? ? ???????,//??? ???????? 0, ???? ????????? ?????? ?????; 1, ???? ? ??? ????????? X; ??? 2, ???? ? ??? O. //???? return-???????? ?-??? GetSquare ????? -1, ??????,//??? ?????? ???????????? ????? ?????? ??? ???????.return m_bXsTurn; } BYTE CXvsOv1Doc::IsItXsTurn() //????? ????????? ? ??????? IsItXsTurn ?????? document,//?????? ?????? View ????? ???????? ???????? ? ???, ??? ???.//?????????? ?? ??? ????????? ???????? ????????????? ??????? ?? X; ? 0 - ????????? ??? O. {return m_bXsTurn;} ????? ???????, ????????? ?? ??? ????? ???????? ???????? ? ?????? ??????? ?????? ???????? ?????? ? ??????????? ?????????? ? ???????? ??????? ???. ??? ?? ??????? ?????????? ?????? ????????? ? ??????? Serialize() , ????????????? ??? ?????????? ?????? document, ? ???????? ? ??? ????????? ????????? ??????? ?????? ? ?????? CArchive ??? ?? ????. ????? ???????? ??? ????? ????????? ??????? Serialize() ?????? document ????? ???????? ?????????, ??????????????? ??? ???????? ?????????? CXvsOv1Doc::m_grid ? C XvsOv1Doc::m_bXsTurn ? ????? ? ???????. ????????, ???????????? ? ??????? m_grid, ???????????? ??????????????? ???? ?? ?????? ??? ?????????? ?????????? ????? for; ????? ????? ?? ?????????????? ?????????? m_bXsTurn. ?? ????? ??????????????? ????????, ????? ?????? ?????????????? ? ?????? ???????, ???? ?????? ????????? ???????. ???? ? ????? ???????????? ??????? m_bXsTurn, ? ????? m_grid, ????? ?????? ?? ?????? ??????? ??????????? ? ??????????? ???????. void CXvsOv1Doc::Serialize(CArchive& ar){if (ar.IsStoring()){for (int i=0; i<5; i++)for (int j=0; j<5; j++)ar << m_grid[i][j];ar << m_bXsTurn;}else{for (int i=0; i<5; i++)for (int j=0; j<5; j++)ar >> m_grid[i][j];ar >> m_bXsTurn; }}Чтобы исключить вероятность случайных потерь рабочих данных, корректно составленные программы должны предусматривать средства выдачи пользователю сообщений о необходимости сохранения еще не записанных данных, если программа получает команду завершить работу. В программах архитектуры document/view за решение этой небольшой задачи отвечают средства MFC, но только при том условии, если имеется информация о наличии в рабочем документе еще не сохраненных данных.
Для того чтобы оповестить MFC-механизм о подобном факте, следует обращаться к функции SetModifiedFlag() класса document, всякий раз когда в данные вносятся изменения. Она выставляет внутри класса document некий флажок, который проверяется средствами MFC перед завершением работы программы или при закрытии текущего документа. Если этот флажок выставлен, MFC выводит сообщение пользователю о присутствии еще не сохраненных изменений и предложение сохранить документ до начала дальнейшей обработки. После записи изменений флажок автоматически возвращается в исходное состояние, а класс document помечается как "чистый" (не имеющий изменений) до следующего обращения к SetModifiedFlag(). Вызов функции SetModifiedFlag() используется из функций AddX и AddO класса document.
4. Инструкция по инсталляции
Данная программа написана с использованием статической библиотеки MFC, поэтому она будет работать и на компьютерах без установленного Microsoft Visual C++. Инсталляции программа не требует, запуск игры производится файлом XvsOv1.exe расположенном в каталоге Debug, который находится в корневой папке программы.
Минимальные системные требования:
-Windows XP Service Pack 1;
-ЦПУ с частотой не ниже 1 ГГц;