public Move_new GetMove() { _board = Board_new.Instance; bestMove = _CreateMove(_board.GetTileFromBoard(new Vector2(0, 0)), _board.GetTileFromBoard(new Vector2(0, 0))); AB(maxDepth, -100000000, 1000000000, true); return(bestMove); }
List <Move_new> _GetMoves(Piece_new.playerColor color) { List <Move_new> turnMove = new List <Move_new>(); List <Tile_new> pieces = new List <Tile_new>(); if (color == Piece_new.playerColor.BLACK) { pieces = _blackPieces; } else { pieces = _whitePieces; } foreach (Tile_new tile in pieces) { MoveFactory factory = new MoveFactory(_board); List <Move_new> pieceMoves = factory.GetMoves(tile.CurrentPiece, tile.Position); foreach (Move_new move in pieceMoves) { Move_new newMove = _CreateMove(move.firstPosition, move.secondPosition); turnMove.Add(newMove); } } return(turnMove); }
public void SwapPieces(Move_new move) { GameObject[] objects = GameObject.FindGameObjectsWithTag("Highlight"); foreach (GameObject o in objects) { Destroy(o); } Tile_new firstTile = move.firstPosition; Tile_new secondTile = move.secondPosition; firstTile.CurrentPiece.MovePiece(new Vector3(-move.secondPosition.Position.x, 0, move.secondPosition.Position.y)); if (secondTile.CurrentPiece != null) { if (secondTile.CurrentPiece.Type == Piece_new.pieceType.KING) { _kingDead = true; } Destroy(secondTile.CurrentPiece.gameObject); } secondTile.CurrentPiece = move.pieceMoved; firstTile.CurrentPiece = null; secondTile.CurrentPiece.position = secondTile.Position; secondTile.CurrentPiece.HasMoved = true; playerTurn = !playerTurn; }
Move_new _CreateMove(Tile_new tile, Tile_new move) { Move_new tempMove = new Move_new(); tempMove.firstPosition = tile; tempMove.pieceMoved = tile.CurrentPiece; tempMove.secondPosition = move; if (move.CurrentPiece != null) { tempMove.pieceKilled = move.CurrentPiece; } return(tempMove); }
void _DoAIMove(Move_new move) { Tile_new firstPosition = move.firstPosition; Tile_new secondPosition = move.secondPosition; if (secondPosition.CurrentPiece && secondPosition.CurrentPiece.Type == Piece_new.pieceType.KING) { SwapPieces(move); _kingDead = true; } else { SwapPieces(move); } }
void _CheckAndStoreMove(Vector2 move) { if (_IsOnBoard(move) && (!_ContainsPiece(_board.GetTileFromBoard(move)) || _IsEnemy(_board.GetTileFromBoard(move)))) { Move_new m = new Move_new(); m.firstPosition = _board.GetTileFromBoard(_position); m.pieceMoved = _piece; m.secondPosition = _board.GetTileFromBoard(move); if (m.secondPosition != null) { m.pieceKilled = m.secondPosition.CurrentPiece; } moves.Add(m); } }
void Update() { if (_kingDead) { Debug.Log("WINNER!"); //UnityEditor.EditorApplication.isPlaying = false; Application.Quit(); } if (!playerTurn) { Move_new move = ab.GetMove(); //Debug.Log(move.secondPosition.Position.x); //Debug.Log(move.secondPosition.Position.y); _DoAIMove(move); } }
void _UndoFakeMove() { Move_new tempMove = moveStack.Pop(); Tile_new movedTo = tempMove.secondPosition; Tile_new movedFrom = tempMove.firstPosition; Piece_new pieceKilled = tempMove.pieceKilled; Piece_new pieceMoved = tempMove.pieceMoved; movedFrom.CurrentPiece = movedTo.CurrentPiece; if (pieceKilled != null) { movedTo.CurrentPiece = pieceKilled; } else { movedTo.CurrentPiece = null; } }
int AB(int depth, int alpha, int beta, bool max) { _GetBoard_newState(); if (depth == 0) { return(_Evaluate()); } if (max) { int score = -10000000; List <Move_new> allMoves = _GetMoves(Piece_new.playerColor.BLACK); foreach (Move_new move in allMoves) { moveStack.Push(move); _DoFakeMove(move.firstPosition, move.secondPosition); score = AB(depth - 1, alpha, beta, false); _UndoFakeMove(); if (score > alpha) { move.score = score; if (move.score > bestMove.score && depth == maxDepth) { bestMove = move; } alpha = score; } if (score >= beta) { break; } } return(alpha); } else { int score = 10000000; List <Move_new> allMoves = _GetMoves(Piece_new.playerColor.WHITE); foreach (Move_new move in allMoves) { moveStack.Push(move); _DoFakeMove(move.firstPosition, move.secondPosition); score = AB(depth - 1, alpha, beta, true); _UndoFakeMove(); if (score < beta) { move.score = score; beta = score; } if (score <= alpha) { break; } } return(beta); } }