Консоль Блэкджек C#, подведение итогов

Наше введение в профессора кодирования требовало от нас создания игры в блэкджек с использованием массивов в C#. У нас возникли проблемы с добавлением значений нашей "карты попаданий" к нашим начальным суммам. Когда мы пытаемся нанести удар несколько раз, все, что он делает - это заменяет первую "карту попадания" и добавляет только новую к первоначальному итогу.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Blackjack_Midterm
{
class Program
{
    static void Main(string[] args)
    {

        //set up multidementional array for card values
        string[,] cards = new string[52, 3]
                {
                    {"Hearts", "Ace", "1"},
                    {"Diamonds", "Ace", "1"},
                    {"Clubs", "Ace", "1"},
                    {"Spades", "Ace", "1"},
                    {"Hearts", "Two", "2"},
                    {"Diamonds", "Two", "2"},
                    {"Clubs", "Two", "2"},
                    {"Spades", "Two", "2"},
                    {"Hearts", "Three", "3"},
                    {"Diamonds", "Three", "3"},
                    {"Clubs", "Three", "3"},
                    {"Spades", "Three", "3"},
                    {"Hearts", "Four", "4"},
                    {"Diamonds", "Four", "4"},
                    {"Clubs", "Four", "4"},
                    {"Spades", "Four", "4"},
                    {"Hearts", "Five", "5"},
                    {"Diamonds", "Five", "5"},
                    {"Clubs", "Five", "5"},
                    {"Spades", "Five", "5"},
                    {"Hearts", "Six", "6"},
                    {"Diamonds", "Six", "6"},
                    {"Clubs", "Six", "6"},
                    {"Spades", "Six", "6"},
                    {"Hearts", "Seven", "7"},
                    {"Diamonds", "Seven", "7"},
                    {"Clubs", "Seven", "7"},
                    {"Spades", "Seven", "7"},
                    {"Hearts", "Eight", "8"},
                    {"Diamonds", "Eight", "8"},
                    {"Clubs", "Eight", "8"},
                    {"Spades", "Eight", "8"},
                    {"Hearts", "Nine", "9"},
                    {"Diamonds", "Nine", "9"},
                    {"Clubs", "Nine", "9"},
                    {"Spades", "Nine", "9"},
                    {"Hearts", "Ten", "10"},
                    {"Diamonds", "Ten", "10"},
                    {"Clubs", "Ten", "10"},
                    {"Spades", "Ten", "10"},
                    {"Hearts", "Jack", "10"},
                    {"Diamonds", "Jack", "10"},
                    {"Clubs", "Jack", "10"},
                    {"Spades", "Jack", "10"},
                    {"Hearts", "Queen", "10"},
                    {"Diamonds", "Queen", "10"},
                    {"Clubs", "Queen", "10"},
                    {"Spades", "Queen", "10"},
                    {"Hearts", "King", "10"},
                    {"Diamonds", "King", "10"},
                    {"Clubs", "King", "10"},
                    {"Spades", "King", "10"},
                };






        //Title and Rules of game
        Console.WriteLine("BlackJack with FlapJacks \n");
        Console.WriteLine("Rules: \n");
        Console.WriteLine("        - You are given two cards");
        Console.WriteLine("        - The Dealer is given two cards (One          Face-up, one Face-down)");
        Console.WriteLine("        - The object of the game is to get closest to 21 without going over");
        Console.WriteLine("                      - If you go over 21, it's game over");
        Console.WriteLine("                      - If you receive 21 on the first two cards, automatic win (applies to both the dealer and player) \n");
        Console.WriteLine("Press 'ENTER' to begin \n");
        Console.ReadKey();

        Boolean Broke = false;

        int Chips;
        Chips = 100;

        while (Chips > 0)
        {
            Console.WriteLine("Remaining Chips: {0}", Chips);
            Console.Write("Place your bet(1-{0}): ", Chips);
            string bet = Console.ReadLine();
            int Bet = Convert.ToInt16(bet);
            Boolean Stand = false;

            Console.WriteLine("\n");

            //Deal Cards out to player and Dealer
            Console.WriteLine("Dealing Cards \n");
            Thread.Sleep(2000);

            Console.WriteLine("(Player's Hand) \n");

            //Set up a RNG to pick from the created arrays
            //Set up RNG for each card
            Random rnd = new Random();
            int card1 = rnd.Next(52);
            int card2 = rnd.Next(52);
            int card3 = rnd.Next(52);
            int card4 = rnd.Next(52);


            Console.WriteLine(cards[card1, 1] + " of " + cards[card1, 0]);



            card2 = rnd.Next(52);
            Console.WriteLine(cards[card2, 1] + " of " + cards[card2, 0]);


            int Value1 = Convert.ToInt16(cards[card1, 2]);
            int Value2 = Convert.ToInt16(cards[card2, 2]);
            int Total1 = Value1 + Value2;
            Console.WriteLine("Total: " + Total1);


            Console.WriteLine("\n");


            Console.WriteLine("(Dealer's Hand) \n");
            //Show the first card
            card3 = rnd.Next(52);
            Console.WriteLine(cards[card3, 1] + " of " + cards[card3, 0]);

            //Second Card place holder
            card4 = rnd.Next(52);
            Console.WriteLine("[Hidden Card]");

            //Convert the values to integers
            //Add and show the total of the two cards
            int Value3 = Convert.ToInt16(cards[card3, 2]);
            int Value4 = Convert.ToInt16(cards[card4, 2]);
            int Total2 = Value3;
            Console.WriteLine("Total: " + Total2);

            Console.WriteLine("\n");

            while (Stand == false)
            {
                //Ask if Player wants to Hit or Stand
                Console.Write("Hit(1) or Stand(2)?: ");
                //Set up user input (string)
                string GuessAsAString = Console.ReadLine();
                //Convert String to an Int
                int Answer = Convert.ToInt16(GuessAsAString);
                Console.WriteLine("\n");


                if (Answer == 1)
                {
                    Stand = false;
                    //Continually add on to previous player total until     "stand" or "bust"
                    card2 = rnd.Next(52);
                    Console.WriteLine(cards[card2, 1] + " of " +    cards[card2, 0]);
                    int Value5 = Convert.ToInt16(cards [card2, 2]);
                    int Total3 = Total1 + Value5;
                    Console.WriteLine("Total: " + Total3);
                    Console.WriteLine("\n");

                }

                else if (Answer == 2)
                {
                    Stand = true;
                }  
            }

            //Add cards to Dealer's hand until over 17 or bust
            Console.WriteLine("Dealing Dealer's hand");
            Thread.Sleep(1000);


            Console.WriteLine(cards[card4, 1] + " of " + cards[card4, 0]);



        }



        Console.ReadKey();














}
}
}

1 ответ

Похоже, вы никогда не обновляете исходную итоговую переменную: Total1 как часть вашего while (Stand == false) петля. Вместо этого вы делаете точно так, как вы описываете: только добавление нового значения карты к первоначальному значению.

Что вам нужно сделать, это не объявлять повторно Total3 переменная каждый раз, когда цикл цикла повторяется. Вместо этого переместите объявление вне цикла. Например:

int Total3 = Total1; // Intialise the running total with the inital value from the deal
while (Stand == false)
{
    ...

    Total3 = Total3 + Value5; // Add value of the newly dealt card to the running total.
    Console.WriteLine("Total: " + Total3);

    ...
}

Я также настоятельно рекомендую переименовать ваши переменные лучше, чтобы улучшить читаемость вашего кода. Называя ваши переменные Total1, Total2и т. д. не является хорошей практикой и затрудняет отладку таких проблем, как то, что вы испытываете сейчас. Сделайте так, чтобы имена переменных действительно описывали, для чего они предназначены, например, вместо Total3 назови это runningTotal,

Другие вопросы по тегам