Example #1
0
    void OnPieceFallAnimationEnded(Transform currentTransform)
    {
        // Check victory
        CELL_MARKING victory = CheckVictory(Cells);

        if (victory != CELL_MARKING.NONE)
        {
            ShowWinnerDialog(victory);
            return;
        }

        // Checking if it's end of game (Line plus column) - This was a no winner game
        if (MovesDone == 42)
        {
            ShowWinnerDialog(CELL_MARKING.NONE);
            return;
        }

        if (CurrentState == GAME_STATE.PLAYER_MOVE)
        {
            CurrentState = GAME_STATE.AI_MOVE;

            PlayerImage.color = MaskMoveColor;
            AIImage.color     = Color.white;

            // Create AI Level (Easy - Random, Medium - MinMax with 3 levels tree, Hard - MinMax with 5 levels tree)
            if (GameDifficulty == GAME_DIFFICULTY.EASY)
            {
                DoRandomAIMove();
            }
            else
            {
                DoMainMaxMove();
            }

            // If it's the first move we must enable the reset button
            ResetButton.interactable = true;
        }
        else if (CurrentState == GAME_STATE.AI_MOVE)
        {
            EnableAllColumnsButtons(true);

            CurrentState = GAME_STATE.PLAYER_MOVE;

            PlayerImage.color = Color.white;
            AIImage.color     = MaskMoveColor;
        }
    }
Example #2
0
    void ShowWinnerDialog(CELL_MARKING winner)
    {
        PlayerImage.color = MaskMoveColor;
        AIImage.color     = MaskMoveColor;

        ResetButton.interactable = false;

        EnableAllColumnsButtons(false);

        ResultDialog.gameObject.SetActive(true);

        // Starting the winning animation
        for (int j = 0; j < 7; j++)
        {
            Transform columnObj = transform.GetChild(j);
            for (int i = 0; i < columnObj.childCount; i++)
            {
                columnObj.GetChild(i).GetComponent <Piece>().StartWinAnimation();
            }
        }

        string winnerTxt = "";

        switch (winner)
        {
        case CELL_MARKING.NONE:
            winnerTxt = "THERE IS NO WINNER";
            break;

        case CELL_MARKING.PLAYER:
            winnerTxt = "PLAYER WINS";
            break;

        case CELL_MARKING.AI:
            winnerTxt = "AI WINS";
            break;
        }
        ;

        ResultDialog.GetComponent <ResultDialog>().OnDialogFinished = OnResultDialogFinished;
        ResultDialog.GetComponent <ResultDialog>().ShowDialog(winnerTxt);
    }
Example #3
0
    CELL_MARKING CheckVerticalVictory(int currentI, int currentJ, CELL_MARKING currentMarking,
                                      int count, CELL_DATA[,] currentCells)
    {
        // Stop Condition
        if (currentI > 5)
        {
            return(CELL_MARKING.NONE);
        }

        if (currentCells[currentI, currentJ].Marking == CELL_MARKING.NONE)
        {
            return(CheckVerticalVictory(currentI + 1, currentJ, CELL_MARKING.NONE, 0, currentCells));
        }

        if (currentCells[currentI, currentJ].Marking != currentMarking)
        {
            return(CheckVerticalVictory(currentI + 1, currentJ, currentCells[currentI, currentJ].Marking, 1, currentCells));
        }

        count++;

        if (count == 4)
        {
            // Marking the winning pieces to be used in win animation
            for (int i = 0; i < 4; i++)
            {
                Transform piece = currentCells[currentI - i, currentJ].Object;

                if (piece != null)
                {
                    piece.GetComponent <Piece>().IsWinnerPiece = true;
                }
            }

            return(currentMarking);
        }

        return(CheckVerticalVictory(currentI + 1, currentJ, currentMarking, count, currentCells));
    }
Example #4
0
    CELL_MARKING CheckRightDiagonalVictory(int currentI, int currentJ, CELL_MARKING currentMarking,
                                           int count, CELL_DATA[,] currentCells)
    {
        // Stop Condition
        if (currentI > 5 || currentJ < 0)
        {
            return(CELL_MARKING.NONE);
        }

        if (currentCells[currentI, currentJ].Marking == CELL_MARKING.NONE)
        {
            return(CheckRightDiagonalVictory(currentI + 1, currentJ - 1, CELL_MARKING.NONE, 0, currentCells));
        }

        if (currentCells[currentI, currentJ].Marking != currentMarking)
        {
            return(CheckRightDiagonalVictory(currentI + 1, currentJ - 1, currentCells[currentI, currentJ].Marking, 1, currentCells));
        }

        count++;

        if (count == 4)
        {
            for (int i = 0; i < 4; i++)
            {
                Transform piece = currentCells[currentI - i, currentJ + i].Object;

                if (piece != null)
                {
                    piece.GetComponent <Piece>().IsWinnerPiece = true;
                }
            }

            return(currentMarking);
        }

        return(CheckRightDiagonalVictory(currentI + 1, currentJ - 1, currentMarking, count, currentCells));
    }
Example #5
0
    public CELL_MARKING CheckVictory(CELL_DATA [,] currentCells)
    {
        // Check horizontal victory
        for (int i = 0; i < 6; i++)
        {
            CELL_MARKING horizontalResult = CheckHorizontalVictory(i, 0, CELL_MARKING.NONE, 0, currentCells);

            if (horizontalResult != CELL_MARKING.NONE)
            {
                return(horizontalResult);
            }
        }

        // Check vertical victory
        for (int j = 0; j < 7; j++)
        {
            CELL_MARKING verticalResult = CheckVerticalVictory(0, j, CELL_MARKING.NONE, 0, currentCells);

            if (verticalResult != CELL_MARKING.NONE)
            {
                return(verticalResult);
            }
        }

        // Check left diagonal victory
        CELL_MARKING leftDiagonalResult = CELL_MARKING.NONE;

        for (int i = 0; i < 3; i++)
        {
            leftDiagonalResult = CheckLeftDiagonalVictory(i, 0, CELL_MARKING.NONE, 0, currentCells);
            if (leftDiagonalResult != CELL_MARKING.NONE)
            {
                return(leftDiagonalResult);
            }
        }

        for (int j = 0; j < 4; j++)
        {
            leftDiagonalResult = CheckLeftDiagonalVictory(0, j, CELL_MARKING.NONE, 0, currentCells);
            if (leftDiagonalResult != CELL_MARKING.NONE)
            {
                return(leftDiagonalResult);
            }
        }

        // Check right diagonal victory
        CELL_MARKING rightDiagonalResult = CELL_MARKING.NONE;

        for (int i = 0; i < 3; i++)
        {
            rightDiagonalResult = CheckRightDiagonalVictory(i, 6, CELL_MARKING.NONE, 0, currentCells);
            if (rightDiagonalResult != CELL_MARKING.NONE)
            {
                return(rightDiagonalResult);
            }
        }

        for (int j = 6; j > 2; j--)
        {
            rightDiagonalResult = CheckRightDiagonalVictory(0, j, CELL_MARKING.NONE, 0, currentCells);
            if (rightDiagonalResult != CELL_MARKING.NONE)
            {
                return(rightDiagonalResult);
            }
        }

        return(CELL_MARKING.NONE);
    }