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); } }
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); }
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); }
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); } }