diff --git a/TicTacToeEx/T3EBoard.cpp b/TicTacToeEx/T3EBoard.cpp index 29e14a9..c46dd4e 100644 --- a/TicTacToeEx/T3EBoard.cpp +++ b/TicTacToeEx/T3EBoard.cpp @@ -79,9 +79,9 @@ //�ǂ̔Ֆʂ������Ɉ�ԑ傫���]���������炷���m�F�B -//����:int node �ǖ�, in turn ���, int turn �^�[����,int depth ��ǂ݂̐[�� +//����:int node �ǖ�, in turn ���, int turn �^�[����,int depth ��ǂ݂̐[��,int state ��� //�߂�l�F�]���l -int T3EBoard::Minmax(int *node, int NextPlayer, int turn, int depth) +int T3EBoard::Minmax(int *node, int NextPlayer, int turn, int depth,int state) { //printf("depth = %d��MinMax�N��\n", depth); //�t�̏ꍇ�]���l��Ԃ� @@ -89,10 +89,19 @@ //printf("�t�Ȃ̂�%d��Ԃ��܂�\n", this->CheckWin(node)); return this->CheckWin(node); } + + //���łɏ������‚��Ă���ꍇ�t�Ƃ݂Ȃ��ĕ]���l��Ԃ� + if(state ==1){ + //printf("���ɏ������‚��Ă���̂ŗt�Ƃ݂Ȃ���%d��Ԃ��܂�\n", this->CheckWin(node)); + return this->CheckWin(node); + } + + int NextBoards[BOARD_SIZE*BOARD_SIZE]; int NextBoard[BOARD_SIZE]; int NextNode; int k = 0; //���̋ǖʊi�[�p�ϐ� + int val; //�m�[�h����i�߂� //���̉”\�萔�𐔂��� @@ -122,9 +131,14 @@ //printf("�ȉ��̔Ֆʂʼn��̃m�[�h�����܂�\n"); //this->ShowBoard(NextBoard); - int val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1)); + if (CheckWin(NextBoard) == 1) { + val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1), 1); + } + else { + val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1), 0); + } if (NextPlayer == PLAYER1 && best < val) { - best = val; + best = val; //printf("����best = %d�@�ɍX�V����܂���\n", best); } if (NextPlayer == PLAYER2 && best < -val) { @@ -258,7 +272,7 @@ NextBoard[j] = m_Board[j]; } SetStone(NextBoard, i, m_NextPlayer, m_Turn); - printf("�u���ꏊ[%d]�̕]���l��[%d]�ł��B\n", i, Minmax(NextBoard, NextNextPlayer, NextTurn, 2)); + printf("�u���ꏊ[%d]�̕]���l��[%d]�ł��B\n", i, Minmax(NextBoard, NextNextPlayer, NextTurn, 4,0)); } } diff --git a/TicTacToeEx/T3EBoard.h b/TicTacToeEx/T3EBoard.h index 73e448b..35c64ab 100644 --- a/TicTacToeEx/T3EBoard.h +++ b/TicTacToeEx/T3EBoard.h @@ -22,7 +22,7 @@ void ShowBoard(); // �Օ\�� void SetStone(int place); // �R�}��u�� int CPU(); // CPU�̎v�l - int Minmax(int *node, int NextPlayer, int turn, int depth);//Minmax�@�̎��{ + int Minmax(int *node, int NextPlayer, int turn, int depth,int state);//Minmax�@�̎��{ int CheckWin(int *Board); // �󋵂ɂ�鏟�s�`�F�b�N int count_zero(int *Board); // �����z��̉”\�萔���Z�o void SetStone(int *Board, int place, int NextPlayer, int Turn); //�R�}��u��