Esempio n. 1
0
    public void OnClickBox(BoardBox clickedBox)
    {
        PlayerColor curColor = GameManager.instance.currentPlayer.color;

        //Debug.Log(GameManager.instance.currentPlayer);
        if (GameManager.instance.status == GameStatus.Fight)
        {
            if (clickedBox.boxContent == BoxContent.Barrier)
            {
                StartCoroutine(flashErrorText("Can't place anything in a box with a barrier!"));
                return;
            }
            int buffer = 0;
            if (curColor == PlayerColor.Blue)
            {
                buffer += 3;
            }

            if (clickedBox.boxContent == BoxContent.Empty)
            {
                GameObject newPiece = Instantiate(piecePrefab, clickedBox.transform);
                clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[(int)GameManager.instance.currentTypeMode + buffer];
                clickedBox.boxContent   = BoxContent.Piece;
                clickedBox.currentPiece = newPiece.GetComponent <Piece>();
                ++GameManager.instance.currentPlayer.score;
                GameManager.instance.processPlay(clickedBox);
                if (GameManager.instance.checkGameOver())
                {
                    //game is over right now, no place to place any piece now.
                    int res = GameManager.instance.gameOver();
                    if (res == 0)
                    {
                        p1Win.gameObject.SetActive(true);
                    }
                    else if (res == 1)
                    {
                        p2Win.gameObject.SetActive(true);
                    }
                    else if (res == 2)
                    {
                        p1Win.gameObject.SetActive(true);
                        p2Win.gameObject.SetActive(true);
                    }
                    startGameButton.interactable = true;
                }
            }
        }
        else if (GameManager.instance.status == GameStatus.SetBarrier)
        {
            if (clickedBox.boxContent == BoxContent.Empty && GameManager.instance.countBarrier < GameManager.instance.maxBarriers)
            {
                //GameObject newPiece = Instantiate(piecePrefab, clickedBox.transform);
                clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[6];
                //dont set box content here, just remember all the barriers
                clickedBox.boxContent = BoxContent.Barrier;
                GameManager.instance.countBarrier++;
                if (curColor == PlayerColor.Blue)
                {
                    clickedBox.barrierInfo[0] = true;
                }
                else
                {
                    clickedBox.barrierInfo[1] = true;
                }
            }
            else if (clickedBox.boxContent == BoxContent.Barrier)
            {
                clickedBox.GetComponent <Image>().sprite = GameManager.instance.pieceSprites[7];
                clickedBox.boxContent = BoxContent.Empty;
                if (curColor == PlayerColor.Blue)
                {
                    clickedBox.barrierInfo[0] = false;
                }
                else
                {
                    clickedBox.barrierInfo[1] = false;
                }
                GameManager.instance.countBarrier--;
            }
        }
    }
