diff --git a/TicTacToeEx/T3EBoard.cpp b/TicTacToeEx/T3EBoard.cpp index 512171e..02d94a5 100644 --- a/TicTacToeEx/T3EBoard.cpp +++ b/TicTacToeEx/T3EBoard.cpp @@ -69,8 +69,6 @@ int T3EBoard::CPU() { int place = 0; -; - do { place = rand() % BOARD_SIZE; } while (m_Board[place] != NONE); @@ -79,24 +77,25 @@ return place; } + //�ǂ̔Ֆʂ������Ɉ�ԑ傫���]���������炷���m�F�B //����:int node �ǖ�, in turn ���, int turn �^�[����,int depth ��ǂ݂̐[�� //�߂�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) { //�t�̏ꍇ�]���l��Ԃ� - if (depth == 0) return this->CheckWin(node); - + if (depth == 0) { + 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�ϐ� //�m�[�h����i�߂� - int *NextBoards; //���̉”\�萔�𐔂��� NextNode = this->count_zero(node); - //�萔�����Ԃɓ��I�z��Ɋi�[ - NextBoards = new int[NextNode*BOARD_SIZE]; //�΂�u�����ǖʂ�S�Ċi�[ for (int i = 0;i < BOARD_SIZE;i++) { if (node[i] == 0) { @@ -119,15 +118,16 @@ NextBoard[j] = NextBoards[k]; k++; } + printf("�ȉ��̔Ֆʂʼn��̃m�[�h�����܂�\n"); + this->ShowBoard(NextBoard); - int val = this->Minmax(NextBoard, NextPlayer,turn, (depth - 1)); + int val = this->Minmax(NextBoard, NextPlayer, turn, (depth - 1)); if (NextPlayer == PLAYER1 && best < val) best = val; if (NextPlayer == PLAYER2 && best < -val)best = -val; } - //���I����������� - delete[] NextBoards; + printf("�lbest = %d��Ԃ��܂�\n", best); return best; } @@ -192,7 +192,7 @@ //�߂�l�F�”\�萔 int T3EBoard::count_zero(int *Board) { - int Count=0; + int Count = 0; for (int i = 0; i < BOARD_SIZE; i++) { if (Board[i] == 0)Count++; @@ -216,6 +216,22 @@ } } +void T3EBoard::ShowBoard(int *Board) +{ + for (int i = 0; i < BOARD_SIZE; i++) { + std::cout << (Board[i] == 0 ? "�@" : + (Board[i] > 0 ? "��" : "�~")); + if (i % BOARD_WIDTH < BOARD_WIDTH - 1) { + std::cout << "��"; + } + else { + std::cout << std::endl; + if (i < BOARD_SIZE - 1) std::cout << "����������" << std::endl; + } + } +} + + // �l�Ԃ̎�� // �߂�l�F�R�}��łꏊ int T3EBoard::Human() @@ -234,19 +250,20 @@ NextBoard[j] = m_Board[j]; } SetStone(NextBoard, i, m_NextPlayer, m_Turn); - printf("�u���ꏊ[%d]�̕]���l��[%d]�ł��B", i, Minmax(NextBoard, NextNextPlayer, NextTurn, 11)); + printf("�u���ꏊ[%d]�̕]���l��[%d]�ł��B\n", i, Minmax(NextBoard, NextNextPlayer, NextTurn, 2)); } } - while(1) { + + + while (1) { std::cout << "0:���� 1:�� 2:�E�� 3:�� 4:���� 5:�E 6:���� 7:�� 8:�E��" << std::endl << "�ǂ��ɑł��܂����H "; std::cin >> place; if (place >= 0 && place < BOARD_SIZE) { if (m_Board[place] == 0) break; } + return place; } - - return place; } // �ՂɃR�}��u�� diff --git a/TicTacToeEx/T3EBoard.h b/TicTacToeEx/T3EBoard.h index 76c0422..73e448b 100644 --- a/TicTacToeEx/T3EBoard.h +++ b/TicTacToeEx/T3EBoard.h @@ -22,10 +22,11 @@ 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);//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�� + void ShowBoard(int *Board); //�ӕ\�� int Human(); // �l�Ԃ̎�� int CheckWin(); // �������� public: