获取代表 1 或 11 的 Ace 值

发布于 2024-10-06 02:57:55 字数 7594 浏览 4 评论 0原文

我正在玩二十一点程序的一些代码,但我无法找到一种方法使 A 成为 1 或 11,就像真正的二十一点一样。这不是家庭作业。我刚刚重新开始编程。谁能指出我正确的方向?`课程计划 { 静态字符串[]玩家卡=新字符串[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();

I'm playing with some code for a blackjack program but I'm having trouble finding a way to make the Ace be a 1 or an 11, like in real blackjack. This isn't homework. I'm just getting back into programming. Can anyone point me in the right direction?` 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);
            }
        }
    }
}

}

changed some of the code to this but still problems

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感情洁癖 2024-10-13 02:57:55

似乎一个干净的解决方案是计算一组给定卡片的所有可能总数,然后根据需要选择适合每个用户操作的卡片。例如,如果用户留下,那么 9-A 将是 20,而不是 10。如果用户点击到达 9-AA,然后留下,则它将是 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    

Seems like a clean solution would be to calculate all possible totals for a given set of cards, then choose the one that's appropriate for each user action, if needed. For example, if a user stays, then 9-A would be 20, not 10. If the user hits to arrive at 9-A-A, and then stays, it would be 21, not 11 or 30.

Here's some pseudocode for one game:

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    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文