#include <iostream>
using namespace std;
struct MOVE
{ int player; // 走棋方,1 表示黑方,-1 表示白方
int x; // 下棋的 x 坐标
int y; // 下棋的 y 坐标
};
class CGobang
{
public:
/* 默认的构造函数,作用是初始化棋盘、为存储走棋情况准备空间
并初始化记录走棋步数的变量和总空间的变量 */
CGobang();
// 复制构造函数
CGobang(const CGobang & g);
/* 将一步走棋加入到成员 pMoves 指向的空间中,如果空间不够则需要扩展空间,
同时,在函数中调用判断胜负的函数 judge。如果走棋合法则返回 0 或 1(0 表示未
分胜负,1 表示已分胜负;如果走棋不合法(所走位置已有棋子)则返回 -1 */
int add_piece(const MOVE & mv);
// 判断走棋后是否分出了输赢,如果分出则返回 1,否则返回0
int judge(const MOVE & mv);
// 显示当前棋局,黑棋显示为X,白棋显示为O,无棋显示为 -
void display();
// 开始一次游戏,分出输赢时函数才返回,此时黑方获胜返回 1,白方获胜返回 -1
int start();
private:
/* 将赋值运算符函数声明为私有的成员,可以防止调用该函数;因为该函数不可被调用,
所以也就不用实现了 */
CGobang & operator=(const CGobang & );
// 棋盘为 15 行 15 列,每个元素表示该处的落子情况:1 表黑棋,-1 表白棋,0 表无棋
int board[15][15];
MOVE * pMoves; // 指向的存储空间中保存了下棋的情况
int count; // 记录当前走了多少步
int total; // 记录空间中一个可以存储多少步
};