Esempio n. 2
0
    void checkForTrump(BoardBox box)
    {
        BoardBox barrierBox = null;

        if (box.rowNum + 2 < amtRows)
        {
            BoardBox right = board.board[box.rowNum + 1][box.colNum];
            if (right.boxContent == BoxContent.Piece)
            {
                if (right.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, right.currentPiece) && right.isSequence)
                {
                    BoardBox rightRight = board.board[box.rowNum + 2][box.colNum];
                    if (isPair(box, rightRight))
                    {
                        // change sprite of middle box to a barrier
                        right.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = right;
                        right.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score & fix booleans
                        right.isSequence = false;
                        while (right.colNum + 1 < amtColumns && board.board[right.rowNum][right.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(right, board.board[right.rowNum][right.colNum + 1]))
                            {
                                --right.currentPiece.owner.score;
                                board.board[right.rowNum][right.colNum + 1].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            right = board.board[right.rowNum][right.colNum + 1];
                        }
                        right = board.board[box.rowNum + 1][box.colNum];
                        while (right.colNum - 1 >= 0 && board.board[right.rowNum][right.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(right, board.board[right.rowNum][right.colNum - 1]))
                            {
                                --right.currentPiece.owner.score;
                                board.board[right.rowNum][right.colNum - 1].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            right = board.board[right.rowNum][right.colNum - 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.rowNum - 2 >= 0)
        {
            BoardBox left = board.board[box.rowNum - 1][box.colNum];
            if (left.boxContent == BoxContent.Piece)
            {
                if (left.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, left.currentPiece) && left.isSequence)
                {
                    BoardBox leftLeft = board.board[box.rowNum - 2][box.colNum];
                    if (isPair(box, leftLeft))
                    {
                        // change sprite of middle box to a barrier
                        left.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = left;
                        left.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        left.isSequence = false;
                        while (left.colNum + 1 < amtColumns && board.board[left.rowNum][left.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(left, board.board[left.rowNum][left.colNum + 1]))
                            {
                                --left.currentPiece.owner.score;
                                board.board[left.rowNum][left.colNum + 1].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            left = board.board[left.rowNum][left.colNum + 1];
                        }
                        left = board.board[box.rowNum - 1][box.colNum];
                        while (left.colNum - 1 >= 0 && board.board[left.rowNum][left.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(left, board.board[left.rowNum][left.colNum - 1]))
                            {
                                --left.currentPiece.owner.score;
                                board.board[left.rowNum][left.colNum - 1].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            left = board.board[left.rowNum][left.colNum - 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.colNum + 2 < amtColumns)
        {
            BoardBox up = board.board[box.rowNum][box.colNum + 1];
            if (up.boxContent == BoxContent.Piece)
            {
                if (up.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, up.currentPiece) && up.isSequence)
                {
                    BoardBox upUp = board.board[box.rowNum][box.colNum + 2];
                    if (isPair(box, upUp))
                    {
                        // change sprite of middle box to a barrier
                        up.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = up;
                        up.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        up.isSequence = false;
                        while (up.rowNum + 1 < amtRows && board.board[up.rowNum + 1][up.colNum].boxContent != BoxContent.Empty)
                        {
                            if (isPair(up, board.board[up.rowNum + 1][up.colNum]))
                            {
                                --up.currentPiece.owner.score;
                                board.board[up.rowNum + 1][up.colNum].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            up = board.board[up.rowNum + 1][up.colNum];
                        }
                        up = board.board[box.rowNum][box.colNum + 1];
                        while (up.rowNum - 1 >= 0 && board.board[up.rowNum - 1][up.colNum].boxContent != BoxContent.Empty)
                        {
                            if (isPair(up, board.board[up.rowNum - 1][up.colNum]))
                            {
                                --up.currentPiece.owner.score;
                                board.board[up.rowNum - 1][up.colNum].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            up = board.board[up.rowNum - 1][up.colNum];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.colNum - 2 >= 0)
        {
            BoardBox down = board.board[box.rowNum][box.colNum - 1];
            if (down.boxContent == BoxContent.Piece)
            {
                if (down.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, down.currentPiece) && down.isSequence)
                {
                    BoardBox downDown = board.board[box.rowNum][box.colNum - 2];
                    if (isPair(box, downDown))
                    {
                        // change sprite of middle box to a barrier
                        down.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = down;
                        down.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        down.isSequence = false;
                        while (down.rowNum + 1 < amtRows && board.board[down.rowNum + 1][down.colNum].boxContent != BoxContent.Empty)
                        {
                            if (isPair(down, board.board[down.rowNum + 1][down.colNum]))
                            {
                                --down.currentPiece.owner.score;
                                board.board[down.rowNum + 1][down.colNum].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            down = board.board[down.rowNum + 1][down.colNum];
                        }
                        down = board.board[box.rowNum][box.colNum - 1];
                        while (down.colNum - 1 >= 0 && board.board[down.rowNum - 1][down.colNum].boxContent != BoxContent.Empty)
                        {
                            if (isPair(down, board.board[down.rowNum - 1][down.colNum]))
                            {
                                --down.currentPiece.owner.score;
                                board.board[down.rowNum - 1][down.colNum].isSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            down = board.board[down.rowNum - 1][down.colNum];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        // diagonal cases
        if (box.rowNum + 2 < amtRows && box.colNum - 2 >= 0)
        {
            BoardBox next = board.board[box.rowNum + 1][box.colNum - 1];
            if (next.boxContent == BoxContent.Piece)
            {
                if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence)
                {
                    BoardBox nextNext = board.board[box.rowNum + 2][box.colNum - 2];
                    if (isPair(box, nextNext))
                    {
                        // change sprite of middle box to a barrier
                        next.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = next;
                        next.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        next.isDiagonalSequence = false;
                        while (next.rowNum + 1 < amtRows && next.colNum + 1 < amtColumns &&
                               board.board[next.rowNum + 1][next.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum + 1][next.colNum + 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum + 1][next.colNum + 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum + 1][next.colNum + 1];
                        }
                        next = board.board[box.rowNum + 1][box.colNum - 1];
                        while (next.rowNum - 1 >= 0 && next.colNum - 1 >= 0 &&
                               board.board[next.rowNum - 1][next.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum - 1][next.colNum - 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum - 1][next.colNum - 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum - 1][next.colNum - 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.rowNum - 2 >= 0 && box.colNum + 2 < amtColumns)
        {
            BoardBox next = board.board[box.rowNum - 1][box.colNum + 1];
            if (next.boxContent == BoxContent.Piece)
            {
                if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence)
                {
                    BoardBox nextNext = board.board[box.rowNum - 2][box.colNum + 2];
                    if (isPair(box, nextNext))
                    {
                        // change sprite of middle box to a barrier
                        next.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = next;
                        next.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        next.isDiagonalSequence = false;
                        while (next.rowNum + 1 < amtRows && next.colNum + 1 < amtColumns &&
                               board.board[next.rowNum + 1][next.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum + 1][next.colNum + 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum + 1][next.colNum + 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum + 1][next.colNum + 1];
                        }
                        next = board.board[box.rowNum - 1][box.colNum + 1];
                        while (next.rowNum - 1 >= 0 && next.colNum - 1 >= 0 &&
                               board.board[next.rowNum - 1][next.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum - 1][next.colNum - 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum - 1][next.colNum - 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum - 1][next.colNum - 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.rowNum - 2 >= 0 && box.colNum - 2 >= 0)
        {
            BoardBox next = board.board[box.rowNum - 1][box.colNum - 1];
            if (next.boxContent == BoxContent.Piece)
            {
                if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence)
                {
                    BoardBox nextNext = board.board[box.rowNum - 2][box.colNum - 2];
                    if (isPair(box, nextNext))
                    {
                        // change sprite of middle box to a barrier
                        next.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = next;
                        next.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        next.isDiagonalSequence = false;
                        while (next.rowNum + 1 < amtRows && next.colNum - 1 >= 0 &&
                               board.board[next.rowNum + 1][next.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum + 1][next.colNum - 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum + 1][next.colNum - 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum + 1][next.colNum - 1];
                        }
                        next = board.board[box.rowNum - 1][box.colNum - 1];
                        while (next.rowNum - 1 >= 0 && next.colNum + 1 < amtColumns &&
                               board.board[next.rowNum - 1][next.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum - 1][next.colNum + 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum - 1][next.colNum + 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum - 1][next.colNum + 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
        if (box.rowNum + 2 < amtRows && box.colNum + 2 < amtColumns)
        {
            BoardBox next = board.board[box.rowNum + 1][box.colNum + 1];
            if (next.boxContent == BoxContent.Piece)
            {
                if (next.currentPiece.owner != currentPlayer && doesTrump(box.currentPiece, next.currentPiece) && next.isDiagonalSequence)
                {
                    BoardBox nextNext = board.board[box.rowNum + 2][box.colNum + 2];
                    if (isPair(box, nextNext))
                    {
                        // change sprite of middle box to a barrier
                        next.GetComponent <Image>().sprite = barrierSprite;
                        barrierBox = next;
                        next.currentPiece.owner.score -= 2;
                        // refactor the opposing player's score
                        next.isDiagonalSequence = false;
                        while (next.rowNum + 1 < amtRows && next.colNum - 1 >= 0 &&
                               board.board[next.rowNum + 1][next.colNum - 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum + 1][next.colNum - 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum + 1][next.colNum - 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum + 1][next.colNum - 1];
                        }
                        next = board.board[box.rowNum + 1][box.colNum + 1];
                        while (next.rowNum - 1 >= 0 && next.colNum + 1 < amtColumns &&
                               board.board[next.rowNum - 1][next.colNum + 1].boxContent != BoxContent.Empty)
                        {
                            if (isPair(next, board.board[next.rowNum - 1][next.colNum + 1]))
                            {
                                --next.currentPiece.owner.score;
                                board.board[next.rowNum - 1][next.colNum + 1].isDiagonalSequence = false;
                            }
                            else
                            {
                                break;
                            }
                            next = board.board[next.rowNum - 1][next.colNum + 1];
                        }
                        barrierBox.boxContent   = BoxContent.Barrier;
                        barrierBox.currentPiece = null;
                        return;
                    }
                }
            }
        }
    }