📄 i_godoc.cpp
字号:
// I_goDoc.cpp : implementation of the CI_goDoc class
//
#include "stdafx.h"
#include "I_go.h"
#include "I_goDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//===========================================================================//
//Chain链的状态:
//===========================================================================//
#define nDifferent 0 //链标志,链的两端为一黑一白,或者一黑/白一边界
#define nFree 1 //链标志,链的两端为一黑/白一空白
#define nSame 2 //链标志,链的两端为相同
//===========================================================================//
//nSign nOldSign的标志状态:
//===========================================================================//
#define nOut 3 //界外
#define nBlack 2 //标志为nBlack时画黑棋
#define nWhite 1 //标志为nWhite时画白棋
#define nDie 0 //当前点被吃掉,标志清零,或者本来为空位状态
//===========================================================================//
/////////////////////////////////////////////////////////////////////////////
// CI_goDoc
IMPLEMENT_DYNCREATE(CI_goDoc, CDocument)
BEGIN_MESSAGE_MAP(CI_goDoc, CDocument)
//{{AFX_MSG_MAP(CI_goDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CI_goDoc construction/destruction
CI_goDoc::CI_goDoc()
{
// TODO: add one-time construction code here
m_BitmapToRight.LoadBitmap(IDB_BITMAP_TO_RIGHT);
m_BitmapToLeft.LoadBitmap(IDB_BITMAP_TO_LEFT);
}
CI_goDoc::~CI_goDoc()
{
}
BOOL CI_goDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
m_fAlternate = FALSE; //上面的位图先走
m_fClear = TRUE;
pointBegin.x = 220;
pointBegin.y = 50;
nDistance = 30;
nRadium = (int)(nDistance/10.0);
r = (int)(nDistance*2/5.0);
nCount = 0;
nBackCount = 0;
nBorder = 50;
pointForGoPrompt.x = pointBegin.x-200;
pointForGoPrompt.y = pointBegin.y+50;
pointForRegret.x = pointForGoPrompt.x;
pointForRegret.y = pointForGoPrompt.y+4*r;
pointForBlackCalculate.x = pointForRegret.x;
pointForBlackCalculate.y = pointForRegret.y+4*r;
pointForWhiteCalculate.x = pointForRegret.x;
pointForWhiteCalculate.y = pointForRegret.y+8*r;
pointForIllegal.x = pointForRegret.x;
pointForIllegal.y = pointForRegret.y+12*r;
nCalculateWhite = 0;
nCalculateBlack = 0;
nBackCalculateWhite = 0;
nBackCalculateBlack = 0;
nBackCountTwoTimesBefore = 0;
fIllegal = FALSE;
fRegretOnlyOnce = FALSE;
for(int i=0;i<21;i++)
for(int j=0;j<21;j++)
{
if(i<19&&j<19)
m_rectEllipse[i][j]=CRect(pointBegin.x+j*nDistance-r,pointBegin.y+i*nDistance-r,pointBegin.x+j*nDistance+r,pointBegin.y+i*nDistance+r);
if(i==0||i==20||j==0||j==20)
{
nSign[i][j] = nOut;
nOldSign[i][j] = nOut;
nBackSign[i][j] = nOut;
nBackOldSign[i][j]= nOut;
nBackTwoTimesBeforeSign[i][j] =nOut;
nBackThreeTimesBeforeSign[i][j] = nOut;
}
else
{
nSign[i][j] = nDie;
nOldSign[i][j] = nDie;
nBackSign[i][j] = nDie;
nBackOldSign[i][j]= nDie;
nBackTwoTimesBeforeSign[i][j] =nDie;
nBackThreeTimesBeforeSign[i][j] = nDie;
}
}
for(i=0;i<19;i++)
for(int j=0;j<20;j++)
if(j==0||j==19)
{
nChainRow[i][j] = nDifferent;
nBackChainRow[i][j] = nDifferent;
}
else
{
nChainRow[i][j] = nFree;
nBackChainRow[i][j] = nFree;
}
for(i=0;i<20;i++)
for(int j=0;j<19;j++)
if(i==0||i==19)
{
nChainCol[i][j] = nDifferent;
nBackChainCol[i][j] = nDifferent;
}
else
{
nChainCol[i][j] = nFree;
nBackChainCol[i][j] = nFree;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CI_goDoc serialization
void CI_goDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
for(int i=0;i<21;i++)
for(int j=0;j<21;j++)
{
ar<<nBackThreeTimesBeforeSign[i][j];
ar<<nBackTwoTimesBeforeSign[i][j];
ar<<nBackOldSign[i][j];
ar<<nBackSign[i][j];
if(i<19&&j<19)
ar<<m_rectEllipse[i][j];
ar<<nSign[i][j];
}
ar<<nBackCountTwoTimesBefore;
ar<<nBackCalculateBlack;
ar<<nBackCalculateWhite;
ar<<nBackCount;
ar<<nCount;
ar<<fIllegal;
ar<<fRegretOnlyOnce;
ar<<nBorder;
ar<<nCalculateBlack;
ar<<nCalculateWhite;
for(i=0;i<19;i++)
for(int j=0;j<20;j++)
{
ar<<nChainRow[i][j];
ar<<nBackChainRow[i][j];
}
for(i=0;i<20;i++)
for(int j=0;j<19;j++)
{
ar<<nChainCol[i][j];
ar<<nBackChainCol[i][j];
}
ar<<nDistance;
ar<<nRadium;
ar<<r;
ar<<pointBegin;
ar<<pointForBlackCalculate;
ar<<pointForGoPrompt;
ar<<pointForIllegal;
ar<<pointForRegret;
ar<<pointForWhiteCalculate;
}
else
{
// TODO: add loading code here
for(int i=0;i<21;i++)
for(int j=0;j<21;j++)
{
ar>>nBackThreeTimesBeforeSign[i][j];
ar>>nBackTwoTimesBeforeSign[i][j];
ar>>nBackOldSign[i][j];
ar>>nBackSign[i][j];
if(i<19&&j<19)
ar>>m_rectEllipse[i][j];
ar>>nSign[i][j];
}
ar>>nBackCountTwoTimesBefore;
ar>>nBackCalculateBlack;
ar>>nBackCalculateWhite;
ar>>nBackCount;
ar>>nCount;
ar>>fIllegal;
ar>>fRegretOnlyOnce;
ar>>nBorder;
ar>>nCalculateBlack;
ar>>nCalculateWhite;
for(i=0;i<19;i++)
for(int j=0;j<20;j++)
{
ar>>nChainRow[i][j];
ar>>nBackChainRow[i][j];
}
for(i=0;i<20;i++)
for(int j=0;j<19;j++)
{
ar>>nChainCol[i][j];
ar>>nBackChainCol[i][j];
}
ar>>nDistance;
ar>>nRadium;
ar>>r;
ar>>pointBegin;
ar>>pointForBlackCalculate;
ar>>pointForGoPrompt;
ar>>pointForIllegal;
ar>>pointForRegret;
ar>>pointForWhiteCalculate;
}
}
/////////////////////////////////////////////////////////////////////////////
// CI_goDoc diagnostics
#ifdef _DEBUG
void CI_goDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CI_goDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CI_goDoc commands
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -