33,027
社区成员




#if !defined(FORBIDDENPOINTFINDER_H_INCLUDED_)
#define FORBIDDENPOINTFINDER_H_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ForbiddenPointFinder.h : header file
//
#include <afxwin.h>
#define BOARDSIZE 15
#define BLACKSTONE 'X'
#define WHITESTONE 'O'
#define EMPTYSTONE '.'
#define BLACKFIVE 0
#define WHITEFIVE 1
#define BLACKFORBIDDEN 2
class CForbiddenPointFinder
{
public:
int nForbiddenPoints;
CPoint ptForbidden[BOARDSIZE * BOARDSIZE];
private:
char cBoard[BOARDSIZE+2][BOARDSIZE+2];
public:
CForbiddenPointFinder();
virtual ~CForbiddenPointFinder();
void Clear();
int AddStone(int x, int y, char cStone);
private:
void SetStone(int x, int y, char cStone);
BOOL IsFive(int x, int y, int nColor);
BOOL IsOverline(int x, int y);
BOOL IsFive(int x, int y, int nColor, int nDir);
BOOL IsFour(int x, int y, int nColor, int nDir);
int IsOpenFour(int x, int y, int nColor, int nDir);
BOOL IsOpenThree(int x, int y, int nColor, int nDir );
BOOL IsDoubleFour(int x, int y);
BOOL IsDoubleThree(int x, int y);
void FindForbiddenPoints();
};
#endif // !defined(FORBIDDENPOINTFINDER_H_INCLUDED_)
void CForbiddenPointFinder::FindForbiddenPoints()//对盘面上所有能落子的点,查看其是否是禁手点,并标注。
{
nForbiddenPoints = 0;
for (int i=0; i<BOARDSIZE; i++)
{
for (int j=0; j<BOARDSIZE; j++)
{
if (cBoard[i+1][j+1] != EMPTYSTONE)
continue;
else
{
if (IsOverline(i, j) || IsDoubleFour(i, j) || IsDoubleThree(i, j))
{
ptForbidden[nForbiddenPoints].x = i;
ptForbidden[nForbiddenPoints].y = j;
nForbiddenPoints++;
}
}
}
}
}