diff --git a/TicTacToeEx/T3EBoard.cpp b/TicTacToeEx/T3EBoard.cpp index 64e2637..5549bcd 100644 --- a/TicTacToeEx/T3EBoard.cpp +++ b/TicTacToeEx/T3EBoard.cpp @@ -81,14 +81,15 @@ //�ǂ̔Ֆʂ������Ɉ�ԑ傫���]���������炷���m�F�B //����:int node �ǖ�, in turn ���, int depth ��ǂ݂̐[�� //�߂�l�F�]���l -int T3EBoard::Minmax(int node, int turn, int depth) +int T3EBoard::Minmax(int *node, int turn, int depth) { //�t�̏ꍇ�]���l��Ԃ� - //if (depth == 0) return this->eval(); + if (depth == 0) return this->CheckWin(node); + //�m�[�h����i�߂� //this->expand_node(node, NextTurn); - int best = -INFINITY; + int best = INT_MIN; /*for (int i = 0;i < k;i++) { int val = this->Minmax(ai, NextTurn, (depth - 1)); if (turn == PLAYER1 && best < val) best = val; @@ -97,6 +98,71 @@ return best; } + +//�z�񂲂Ƃɂ�鏟�s���� +//����:int *Board�@�ǖ� +//�߂�l�G0 ������ 1(PLAYER1) ��菟�� -1(PLAYER2) ��菟�� +int T3EBoard::CheckWin(int *Board) +{ + int row, col; + bool check; + int sign[2] = { STONE1, STONE2 }; + + // �v���C���[���ɔ��� + for (int player = PLAYER1; player <= PLAYER2; player++) { + // �΂ߕ���1 + for (row = 0, check = true; row < BOARD_HEIGHT; row++) { + if (Board[row * BOARD_WIDTH + row] * sign[player] <= 0) check = false; + } + if (check) { + if (player == PLAYER1)return 1; + return -1; + } + + // �΂ߕ���2 + for (row = 0, check = true; row < BOARD_HEIGHT; row++) { + if (Board[row * BOARD_WIDTH + (BOARD_HEIGHT - 1 - row)] * sign[player] <= 0) check = false; + } + if (check) { + if (player == PLAYER1)return 1; + return -1; + } + + // ������ + for (row = 0; row < BOARD_HEIGHT; row++) { + for (col = 0, check = true; col < BOARD_WIDTH; col++) { + if (Board[row * BOARD_WIDTH + col] * sign[player] <= 0) check = false; + } + if (check) { + if (player == PLAYER1)return 1; + return -1; + } + } + + // �c���� + for (col = 0; col < BOARD_WIDTH; col++) { + for (row = 0, check = true; row < BOARD_HEIGHT; row++) { + if (Board[row * BOARD_WIDTH + col] * sign[player] <= 0) check = false; + } + if (check) { + if (player == PLAYER1)return 1; + return -1; + } + } + } + + return 0; + +} + +//�@�m�[�h����i�߂� +// ����:int *Board �ǖ� +//�߂�l:��‹ǖʂ�i�߂��ǖ� +int expandnode(int *Board) +{ + return 0; +} + // �l�Ԃ̎�� // �߂�l�F�R�}��łꏊ int T3EBoard::Human() diff --git a/TicTacToeEx/T3EBoard.h b/TicTacToeEx/T3EBoard.h index 263370f..3da23e1 100644 --- a/TicTacToeEx/T3EBoard.h +++ b/TicTacToeEx/T3EBoard.h @@ -22,7 +22,9 @@ void ShowBoard(); // �Օ\�� void SetStone(int place); // �R�}��u�� int CPU(); // CPU�̎v�l - int Minmax(int node, int turn, int depth);//Minmax�@�̎��{ + int Minmax(int *node, int turn, int depth);//Minmax�@�̎��{ + int CheckWin(int *Board); // �󋵂ɂ�鏟�s�`�F�b�N + int expandnode(int *Board); // �m�[�h��i�߂� int Human(); // �l�Ԃ̎�� int CheckWin(); // �������� public: