Получение значения Ace для представления 1 или 11 - PullRequest
0 голосов
/ 03 декабря 2010

Я играю с некоторым кодом для программы блэкджека, но у меня возникают проблемы с поиском способа сделать Ace 1 или 11, как в настоящем блэкджеке.Это не домашняя работа.Я просто возвращаюсь в программирование.Кто-нибудь может указать мне правильное направление? `Class Program {static string [] playerCards = new string [11];

    static string hitOrStay = "";

    static int total = 0, count = 1, dealerTotal = 0;

    static Random cardRandomizer = new Random();

    static string name = "";

    static void Main(string[] args)
    {
        using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
        {
            Console.Title = "Blackjack";
            synth.Speak("Welcome to johns Talking Blackjack Simulator. My name is Alice and I'll be your Dealer. Whom am I speaking with?");
            name = Console.ReadLine();
            synth.Speak("Thank You");
            synth.Speak(name);
            synth.Speak("lets get started.");
            Console.Clear();

        }

        Start();


    }



    static void Start()
    {

        dealerTotal = cardRandomizer.Next(15, 22);

        playerCards[0] = Deal();

        playerCards[1] = Deal();

        do
        {

            Console.WriteLine("You were dealed a " + playerCards[0] + " and a " + playerCards[1] + ". \nYour total is " + total + ".\nWould you like to hit or stay? h for hit s for stay.");

            hitOrStay = Console.ReadLine().ToLower();

        } while (!hitOrStay.Equals("h") && !hitOrStay.Equals("s"));

        Game();

    }



    static void Game()
    {

        if (hitOrStay.Equals("h"))
        {
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
            {
                synth.Speak(name + "takes a card");
            }
            Hit();

        }

        else if (hitOrStay.Equals("s"))
        {

            if (total > dealerTotal && total <= 21)
            {

                Console.WriteLine("\nCongrats! You won the game! The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");
                using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {
                    synth.Speak("Congratulations! You Win!");
                }
                PlayAgain();

            }

            else if (total < dealerTotal)
            {

                Console.WriteLine("\nSorry, you lost! The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");
                using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {
                    synth.Speak("Sorry, you lost! Maybe you should try the slot machines?");
                }
                PlayAgain();

            }



        }

        Console.ReadLine();

    }



    static string Deal()
    {

        string Card = "";

        int cards = cardRandomizer.Next(1, 14);

        switch (cards)
        {

            case 1: Card = "Two"; total += 2;

                break;

            case 2: Card = "Three"; total += 3;

                break;

            case 3: Card = "Four"; total += 4;

                break;

            case 4: Card = "Five"; total += 5;

                break;

            case 5: Card = "Six"; total += 6;

                break;

            case 6: Card = "Seven"; total += 7;

                break;

            case 7: Card = "Eight"; total += 8;

                break;

            case 8: Card = "Nine"; total += 9;

                break;

            case 9: Card = "Ten"; total += 10;

                break;

            case 10: Card = "Jack"; total += 10;

                break;

            case 11: Card = "Queen"; total += 10;

                break;

            case 12: Card = "King"; total += 10;

                break;

            case 13: Card = "Ace"; total += 11;

                break;

            default: Card = "2"; total += 2;

                break;

        }

        return Card;

    }


    static void Hit()
    {

        count += 1;

        playerCards[count] = Deal();

        Console.WriteLine("\nYou were dealed a(n) " + playerCards[count] + ".\nYour new total is " + total + ".");

        if (total == 21)
        {

            Console.WriteLine("\nYou got Blackjack! The dealer's total was " + dealerTotal + ".\nWould you like to play again?");
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
            {
                synth.Speak("Congradulations! Blackjack!");
            }
            PlayAgain();

        }

        else if (total > 21)
        {

            Console.WriteLine("\nYou busted. Sorry. The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
            {
                synth.Speak("Ouch! Busted! Try your luck again?");
            }
            PlayAgain();

        }

        else if (total < 21)
        {

            do
            {
                using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {
                    synth.Speak("Would you like a card?");
                }

                Console.WriteLine("\nWould you like to hit or stay? h for hit s for stay");

                hitOrStay = Console.ReadLine().ToLower();

            } while (!hitOrStay.Equals("h") && !hitOrStay.Equals("s"));

            Game();

        }

    }



    static void PlayAgain()
    {

        string playAgain = "";

        do
        {

            playAgain = Console.ReadLine().ToLower();

        } while (!playAgain.Equals("y") && !playAgain.Equals("n"));

        if (playAgain.Equals("y"))
        {

            Console.WriteLine("\nPress enter to restart the game!");

            Console.ReadLine();

            Console.Clear();

            dealerTotal = 0;

            count = 1;

            total = 0;

            Start();

        }

        else if (playAgain.Equals("n"))
        {
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
            {
                synth.Speak("\nPress enter to close Black jack." + dealerTotal);
            }

            ConsoleKeyInfo info = Console.ReadKey();
            if (info.Key == ConsoleKey.Enter)
            {

                Environment.Exit(0);
            }
            else
            {

                Console.Read();
                Environment.Exit(0);
            }
        }
    }
}

}

изменил часть кода наэто но все еще проблемы

else if (total > 21)
        {

            if (playerCards[0] == "Ace")
            {

                total -= 10; 
            }
            if (playerCards[1] == "Ace")
            {

                total -= 10;
            }
            do
            {
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {
                    synth.Speak("Would you like a card?");
                }

                Console.WriteLine("\nWould you like to hit or stay? h for hit s for stay");

                hitOrStay = Console.ReadLine().ToLower();

                if (total > 21)
                    Console.WriteLine("\nYou busted. Sorry. The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");
                using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {

                    synth.Speak("Ouch! Busted! Try your luck again?");
                }
                PlayAgain();

1 Ответ

0 голосов
/ 04 декабря 2010

Похоже, что чистым решением было бы рассчитать все возможные итоги для данного набора карточек, а затем выбрать ту, которая подходит для каждого действия пользователя, если это необходимо. Например, если пользователь остается, то 9-A будет 20, а не 10. Если пользователь нажмет, чтобы прийти к 9-A-A, а затем останется, это будет 21, а не 11 или 30.

Вот несколько псевдокодов для одной игры:

Deal out cards; show both of the player's cards and one of the dealer's cards
Determine all possible scores for player's cards
If (One of the scores is 21)
    Goto Dealer's Turn  (this is a blackjack)
Else
    While (Hitting)
        Add one card to player's hand
        Determine all possible scores for player's cards
        If minimum score > 21
            Goto Dealer's Turn  (this is a bust)
        End If
    End While     
End If

Dealer's Turn
    Determine highest score for player that's 21 or lower
    Play Out Dealer's Hand
    Determine Winner    
...