diff --git a/TicTacToeEx/T3EBoard.cpp b/TicTacToeEx/T3EBoard.cpp index c46dd4e..bf739ed 100644 --- a/TicTacToeEx/T3EBoard.cpp +++ b/TicTacToeEx/T3EBoard.cpp @@ -83,16 +83,16 @@ //�߂�l�F�]���l int T3EBoard::Minmax(int *node, int NextPlayer, int turn, int depth,int state) { - //printf("depth = %d��MinMax�N��\n", depth); + printf("depth = %d ��MinMax�N��\n", depth); //�t�̏ꍇ�]���l��Ԃ� if (depth == 0) { - //printf("�t�Ȃ̂�%d��Ԃ��܂�\n", this->CheckWin(node)); + printf("�t�Ȃ̂�%d��Ԃ��܂�\n", this->CheckWin(node)); return this->CheckWin(node); } //���łɏ������‚��Ă���ꍇ�t�Ƃ݂Ȃ��ĕ]���l��Ԃ� - if(state ==1){ - //printf("���ɏ������‚��Ă���̂ŗt�Ƃ݂Ȃ���%d��Ԃ��܂�\n", this->CheckWin(node)); + if(CheckWin(node) !=0){ + printf("���ɏ������‚��Ă���̂ŗt�Ƃ݂Ȃ���%d��Ԃ��܂�\n", this->CheckWin(node)); return this->CheckWin(node); } @@ -100,61 +100,74 @@ int NextBoards[BOARD_SIZE*BOARD_SIZE]; int NextBoard[BOARD_SIZE]; int NextNode; + int NextNextPlayer = 1 - NextPlayer; + int NextTurn = turn; + int temp[BOARD_SIZE]; int k = 0; //���̋ǖʊi�[�p�ϐ� int val; + if (NextNextPlayer == PLAYER1)NextTurn++; + //�m�[�h����i�߂� //���̉”\�萔�𐔂��� NextNode = this->count_zero(node); //�΂�u�����ǖʂ�S�Ċi�[ for (int i = 0;i < BOARD_SIZE;i++) { if (node[i] == 0) { - this->SetStone(node, i, NextPlayer, turn); + for (int l = 0; l < BOARD_SIZE; l++) { + temp[l] = node[l]; + } + + this->SetStone(temp, i, NextPlayer, turn); for (int j = 0;j < BOARD_SIZE;j++) { - NextBoards[k] = node[j]; + NextBoards[k] = temp[j]; k++; } - node[i] = 0; } } k = 0; - int best = INT_MIN; - NextPlayer = 1 - NextPlayer; - if (NextPlayer == PLAYER1)turn++; + int best1 = INT_MIN; + int best2 = INT_MAX; for (int i = 0;i < NextNode;i++) { for (int j = 0;j < BOARD_SIZE;j++) { NextBoard[j] = NextBoards[k]; k++; } - //printf("�ȉ��̔Ֆʂʼn��̃m�[�h�����܂�\n"); - //this->ShowBoard(NextBoard); + printf("depth = %d�ɂāA�ȉ��̔Ֆʂʼn��̃m�[�h�����܂�\n",depth); + this->ShowBoard(NextBoard); - if (CheckWin(NextBoard) == 1) { - val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1), 1); + if (CheckWin(NextBoard) != 0) { + val = this->Minmax(NextBoard, NextNextPlayer, NextTurn, (depth - 1), 1); } - else { - val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1), 0); + else{ + val = this->Minmax(NextBoard, NextNextPlayer, NextTurn, (depth - 1), 0); } - if (NextPlayer == PLAYER1 && best < val) { - best = val; - //printf("����best = %d�@�ɍX�V����܂���\n", best); + if (NextPlayer == PLAYER1 && best1 < val) { + best1 = val; + printf("����depth = %d�ɂ�PLAYER = %d, best = %d�@�ɍX�V����܂���\n", depth,NextPlayer,best1); } - if (NextPlayer == PLAYER2 && best < -val) { - best = -val; - //printf("����best = %d�@�ɍX�V����܂���\n", best); + if (NextPlayer == PLAYER2 && val < best2) { + best2 = val; + printf("����depth = %d�ɂ�PLAYER = %d, best = %d�@�ɍX�V����܂���\n", depth,NextPlayer,best2); } } + if(NextPlayer == PLAYER1){ + printf("depth = %d�ɂĒlbest = %d��Ԃ��܂�\n",depth, best1); + return best1; + } - //printf("�lbest = %d��Ԃ��܂�\n", best); - return best; + if (NextPlayer == PLAYER2) { + printf("depth = %d�ɂĒlbest = %d��Ԃ��܂�\n", depth, best2); + return best2; + } } //�z�񂲂Ƃɂ�鏟�s���� //����:int *Board�@�ǖ� -//�߂�l�G0 ������ 1(PLAYER1) ��菟�� 1(PLAYER2) ��菟�� +//�߂�l�G0 ������ 1(PLAYER1) ��菟�� -1(PLAYER2) ��菟�� int T3EBoard::CheckWin(int *Board) { int row, col; @@ -169,7 +182,7 @@ } if (check) { if (player == PLAYER1)return 1; - return 1; + return -1; } // �΂ߕ���2 @@ -178,7 +191,7 @@ } if (check) { if (player == PLAYER1)return 1; - return 1; + return -1; } // ������ @@ -188,7 +201,7 @@ } if (check) { if (player == PLAYER1)return 1; - return 1; + return -1; } } @@ -199,7 +212,7 @@ } if (check) { if (player == PLAYER1)return 1; - return 1; + return -1; } } } @@ -272,7 +285,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, 4,0)); + printf("�u���ꏊ[%d]�̕]���l��[%d]�ł��B\n", i, Minmax(NextBoard, NextNextPlayer, NextTurn, 2,0)); } }