⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i_godoc.cpp

📁 网络围棋
💻 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 + -