Esempio n. 1
0
 public void SetAlfa(float alfa, Vector2 newMove, Nodo nodo)
 {
     if (_isMaxNode)
     {
         if (alfa > _alfa)
         {
             _alfa = alfa;
             _value = alfa;
             _chosenMove = newMove;
             _chosenSon = nodo;
            //  Debug.Log("Novo alfa "+newMove);
             if (_beta < _alfa)
             {
                 _stop = true;
             }
         }
     }
     else
     {
         if (alfa > _alfa)
             _alfa = alfa;
     }
 }
Esempio n. 2
0
        public Nodo(int[][] board, bool isMaxNode, Nodo parent,Vector2 original, int level,float initAlfa,float  initBeta)
        {
            _value        = 0;
            _alfa         = initAlfa;
            _beta         = initBeta;
            _board        = new int[15][];
            _valuedBoard = new int[15][];
            for (int i = 0; i < 15; i++)
            {
                _valuedBoard[i] = new int[15];
                _board [i] = new int[15];
                for (int j = 0; j < 15; j++)
                {
                    _board[i][j] = board[i][j];
                }
            }

            _isMaxNode    = isMaxNode;
            _parent       = parent;
            _originalMove = original;
            _level        = level;
            _childPos     = 0;
            _stop         = false;
        }
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);
            }
        }
Esempio n. 5
0
 public void SetBeta(float beta,Vector2 newMove, Nodo nodo)
 {
     if (!_isMaxNode)
     {
         if (beta < _beta)
         {
             _beta = beta;
             _value = beta;
             _chosenMove = newMove;
             _chosenSon = nodo;
             if (_beta < _alfa)
             {
                 _stop = true;
             }
         }
     }
     else
     {
         if(beta < _beta)
             _beta = beta;
     }
 }