Пример #1
0
        static void Main(string[] args)
        {
            int[]  stats = new int[3];
            string input = "";
            int    bet   = 0;

            Console.OutputEncoding = System.Text.Encoding.Unicode;
            CreateMenu(out MenuItem[] menu);
            bool      nextGame  = true;
            bool      inputTest = true;
            BlackJack bj        = new BlackJack(17);

            do
            {
                while (true)
                {
                    // Žádá uživatele o zadání sázky
                    Console.WriteLine("Tvůj kredit je: ${0} Kolik sázíš? (minimální sázka je ${1})", bj.Player.Credit, MINBET);
                    try
                    {
                        bet = int.Parse(Console.ReadLine());
                        if (bet > bj.Player.Credit)
                        {
                            throw new Exception("Nemáš dostatečný kredit na tuto sázku");
                        }
                        if (bet < MINBET)
                        {
                            throw new Exception("Sázka je menší než minimální sázka.");
                        }
                        break;
                    }
                    catch (FormatException e)
                    {
                        Console.WriteLine("Nebylo zadáno číslo.");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }

                while (bj.Result == GameResult.Pending)
                {
                    // kontrola zda má hráč blackjack a zda může hrát double
                    if (bj.Player.Hand.deck.Count < 3 && bj.Player.Hand.Value() < 21 && bj.Player.Credit >= (bet * 2))
                    {
                        menu[(int)MenuKey.Double].IsActive = true;
                    }
                    else
                    {
                        menu[(int)MenuKey.Double].IsActive = false;
                        if (!BlackJackRules.HasBlackJack(bj.Dealer.Hand) && BlackJackRules.HasBlackJack(bj.Player.Hand))
                        {
                            bj.Stand();
                            bj.Result = GameResult.BlackJack;
                            break;
                        }
                    }

                    if (!BlackJackRules.CanPlayerHit(bj.Player.Hand))
                    {
                        bj.Stand();
                        break;
                    }
                    ShowStats(bj);

                    do
                    {
                        Console.Write("Jsi na řadě. ");

                        foreach (MenuItem item in menu)
                        {
                            if (item.IsActive)
                            {
                                Console.Write("{0}:{1}; ", item.Key, item.Caption);
                            }
                        }
                        Console.Write(Environment.NewLine);
                        input = Console.ReadLine();
                        MenuItem result = Array.Find(menu, k => k.Key == input.ToLower());

                        //v případě, že uživatel zadá volbu, která sice může být v menu, ale není aktivní, nastaví výslednou klávesu na null, čímž spustí default switch
                        if (!result.IsActive)
                        {
                            result.Key = null;
                        }


                        switch (result.Key)
                        {
                        case "h":
                            bj.Hit();
                            inputTest = true;
                            break;


                        case "s":
                            bj.Stand();
                            inputTest = true;
                            break;

                        case "d":
                            bet *= 2;
                            bj.Double();
                            inputTest = true;
                            break;

                        default:
                            Console.Write("Nesprávná volba. ");
                            inputTest = false;
                            break;
                        }
                    } while (!inputTest);
                }
                ShowStats(bj);
                switch (bj.Result)
                {
                case GameResult.Win:
                    bj.Player.Credit           += bet;
                    stats[(int)GameResult.Win] += 1;
                    break;

                case GameResult.Lose:
                    bj.Player.Credit            -= bet;
                    stats[(int)GameResult.Lose] += 1;
                    break;

                case GameResult.BlackJack:
                    bj.Player.Credit           += (int)(bet * 1.5);
                    stats[(int)GameResult.Win] += 1;
                    break;

                default:
                    stats[(int)GameResult.Draw] += 1;
                    break;
                }

                Console.WriteLine(bj.Result);

                if (bj.Player.Credit < MINBET)
                {
                    ShowStatistic(stats);
                    Console.WriteLine("Konec hry...");
                    Console.ReadLine();
                    break;
                }
                while (true)
                {
                    Console.WriteLine("Další hra? A/N");
                    input = Console.ReadLine();
                    try
                    {
                        switch (input.ToLower())
                        {
                        case "a":
                            nextGame = true;
                            bj.Reset();
                            break;

                        case "n":
                            nextGame = false;
                            ShowStatistic(stats);
                            Console.WriteLine("Konec hry...");
                            Console.ReadLine();
                            break;

                        default:
                            throw new Exception("Nesprávná volba. ");
                        }
                        break;
                    }
                    catch (Exception e)
                    {
                        Console.Write(e.Message);
                    }
                }
            } while (nextGame);
        }