using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class BlackjackGameManager : MonoBehaviour { [Header("UI")] [SerializeField] private UIController ui; [SerializeField] private GameObject blackjackCanvas; [Header("Game Settings")] [SerializeField] private int maxCardCount = 4; [SerializeField] private int startCardCount = 2; [Header("Score Settings")] [SerializeField] private int blackjackScore = 21; [SerializeField] private int successScore = 18; [SerializeField] private int normalScore = 15; [Header("Events")] [SerializeField] private UnityEvent onSuccess; [SerializeField] private UnityEvent onFail; [SerializeField] private UnityEvent onExit; private readonly List playerCards = new List(); private int currentScore; private bool isGameOver; private void Start() { StartGame(); } public void StartGame() { playerCards.Clear(); currentScore = 0; isGameOver = false; if (ui != null) { ui.ClearUI(); ui.SetTurn("Player Turn"); } for (int i = 0; i < startCardCount; i++) { DrawCard(); } CheckAutoResult(); } public void OnHitClicked() { if (isGameOver) return; if (playerCards.Count >= maxCardCount) { FinishByStand(); return; } DrawCard(); CheckAutoResult(); } public void OnStandClicked() { if (isGameOver) return; FinishByStand(); } public void OnRestartClicked() { StartGame(); } public void OnExitClicked() { if (blackjackCanvas != null) blackjackCanvas.SetActive(false); onExit?.Invoke(); } private void DrawCard() { int cardValue = Random.Range(1, 11); playerCards.Add(cardValue); currentScore += cardValue; if (ui != null) { ui.SetCardsByValues(playerCards); ui.SetScore(currentScore); } } private void CheckAutoResult() { if (currentScore > blackjackScore) { FinishGame( "BUST!", $"ÇöÀç Á¡¼ö : {currentScore}\n21À» ÃʰúÇß½À´Ï´Ù.", false ); return; } if (currentScore == blackjackScore) { FinishGame( "BLACKJACK!", $"ÇöÀç Á¡¼ö : {currentScore}\nÁ¤È®È÷ 21ÀÔ´Ï´Ù!\nº¸»ó ȹµæ!", true ); return; } if (playerCards.Count >= maxCardCount) { FinishByStand(); } } private void FinishByStand() { if (currentScore > blackjackScore) { FinishGame( "BUST!", $"ÃÖÁ¾ Á¡¼ö : {currentScore}\n21À» ÃʰúÇß½À´Ï´Ù.", false ); return; } if (currentScore == blackjackScore) { FinishGame( "BLACKJACK!", $"ÃÖÁ¾ Á¡¼ö : {currentScore}\n¿Ïº®ÇÕ´Ï´Ù!\nº¸»ó ȹµæ!", true ); return; } if (currentScore >= successScore) { FinishGame( "¼º°ø!", $"ÃÖÁ¾ Á¡¼ö : {currentScore}\n21¿¡ ¾ÆÁÖ °¡±õ½À´Ï´Ù.\nº¸»ó ȹµæ!", true ); return; } if (currentScore >= normalScore) { FinishGame( "º¸Åë", $"ÃÖÁ¾ Á¡¼ö : {currentScore}\n³ª»ÚÁö ¾ÊÀº ¼±ÅÃÀÔ´Ï´Ù.", false ); return; } FinishGame( "½ÇÆÐ", $"ÃÖÁ¾ Á¡¼ö : {currentScore}\nÁ¡¼ö°¡ ³Ê¹« ³·½À´Ï´Ù.", false ); } private void FinishGame(string title, string description, bool isSuccess) { isGameOver = true; if (ui != null) { ui.ShowResult(title, description); } if (isSuccess) { onSuccess?.Invoke(); } else { onFail?.Invoke(); } } }