diff --git a/TicTacToeEx/T3EBoard.cpp b/TicTacToeEx/T3EBoard.cpp index fda9f09..64e2637 100644 --- a/TicTacToeEx/T3EBoard.cpp +++ b/TicTacToeEx/T3EBoard.cpp @@ -69,114 +69,7 @@ int T3EBoard::CPU() { int place = 0; - int i[11],j; - int tempPlace[11]; - int ZeroCount=0,ZeroCount2=0; - int ImageBoard[BOARD_SIZE], ImageTurn,ImageNextPlayer,Me; - //���s�Ǘ��z�� - int row[11], col[11]; - int check[11]; - int sign[2] = { STONE1, STONE2 }; - - - //���� - ImageTurn = m_Turn; - ImageNextPlayer = m_NextPlayer; - printf("ImageNext = %d\n", ImageNextPlayer); - //�����͐��̐�,����͕��̐��ŕ��� - if (ImageNextPlayer == PLAYER1) { - printf("���͐��\n"); - for (i[0] = 0;i[0] < BOARD_SIZE;i[0]++) { - ImageBoard[i[0]] = m_Board[i[0]]; - } - } - else { - printf("���͌��\n"); - for (i[0] = 0;i[0] < BOARD_SIZE;i[0]++) { - ImageBoard[i[0]] = (-1)*m_Board[i[0]]; - } - } - - - //�Տ�̉����Ȃ��ꏊ�𐔂���B - for (i[0] = 0;i[0] < BOARD_SIZE;i[0]++) { - if (ImageBoard[i[0]] == 0)ZeroCount++; - } - - //printf("ZERO=%d\n", ZeroCount); - - //Minmax�@�̋L�q - //���݂̃^�[���S�ʂ莎��for depth=0 - for (i[0] = 0;i[0] < BOARD_SIZE;i[0]++) { - //printf("i = %d\n",i[0]); - //�����u���ĂȂ��ꏊ�����‚��� - if (ImageBoard[i[0]] == 0) { - //SetStone�̋L�q�P - ImageBoard[i[0]] = ImageTurn; - tempPlace[0] = i[0]; - - // �Â��R�}������ - if (ImageTurn > MAX_PIECE_ON_BOARD) { - int deleting = (ImageTurn - MAX_PIECE_ON_BOARD); - for (int i = 0; i < BOARD_SIZE; i++) { - if (ImageBoard[i] == deleting) ImageBoard[i] = 0; - } - } - - //���Ă�`�����X�������珟�� - // �΂ߕ���1 - for (row[0] = 0, check[0] = 0; row[0] < BOARD_HEIGHT; row[0]++) { - if (ImageBoard[row[0] * BOARD_WIDTH + row[0]] > 0) check[0]++; - } - if (check[0] == 3) { - printf("naname1\n");return i[0]; - } - - // �΂ߕ���2 - for (row[0] = 0, check[0] = 0; row[0] < BOARD_HEIGHT; row[0]++) { - if (ImageBoard[row[0] * BOARD_WIDTH + (BOARD_HEIGHT - 1 - row[0])] > 0) check[0]++; - } - if (check[0] == 3) { - printf("naname2\n");return i[0]; - } - - // ������ - for (row[0] = 0; row[0] < BOARD_HEIGHT; row[0]++) { - for (col[0] = 0, check[0] = 0; col[0] < BOARD_WIDTH; col[0]++) { - if (ImageBoard[row[0] * BOARD_WIDTH + col[0]] > 0) check[0]++; - } - if (check[0] == 3) { - printf("yoko\n");return i[0]; - } - - } - - - // �c���� - for (col[0] = 0; col[0] < BOARD_WIDTH; col[0]++) { - for (row[0] = 0, check[0] = 0; row[0] < BOARD_HEIGHT; row[0]++) { - if (ImageBoard[row[0] * BOARD_WIDTH + col[0]] > 0) check[0]++; - } - if (check[0] == 3) { - printf("tate\n");return i[0]; - } - } - - - //����̎�� depth=1 - ImageTurn++; - for (i[1] = 0;i[1] < BOARD_SIZE;i[1]++) { - if (ImageBoard[i[1]] == 0) { - - } - } - //������Ԃɖ߂� - ImageBoard[tempPlace[0]] = 0; - ImageTurn = m_Turn; - ImageNextPlayer = m_Turn; - } - } - +; do { place = rand() % BOARD_SIZE; } while (m_Board[place] != NONE); @@ -185,6 +78,25 @@ return place; } +//�ǂ̔Ֆʂ������Ɉ�ԑ傫���]���������炷���m�F�B +//����:int node �ǖ�, in turn ���, int depth ��ǂ݂̐[�� +//�߂�l�F�]���l +int T3EBoard::Minmax(int node, int turn, int depth) +{ + //�t�̏ꍇ�]���l��Ԃ� + //if (depth == 0) return this->eval(); + + //this->expand_node(node, NextTurn); + + int best = -INFINITY; + /*for (int i = 0;i < k;i++) { + int val = this->Minmax(ai, NextTurn, (depth - 1)); + if (turn == PLAYER1 && best < val) best = val; + if (turn == PLAYER2 && best < -val)best = -val; + }*/ + + return best; +} // �l�Ԃ̎�� // �߂�l�F�R�}��łꏊ int T3EBoard::Human() diff --git a/TicTacToeEx/T3EBoard.h b/TicTacToeEx/T3EBoard.h index d05eecb..263370f 100644 --- a/TicTacToeEx/T3EBoard.h +++ b/TicTacToeEx/T3EBoard.h @@ -22,6 +22,7 @@ void ShowBoard(); // �Օ\�� void SetStone(int place); // �R�}��u�� int CPU(); // CPU�̎v�l + int Minmax(int node, int turn, int depth);//Minmax�@�̎��{ int Human(); // �l�Ԃ̎�� int CheckWin(); // �������� public: