#pragma once
// TicTacToeEx ゲーム管理クラス
class T3EBoard
{
static const int BOARD_WIDTH = 3; // 盤の幅
static const int BOARD_HEIGHT = 3; // 盤の高さ
static const int BOARD_SIZE = BOARD_WIDTH * BOARD_HEIGHT; // 盤のサイズ
static const int MAX_PIECE_ON_BOARD = 3; // 盤上に存在できるコマの数
static const int MAX_TURNS = 99; // 最大ターン数
static const int NUM_PLAYERS = 2; // プレイヤー数
enum { PLAYER1 = 0, PLAYER2 = 1 };
enum { PLAYER_HUMAN = 0, PLAYER_CPU = 1 };
enum { NONE = 0, STONE1 = 1, STONE2 = -1 };
int m_Board[BOARD_SIZE]; // 盤の状態 0:なし 正:先手コマ 負:後手コマ 値:置いたターン数
int m_Turn; // ターン
int m_NextPlayer; // 次の番 PLAYER1 or PLAYER2
int m_Player[NUM_PLAYERS]; // プレイヤー 0:人間 1:CPU
void Reset(); // ゲーム初期化
void ShowBoard(); // 盤表示
void SetStone(int place); // コマを置く
int CPU(); // CPUの思考
int Minmax(int *node, int NextPlayer, int turn, int depth,int state);//Minmax法の実施
int CheckWin(int *Board); // 状況による勝敗チェック
int count_zero(int *Board); // 引数配列の可能手数を算出
void SetStone(int *Board, int place, int NextPlayer, int Turn); //コマを置く
void ShowBoard(int *Board); //晩表示
int Human(); // 人間の手番
int CheckWin(); // 勝利判定
public:
T3EBoard(); // コンストラクタ
~T3EBoard(); // デストラクタ
void Play(); // ゲーム進行
};