public override void DoTurn() { var piecesPosList = PieceFinder.findAllPieces(Color, _boards); //First three tries working like this: RANDOM(select piece)->RANDOM(select move) for (int i = 0; i < 3; i++) { int selectedPiece = Random.Range(0, piecesPosList.Count); var turns = new List <Vector3> (); var piece = GetPiece(piecesPosList [selectedPiece]); var startPos = piecesPosList [selectedPiece]; turns.AddRange(piece.GetAvailableMoves(startPos, _boards)); turns.AddRange(piece.GetAvailableCaptures(startPos, _boards)); if (turns.Count != 0) { int selectedEndPoint = Random.Range(0, turns.Count); _gameManager.DoTurn(ConstructMove(piecesPosList [selectedPiece], turns [selectedEndPoint])); return; } } //Fallback to the RANDOM(get all pathes) var allTurns = new Dictionary <Vector3, List <Vector3> >(piecesPosList.Count); int totalCount = 0; for (int i = 0; i < piecesPosList.Count; i++) { allTurns [piecesPosList [i]] = new List <Vector3> (); var piece = GetPiece(piecesPosList [i]); var startPos = piecesPosList [i]; allTurns [piecesPosList [i]].AddRange(piece.GetAvailableMoves(startPos, _boards)); allTurns [piecesPosList [i]].AddRange(piece.GetAvailableCaptures(startPos, _boards)); totalCount += allTurns[piecesPosList [i]].Count; } int skipped = 0; int selectedMove = Random.Range(0, totalCount); for (int i = 0; i < piecesPosList.Count; i++) { if (skipped + allTurns[piecesPosList [i]].Count > selectedMove) { _gameManager.DoTurn(ConstructMove(piecesPosList [i], allTurns[piecesPosList[i]][selectedMove - skipped])); return; } skipped += allTurns [piecesPosList [i]].Count; } throw new DragonChessException("Can't choose the turn. Algorithm's problem"); }
public static bool isCheckMateForSide(Color color, Board[] boards) { List <Vector3> ourPiecesPositions = PieceFinder.findAllPieces(color, boards); foreach (Vector3 piecePos in ourPiecesPositions) { Piece piece = GetCell(piecePos, boards).Piece.GetComponent <Piece>(); if (piece.GetAvailableMoves(piecePos, boards).Count != 0 || piece.GetAvailableCaptures(piecePos, boards).Count != 0) { return(false); } } return(true); }