Example #1
0
    private bool HasSpaceForAnyPieceVariant(Vector2Int coordinate, Player player)
    {
        bool spaceAvailable = false;

        foreach (Piece piece in player.Pieces)
        {
            List <int[, ]> mapsVariants = MatriceManager.GeneratesAllMatriceVariants(piece.PieceForm);

            foreach (int[,] pieceForm in mapsVariants)
            {
                int col = pieceForm.GetLength(0);
                int row = pieceForm.GetLength(1);

                spaceAvailable = VerifyPiecePlacement(pieceForm, coordinate, player);

                if (spaceAvailable)
                {
                    return(spaceAvailable);
                }
                else
                {
                    // To verify all possible placement of the piece we have to change the coordinate according to its size
                    int maxSize = (col > row) ? col : row;
                    for (int i = 1; i <= maxSize; i++)
                    {
                        if (VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x + i, coordinate.y), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x - i, coordinate.y), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x, coordinate.y + i), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x, coordinate.y - i), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x + i, coordinate.y + i), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x + i, coordinate.y - i), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x - i, coordinate.y + i), player) ||
                            VerifyPiecePlacement(pieceForm, new Vector2Int(coordinate.x - i, coordinate.y - i), player))
                        {
                            spaceAvailable = true;
                            return(spaceAvailable);
                        }
                    }
                }
            }
        }

        return(spaceAvailable);
    }