Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#21点游戏中的麻烦_C#_Blackjack - Fatal编程技术网

C#21点游戏中的麻烦

C#21点游戏中的麻烦,c#,blackjack,C#,Blackjack,我在使用计数器变量时遇到问题。每次我离开每个方法时,count都会重新初始化为0。我还没有完成Stay()方法Hit()方法正在杀人。每次点击后,我都需要显示用户的所有卡片。我不知道怎么做。必须有一种更有效的方法。我认为我所有的问题都源于Count变量的问题 谢谢你的帮助。 下面是我的主课。下面是我的甲板课。 我遗漏了卡片、西装和等级 using System; using System.Collections.Generic; using System.Linq; using System.T

我在使用计数器变量时遇到问题。每次我离开每个方法时,count都会重新初始化为0。我还没有完成
Stay()
方法
Hit()
方法正在杀人。每次点击后,我都需要显示用户的所有卡片。我不知道怎么做。必须有一种更有效的方法。我认为我所有的问题都源于Count变量的问题

谢谢你的帮助。 下面是我的主课。下面是我的甲板课。 我遗漏了卡片、西装和等级

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

namespace BlkJack
{
class Program
{
    static void Main(string[] args)
    {
        string name;
        int Chips = 500;
        int Wage;
        int count = 0;
        string HS;
        Card pCard1, dCard1, pCard2, dCard2;
        int playerHand, dealerHand;
        //int chipsWon;

        Console.WriteLine("Welcome to Johnny's BlackJack!");
        Console.WriteLine("You are given $500 to play with.");
        Console.WriteLine("Table Limit is $250 per hand. <Enter a 0 to quit>");
        name = GetName("Enter name: ");
        Console.WriteLine("Hello {0}, you are ${1} ahead.", name, Chips);
        Wage = getWager("What is your wager?: ", 1, 250, "?Value must be an integer.", "Max bet is 250!");

        Deck d = new Deck();


        startingHand(count, d, out pCard1, out dCard1, out pCard2, out dCard2, out playerHand, out dealerHand);
        Console.WriteLine("Your hand: {0}, {1} <{2}> ", pCard1, pCard2, playerHand);
        Console.WriteLine("<Dealer's show card is {0}>", dCard1);
        count = count + 4;
        HS = HitorStay("Do you want to <H>it or <S>tay?: ", count, playerHand, d);
        while (HS == "H" || HS == "HIT")
        {
            HS = HitorStay("Do you want to <H>it or <S>tay?: ", count, playerHand, d);
            Console.WriteLine("Your cards: {0} {1} <{2}>", pCard1, pCard2, playerHand);
            //Console.WriteLine("{0}", count);
        }






    }


    static string GetString(string prompt, string[] valid, string error)
    {
        string response;
        bool OK = false;

        do
        {
            Console.Write(prompt);
            response = Console.ReadLine().ToUpper();
            foreach (string s in valid) if (response == s) OK = true;
            if (!OK) Console.WriteLine(error);
        }

        while (!OK);
        return response;

    }

    static string GetName(string prompt)
    {
        string response;

        Console.Write(prompt);
        response = Console.ReadLine();

        while (response == "0")
        {
            Environment.Exit(0);
        }

        return response;

    }


    static bool GetYesNo(string prompt)
    {
        string[] valid = { "YES", "Y", "NO", "N" };
        string ans = GetString(prompt, valid, "Invalid response. Please reenter.");
        return (ans == "YES" || ans == "Y");
    }

    static int getWager(string prompt, int low, int high, string errorInt, string errorRange)
    {

        int Wager;
        string userInput;
        bool OKInt = false, OKRange = false;

        do
        {
            Console.Write(prompt);
            userInput = Console.ReadLine();
            OKInt = Int32.TryParse(userInput, out Wager);
            if (OKInt)
            {
                OKRange = low <= Wager && Wager <= high;
                if (!OKRange) Console.WriteLine(errorRange);
            }
            else
                Console.WriteLine(errorInt);
        }
        while (!OKInt || !OKRange);
        return Wager;

    }

