Esempio n. 1
0
        private void CreateChild()
        {
            if (_level < 1)
            {
                for (int i = 0; i < 225; i++)
                {
                    Vector2 move = new Vector2((int)i % 15, (int)(i / 15) % 15);


                    if (_board[(int)move.x][(int)move.y] != 0)
                    {
                        continue;
                    }


                    int[][] newBoard = new int[15][];
                    for (int p = 0; p < 15; p++)
                    {
                        newBoard[p] = new int[15];
                        for (int q = 0; q < 15; q++)
                        {
                            newBoard[p][q] = _board[p][q];
                        }
                    }

                    newBoard[(int)move.x][(int)move.y] = 1;
                    Nodo filho = new Nodo(newBoard, !_isMaxNode, this, move, _level + 1, _alfa, _beta);
                    filho.StartConstructionAndSearch();
                    _valuedBoard[(int)move.x][(int)move.y] = (int)filho._value;
                    if (_stop)
                    {
                        //Debug.Log("STOP");
                        break;
                    }
                }
            }
            else
            {
                _value = CheckHoriValue((int)_originalMove.x, (int)_originalMove.y) + CheckVertValue((int)_originalMove.x, (int)_originalMove.y)
                         + CheckDiagAscValue((int)_originalMove.x, (int)_originalMove.y) + CheckDiagDescValue((int)_originalMove.x, (int)_originalMove.y);
                _chosenMove = _originalMove;
            }

            if (_parent != null)
            {
                if (_isMaxNode)
                {
                    _parent.SetBeta(_value, _originalMove, this);
                    return;
                }
                _parent.SetAlfa(_value, _originalMove, this);
            }
        }
Esempio n. 2
0
        public void MakePlay()
        {
//            if (_firstPlay)
//            {
//                FirstPlay();
//               _firstPlay = false;
//                return;
//            }

            //Se a jogada do jogador estiver na previsão da ia n cria nova arvore,
            //utiliza o filho com o estado correspondente

            _node = new Nodo(Game.Instance.Board, true, null, new Vector2(-1, -1), 0, -1000000, 1000000);


            Vector2 move = _node.StartConstructionAndSearch();

            Game.Instance.EndComputerTurn((int)move.x, (int)move.y);
        }
Esempio n. 3
0
        public void MakePlay()
        {
            //            if (_firstPlay)
            //            {
            //                FirstPlay();
            //               _firstPlay = false;
            //                return;
            //            }

            //Se a jogada do jogador estiver na previsão da ia n cria nova arvore,
            //utiliza o filho com o estado correspondente

            _node = new Nodo(Game.Instance.Board, true, null, new Vector2(-1, -1),0,-1000000,1000000);

            Vector2 move = _node.StartConstructionAndSearch();
            Game.Instance.EndComputerTurn((int)move.x, (int)move.y);
        }
Esempio n. 4
0
        private void CreateChild()
        {
            if (_level < 1)
            {
                for (int i = 0; i < 225; i++)
                {
                    Vector2 move = new Vector2((int)i % 15, (int)(i/15) % 15);

                    if (_board[(int)move.x][(int)move.y] != 0)
                        continue;

                    int[][] newBoard = new int[15][];
                    for (int p = 0; p < 15; p++)
                    {
                        newBoard[p] = new int[15];
                        for (int q = 0; q < 15; q++)
                        {
                            newBoard[p][q] = _board[p][q];
                        }
                    }

                    newBoard[(int) move.x][(int) move.y] = 1;
                    Nodo filho = new Nodo(newBoard,  !_isMaxNode, this, move, _level + 1, _alfa ,_beta);
                    filho.StartConstructionAndSearch();
                    _valuedBoard[(int) move.x][(int) move.y] = (int)filho._value;
                    if (_stop)
                    {
                        //Debug.Log("STOP");
                        break;
                    }
                }
            }
            else
            {
                _value = CheckHoriValue((int)_originalMove.x, (int)_originalMove.y) + CheckVertValue((int)_originalMove.x, (int)_originalMove.y)
                    + CheckDiagAscValue((int)_originalMove.x, (int)_originalMove.y) + CheckDiagDescValue((int)_originalMove.x, (int)_originalMove.y);
                _chosenMove = _originalMove;
            }

            if (_parent != null)
            {
                if (_isMaxNode)
                {
                    _parent.SetBeta(_value, _originalMove,this);
                    return;
                }
                _parent.SetAlfa(_value, _originalMove,this);
            }
        }