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; } }
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); }
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)); }
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)); }
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); }