    public static int startingHand(int count, Deck d, out Card pCard1, out Card dCard1, out Card pCard2, out Card dCard2, out int playerHand, out int dealerHand)
    {
        playerHand = 0; dealerHand = 0;

        if (count == 0 || count >= 42) d.Shuffle();

        for (int i = 0; i < 52; i++)
            Console.Write("{0},", d.GetCard(i));

        pCard1 = d.GetCard(count);
        count++;
        dCard1 = d.GetCard(count);
        count++;
        pCard2 = d.GetCard(count);
        count++;
        dCard2 = d.GetCard(count);
        count++;

        playerHand = pCard1.GetValue() + pCard2.GetValue();
        dealerHand = dCard1.GetValue() + dCard2.GetValue();

        return count; 

    }

    static string HitorStay(string prompt, int count, int playerHand, Deck d)
    {
        string[] valid = { "HIT", "H", "STAY", "S" };
        string HS = GetString(prompt, valid, "?Invalid Response. (H)it or (S)tay?");
        if (HS == "HIT" || HS == "H")
        {
            Hit(count, playerHand, d);
        }
        //else if (HS == "STAY" || HS == "S")
        //{
            //Stay(count, playerHand, dealerHand, out chipStay);
        //}
        else Environment.Exit(0);
        return HS;
    }

    public static int Hit(int count, int playerHand, Deck d)
    {
        count += 1;
        playerHand += d.GetCard(count).GetValue();


        return playerHand;
    }

}
}

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

namespace BlkJack
{
     class Deck
      {
         private Card[] cards = new Card[52];

         public Deck()
        {
        for (int suitVal=0; suitVal<4; suitVal++)
        {
            for (int rankVal = 0; rankVal < 13; rankVal++)
            {
                cards[suitVal * 13 + rankVal] =
                    new Card((Suit)suitVal, (Rank)(rankVal));
                cards[suitVal * 13 + rankVal].SetValue(rankVal);

                if (rankVal > 9) cards[suitVal * 13 + rankVal].SetValue(10);
                if (rankVal == 1) cards[suitVal * 13 + rankVal].SetValue(11);
                if (rankVal == 0) cards[suitVal * 13 + rankVal].SetValue(10);

            }
        }
    }

    public Card GetCard(int cardNum)
    {
        return cards[cardNum];
    }


    public void Shuffle()
    {
        Card[] newDeck = new Card[52];  // cards randomly assigned to locs in newDeck
        bool[] assigned = new bool[52];  // keep track of what locs used in newDeck
        int seed = 0;
        Console.Write("Enter seed: ");
        seed = Convert.ToInt32(Console.ReadLine()); // yes, stupid user can break
        Random rGen = new Random(seed);
        for (int i=0; i<52; i++)
        {
            int destCard = 0; // where card is going to be put
            bool foundCard = false;
            while (foundCard == false)
            {
                destCard = rGen.Next(52);
                if (assigned[destCard] == false)
                    foundCard = true;
            }
            assigned[destCard] = true;
            newDeck[destCard] = cards[i];
        }
        newDeck.CopyTo(cards, 0); //.CopyTo(destination, start index)
    }

}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间BlkJack
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串名;
int芯片=500;
国际工资;
整数计数=0;
字符串HS;
卡pCard1、dCard1、pCard2、dCard2;
int playerHand、dealerHand;
//国际奇普斯翁;
控制台。WriteLine(“欢迎来到约翰尼21点!”);
WriteLine(“给你500美元玩”);
控制台。WriteLine(“表格限额为每只手250美元”);
name=GetName(“输入名称:”);
WriteLine(“你好{0},你领先${1}。”,名字,芯片);
工资=getWager(“您的赌注是多少?”,1250,“?值必须是整数。”,“最大赌注是250!”);
甲板d=新甲板();
启动手(计数、d、输出pCard1、输出dCard1、输出pCard2、输出dCard2、输出playerHand、输出dealerHand);
WriteLine(“你的手:{0},{1}”,pCard1,pCard2,playerHand);
Console.WriteLine(“查看此代码

public static int Hit(int count, int playerHand, Deck d)
{
    count += 1;
您正在传入一个
count
副本并递增该副本。传入的原始值不会受到影响。简单的修复包括

  • 通过引用传递计数
    ref int count
  • 在Main()中将count设置为静态类字段,而不是局部变量
更好的方法是将逻辑封装在类中,并使
count
成为该类的字段或属性,以便类方法可以查看和更改它