void InitializeBoard() { board = ChessBoard.ClassicVariantBoard(); tiles = new Tile3D[board.size.x, board.size.y, board.size.z, board.size.w]; for (int x = 0; x < board.size.x; x++) { for (int y = 0; y < board.size.y; y++) { for (int z = 0; z < board.size.z; z++) { for (int w = 0; w < board.size.w; w++) { tiles[x, y, z, w] = GameObject.Instantiate(tilePrefab).GetComponent <Tile3D>(); tiles[x, y, z, w].Initialize(x, y, z, w, board); tiles[x, y, z, w].transform.parent = tileContainer.transform; tiles[x, y, z, w].transform.position = GetTilePosition(x, y, z, w); tiles[x, y, z, w].transform.rotation = Quaternion.LookRotation(Vector3.up); } } } } attackers = new ChessboardAttackerHelper(board); attackers.ComputeAttackers(); }
public bool RunAIStep() { if (isStepResultReady) { return(true); } if (AIStepPossibleMoves.Count == 0) { scoresComputed = 0; AIStepScratchBoard = originalBoard.DeepCopy(); attackHelper = new ChessboardAttackerHelper(AIStepScratchBoard); AIStepPossibleMoves = new List <ChessBoard.Move>(); foreach (ChessPiece piece in AIStepScratchBoard.pieces) { if (piece == null) { continue; } if (piece.team == AIStepScratchBoard.currentMove) { foreach (Point4 possibleMove in piece.GetValidMoves()) { AIStepPossibleMoves.Add(AIStepScratchBoard.GetMove(piece.currentPosition, possibleMove)); } } } } ChessBoard.Move move = AIStepPossibleMoves[0]; AIStepPossibleMoves.RemoveAt(0); AIStepScratchBoard.MovePiece(move); float score = -1000000; Dictionary <ChessBoard.Move, float> subMoveScores = ComputeMoveScores(AIStepScratchBoard, 1); foreach (KeyValuePair <ChessBoard.Move, float> subMove in subMoveScores) { if (subMove.Value > score) { score = subMove.Value; } } score = -score; AIStepMoveScores.Add(move, score); AIStepScratchBoard.Undo(); if (AIStepPossibleMoves.Count == 0) { isStepResultReady = true; return(true); } return(false); }
public void Restart() { chessboardControllers = Transform.FindObjectsOfType <ChessboardController2D>(); board = ChessBoard.ClassicVariantBoard(); foreach (ChessboardController2D chessboardController in chessboardControllers) { chessboardController.Initialize(board); } attackers = new ChessboardAttackerHelper(board); attackers.ComputeAttackers(); selectedTile = Point4.NONE; destinationTile = Point4.NONE; attackedTile = Point4.NONE; }
// Use this for initialization void Start() { chessboardControllers = Transform.FindObjectsOfType <ChessboardController2D>(); board = ChessBoard.ClassicVariantBoard(); foreach (ChessboardController2D chessboardController in chessboardControllers) { chessboardController.Initialize(board); } attackers = new ChessboardAttackerHelper(board); attackers.ComputeAttackers(); introStartTime = Time.time; CreatePanGesture(); CreateScaleGesture(); CreateTapGesture(); }
public ChessBoard.Move DoTurn() { scoresComputed = 0; ChessBoard scratchBoard = originalBoard.DeepCopy(); attackHelper = new ChessboardAttackerHelper(scratchBoard); Dictionary <ChessBoard.Move, float> moveScores = ComputeMoveScores(scratchBoard, 2); List <ChessBoard.Move> topMoves = new List <ChessBoard.Move>(); foreach (ChessBoard.Move subMove in moveScores.Keys) { for (int i = 0; i < 10; i++) { if (i >= topMoves.Count) { topMoves.Add(subMove); break; } else if (moveScores[subMove] > moveScores[topMoves[i]]) { topMoves.Insert(i, subMove); break; } } } ChessBoard.Move randomGoodMove = topMoves[Random.Range(0, 10)]; /*if (topMoves[0].pieceCaptured != null || moveScores[topMoves[0]] - moveScores[randomGoodMove] > 5) * { * //If the best move is a capture, or is so much better, do it. * return topMoves[0]; * }*/ return(topMoves[0]); }