コード例 #1
0
        // Set up default values
        void init()
        {
            // Check for save, if exists then load it
            if (Saving.checkForSave())
            {
                betting = Saving.readSave();
            }
            else // Else create new file
            {
                betting = new Betting(2000, 10, 5); // Player starts with $2000
            }

            winnerAnnounce.Text = needBet;
            betting.Bet         = 10; // Lowest bet allowed is $10
            refreshBets();

            multiDeck = deckCountCheck.Checked;

            playerControls = new Button[] { buttonHit, buttonDouble, buttonSurrender, buttonStand };
            DisablePlayerControls();

            gameStartButton.Enabled = false;
            resetHands.Enabled      = false;
            insuranceButton.Enabled = false;
            buttonSplit.Enabled     = false;
            borrowMoney.Enabled     = false;
            deckCountCheck.Enabled  = true;
            deckCounter.Enabled     = true;
        }
コード例 #2
0
ファイル: Blackjack.cs プロジェクト: ipavl/blackjack
        private void StartNewGame()
        {
            try
            {
                // Show betting interface
                Betting bettingForm = new Betting();
                bettingForm.StartPosition = FormStartPosition.CenterParent;
                bettingForm.ShowDialog();

                // Set betting labels
                lblBet.Text = "Bet: " + Betting.Bet.ToString("$0.00");
                lblBalance.Text = "Balance: " + Betting.Balance.ToString("$0.00");

                // Reset controls/variables for new round
                cmdHit.Enabled = true;
                cmdStand.Enabled = true;
                cmdDoubleDown.Enabled = true;
                cmdSplit.Enabled = false;

                isGameOver = false;
                cmdNewGame.Text = "Surrender";

                playerCard3.Visible = false;
                playerCard4.Visible = false;
                playerCard5.Visible = false;
                playerCard6.Visible = false;
                playerCard7.Visible = false;
                playerCard8.Visible = false;
                playerCard9.Visible = false;

                lblDealerMore.Text = "+";
                lblDealer.Visible = false;
                lblDealerMore.Visible = false;

                rnCard = 0;
                rnSuit = 0;
                playerScore = 0;
                dealerScore = 0;
                playerCardsCount = 0;

                dScore1 = 0;
                dScore2 = 0;
                pScore1 = 0;
                pScore2 = 0;

                suit = null;
                card = null;
                dCard = null;

                // Deal dealer card 1
                dScore1 = RandomNumber(1, 13);
                Debug.Print("Dealer card 1: " + dScore1.ToString());
                // Convert any face cards to appropriate number values
                ConvertFaceCardToNumberValue(dScore1);
                dScore1 = cardValue;
                Debug.Print("dScore1 -> Num: " + dScore1);
                // Deal dealer card 2
                dScore2 = RandomNumber(1, 13);
                Debug.Print("Dealer card 2: " + dScore2.ToString());
                // Convert any face cards to appropriate number values
                ConvertFaceCardToNumberValue(dScore2);
                dScore2 = cardValue;
                ConvertFaceCardToFileName(dScore2);
                Debug.Print("dScore2 -> Num: " + dScore2);
                // Calculate dealer total
                dealerScore = dScore1 + dScore2;

                // Show dealer card 1 (backside of card)
                dealerCard1.Image = Image.FromFile("Content/Cards/back-red-75-2.png");

                // Choose a random suit
                SelectSuit();
                // Show the dealer's second card
                dealerCard2.Image = Image.FromFile("Content/Cards/" + suit + "-" +
                    card + "-75.png");
                // Save second card to variable in case we need it for split
                DealerSecondCard = suit + "-" + card + "-75.png";

                Debug.Print("dealerScore: " + dealerScore);
                // Hide dealer's score
                lblDealer.Visible = false;
                // Set label to show dealer's score
                lblDealer.Text = "Dealer score: " + dealerScore;

                // If the dealer's score is less than 21, deal the player's cards
                if (dealerScore < 21)
                {
                    // Deal player card 1
                    DealCard();
                    pScore1 = rnCard;
                    //pScore1 = 5; // TESTING ONLY -- REMOVE
                    //dCard = "diamonds-5-75.png"; // TESTING ONLY -- REMOVE
                    ConvertFaceCardToNumberValue(pScore1);
                    pScore1 = cardValue;
                    playerCard1.Image = Image.FromFile("Content/Cards/" + dCard);
                    PlayerFirstCard = dCard;
                    Debug.Print("Player card 1: " + dCard);

                    // Deal player card 2
                    DealCard();
                    pScore2 = rnCard;
                    //pScore2 = 5; // TESTING ONLY -- REMOVE
                    ConvertFaceCardToNumberValue(pScore2);
                    pScore2 = cardValue;
                    playerCard2.Image = Image.FromFile("Content/Cards/" + dCard);
                    PlayerSecondCard = dCard;
                    Debug.Print("Player card 2: " + dCard);

                    // Get player total and display it
                    playerScore = pScore1 + pScore2;
                    lblTotal.Text = "Total: " + playerScore;
                    playerCardsCount = 2;

                    // Split
                    if (pScore1 == pScore2 && playerCardsCount == 2)
                    {
                        //cmdSplit.Enabled = true; // ENABLED DURING TESTING
                    }
                }
                else
                    GameOver("dealer21");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }
コード例 #3
0
        static void Main(string[] args)
        {
            //Majority of the logic in this class could be moved to GameLogic and we just call on methods here.
            //The OOP design of this app means that new features such as custom betting amounts, bigger card shoes, splitting pairs, doubling down, new rulesets, ect. could be added fairly easily, given some cleaning up of the code here and some parameters in some of the other methods
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            bool      bettingRound = true;
            bool      gameGoing    = false;
            bool      blackjack    = false;
            bool      bust         = false;
            bool      playerTurn   = true;
            GameLogic game         = new GameLogic();
            Audio     audio        = new Audio();
            Betting   betting      = new Betting();
            decimal   bet          = 0;
            string    playerResponse;

            Console.WriteLine("Press 1 play Blackjack. Press 3 to exit");
            string playerPlayGame = Console.ReadLine();

            //Prompt the user to reenter if they don't enter 1 or 3
            while (playerPlayGame != "1" && playerPlayGame != "3")
            {
                Console.Clear();
                Console.WriteLine("Please select 1 to play Blackjack or 3 to exit.");
                playerPlayGame = Console.ReadLine();
            }
            game.PopulateDeck(1);
            //pauses the program momentarially to allow the audio to play
            System.Threading.Thread.Sleep(1000);
            //runs the main game while the selection isn't 3
            while (playerPlayGame != "3")
            {
                //this runs the check for "shuffling" our deck (refilling it with new cards)
                if (game.ShuffleCheck(false))
                {
                    Console.Clear();
                    Console.WriteLine("Shuffling deck. Please wait...");
                    System.Threading.Thread.Sleep(1000);
                }
                game.PlayerTurn();
                game.Player();
                Console.Clear();
                do
                {
                    //Prompts the user to bet an amount and if the amount isn't within 0.01 and their current max reprompts them.
                    Console.WriteLine($"Remaining Cash: ${betting.wallet.ToString("F")}\n" +
                                      $"How much would you like to bet?");
                    string betAmount = Console.ReadLine();
                    decimal.TryParse(betAmount.Replace("$", " "), out bet);
                    //This one was honestly impressive. The last two checks return true or false together. It checks if the bet rounded down to two places is the same number as the bet and it also checks if the user input is different from the bet. Both cases mean the user put in a number with more than 2 decimal places. The first check is for numbers a few decimal places long, the second check is for numbers that are so long that TryParse starts rounding them up to the next number.
                    if (bet <= 0 || bet > betting.wallet || (decimal.Round(bet, 2) != bet || betAmount != Convert.ToString(bet)))
                    {
                        Console.Clear();
                        Console.WriteLine($"Please choose a number between $0.01 and ${betting.wallet.ToString("F")}. Two decimals max.");
                        System.Threading.Thread.Sleep(2000);
                        Console.Clear();
                        bet = 0;
                    }
                    else
                    {
                        bettingRound = false;
                        audio.BetSound();
                    }
                } while (bettingRound == true);
                game.GameStart();
                do
                {
                    //resets the variables every new round
                    playerTurn   = true;
                    bust         = false;
                    blackjack    = false;
                    bettingRound = true;

                    //if the opening hand is 21, immediately skips to the end
                    if (game.playerTotal == 21)
                    {
                        playerTurn     = false;
                        blackjack      = true;
                        playerResponse = "2";
                    }
                    else
                    {
                        Console.WriteLine("Press 1 to hit or 2 to stay.");
                        playerResponse = Console.ReadLine();
                    }

                    if (playerResponse == "1")
                    {
                        game.Draw(playerTurn);
                        game.DealerTotalCalc();
                        game.PlayerTotalCalc();
                    }
                    else if (playerResponse == "2")
                    {
                        playerTurn = false;
                    }
                    else
                    {
                        Console.Clear();
                        game.DealerTotalCalc();
                        game.PlayerTotalCalc();
                    }
                    //If the player's hand ever reaches 21, skips to the end
                    //Similarly if it ever goes over 21, skips to the end
                    if (game.playerTotal == 21)
                    {
                        playerTurn = false;
                        blackjack  = true;
                    }
                    if (game.playerTotal > 21)
                    {
                        playerTurn = false;
                        bust       = true;
                    }
                } while (playerTurn);

                game.DealerTurn();
                game.Dealer();
                //dealer only actually plays if his total isn't above 16, and the player didn't bust or get 21
                while (game.dealerTotal <= 16 && !bust && !blackjack && game.dealerTotal < game.playerTotal)
                {
                    game.Draw(playerTurn);
                    game.DealerTotalCalc();
                    game.PlayerTotalCalc();
                    //pauses the app to give the user time to comprehend whats going on between card draws
                    System.Threading.Thread.Sleep(2000);
                }
                Console.Clear();
                //One final update to the player and dealer totals
                game.DealerTotalCalc();
                game.PlayerTotalCalc();
                if (game.playerTotal > 21)
                {
                    Console.WriteLine($"Bust, House wins. -${bet.ToString("F")}");
                    betting.Lose(bet);
                    audio.LoseSound();
                }
                else if (game.playerTotal == 21)
                {
                    Console.WriteLine($"Blackjack, you win! 1.5X payout! +${(bet * 1.5m).ToString("F")}");
                    betting.Blackjack(bet);
                    audio.WinSound();
                }
                else if (game.dealerTotal > 21)
                {
                    Console.WriteLine($"Dealer bust, you win! +${bet.ToString("F")}");
                    betting.Win(bet);
                    audio.WinSound();
                }
                else if (game.playerTotal == game.dealerTotal)
                {
                    Console.WriteLine("Draw. Bet returned.");
                }
                else
                {
                    if (game.playerTotal > game.dealerTotal)
                    {
                        Console.WriteLine($"You win! +${bet.ToString("F")}");
                        betting.Win(bet);
                        audio.WinSound();
                    }
                    else
                    {
                        Console.WriteLine($"You lose! -${bet.ToString("F")}");
                        betting.Lose(bet);
                        audio.LoseSound();
                    }
                }
                //Prompts the user if they still have money
                if (betting.wallet > 0)
                {
                    Console.WriteLine($"New total: ${betting.wallet.ToString("F")}");
                    Console.WriteLine("Press 1 to continue, 2 to restart, or 3 to exit");
                    playerPlayGame = Console.ReadLine();
                    if (playerPlayGame == "2")
                    {
                        //This resets their wallet to $100 and shuffles the deck. Essentially restarting the game
                        betting.wallet = 100;
                        game.ShuffleCheck(true);
                    }
                }
                else //prompts the user if they have ran out of money
                {
                    Console.WriteLine("You're out of funds");
                    Console.WriteLine("Press 1 to restart or 3 to exit");
                    playerPlayGame = Console.ReadLine();
                    if (playerPlayGame == "1")
                    {
                        betting.wallet = 100;
                        game.ShuffleCheck(true);
                    }
                }
            }
            while (gameGoing)
            {
                ;
            }
        }