Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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#数字猜测游戏:从用户那里获得不同的随机数和不同的输入_C#_Random - Fatal编程技术网

C#数字猜测游戏:从用户那里获得不同的随机数和不同的输入

C#数字猜测游戏:从用户那里获得不同的随机数和不同的输入,c#,random,C#,Random,我正在构建一个数字猜测游戏,从控制台读取一个4位数的数字。计算机随机生成4位数字,用户尝试猜测数字及其正确顺序。程序以0A0B或1A3B或4A0B e.t.c的格式返回答案,如果您猜测的数字正确且其位置也正确,则返回a;如果您猜测的数字正确但其位置错误,则返回B 如何确保计算机生成的数字是4个不同的随机数?这可能吗。试图控制一个随机数的结果是否会挫败随机数的全部目的 如何确保用户输入四个不同的数字。i、 例如,确保用户不能重复某个数字,例如,用户不能输入1031或9838。在21天的时间里,我搜

我正在构建一个数字猜测游戏,从控制台读取一个4位数的数字。计算机随机生成4位数字,用户尝试猜测数字及其正确顺序。程序以0A0B或1A3B或4A0B e.t.c的格式返回答案,如果您猜测的数字正确且其位置也正确,则返回a;如果您猜测的数字正确但其位置错误,则返回B

  • 如何确保计算机生成的数字是4个不同的随机数?这可能吗。试图控制一个随机数的结果是否会挫败随机数的全部目的

  • 如何确保用户输入四个不同的数字。i、 例如,确保用户不能重复某个数字,例如,用户不能输入1031或9838。在21天的时间里,我搜索了谷歌并浏览了C#,但我找不到合适的答案

  • 得分函数+限制机会数。我知道我可以实现一个简单的for循环,在分数不为零的情况下运行我的程序。一旦程序降到零,游戏终止。类似于

    for (int score = 100; score > 0; score = score - 5) // gives a user 20 tries
    {
       //run program
       Console.WriteLine("Your score is {0}", score);
    }
    
    这是否正确实施?有人知道更好的方法吗

  • 我的游戏的全部源代码如下

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            namespace GuessNumber
            {
                public struct answer
                {
                   public int A;
                   public int B;
               }
              public class Program
              {
              static void Main(string[] args)
              {
    
              while (true)
              {
                Console.WriteLine("********************************");
                Console.WriteLine("What number do you think it is ?");
                Console.WriteLine("Type 'Instrustions' or 'help' to get the game rules ?");
                Console.WriteLine("********************************");
                Console.WriteLine();
    
                bool GameOver = false;
                int[] targetNumber = GenerateRandomNumber();
                int hintNumber = 0;
                Console.WriteLine(ConvertIntArrayToString(targetNumber));
                while (!GameOver)
                {
                    Console.Write("Answer: ");
                    string answer = Console.ReadLine();
    
                    if (answer.ToLower() == "i give up" || answer.ToLower() == "exit" || answer.ToLower() == "quit")
                    {
                        Console.WriteLine(ConvertIntArrayToString(targetNumber));
                        GameOver = true;
                        break;
    
                    }
                    if (answer.ToLower() == "hint" ) // Designed to Provide a hint.
                    {
                            if (hintNumber < 2) // Check that a user has only used 2 hints
                            {
                                int Rando = GenerateRandomNumberforHint();
                                // Console.WriteLine("The Random Number generated was {0}",Rando);
                                if (Rando == 0)
                                {
                                    Console.WriteLine("{0}XXX", targetNumber[Rando]); // If Rando is 0, it takes the first position of the array
                                }
                                else if (Rando == 1)
                                {
                                    Console.WriteLine("X{0}XX", targetNumber[Rando]); // If Rando is 1, it takes the second position of the array
                                }
                                else if (Rando == 2)
                                {
                                Console.WriteLine("XX{0}X", targetNumber[Rando]);
                                }
                                else if (Rando == 3)
                                {
                                Console.WriteLine("XXX{0}", targetNumber[Rando]);
                                }
    
                            }
                            else
                            {
                                Console.WriteLine("You've already used up your two hints");
                            }
                            hintNumber++;
                            continue;
                   }
                   if (answer.ToLower() == "instructions" || answer.ToLower() == "help")
                   {
                       Console.WriteLine("Instructions are as follows...");
                       continue;
                   }
                   if (answer.Length != 4)
                   {
                       continue;
                   }                      
                   answer currentAnswer = CompareNumbers(targetNumber, ConvertStringToIntArray(answer));
                   Console.WriteLine(currentAnswer.A + "A" + currentAnswer.B + "B");
                   if (currentAnswer.A == 4)
                       GameOver = true;
    
                   }
                   Console.WriteLine("Game Over!");
                   Console.ReadLine();
                }
            }
    
        protected static int GenerateRandomNumberforHint()
        {
            Random rnd = new Random();
            int Random = rnd.Next(0, 4);
            return Random;
        }
        protected static int[] GenerateRandomNumber()
        {
            int[] RandomNumber = new int[4];           
            Random seed = new Random();            
            int i = 0;
            while (i < 4)
            {
              //  RandomNumber[i] = (seed.Next() % 10).ToString()[0];
                RandomNumber[i]=seed.Next(0, 10);
                int j = i - 1;
                while (j >= 0)
                {
                    if (RandomNumber[i] == RandomNumber[j])
                        i--;
                    j--;
                }
                i++;
            }
            return RandomNumber;     
        }
    
        protected static answer CompareNumbers(int[] TargetNumber, int[] CompareNumber)
        {
            answer ReturnAnswer;
            ReturnAnswer.A = 0;
            ReturnAnswer.B = 0;            
            for (int i = 0; i < 4; i++)
            {
                if (TargetNumber[i] == CompareNumber[i])
                    ReturnAnswer.A++;
                for (int j = 0; j < 4; j++)
                {
                    if (TargetNumber[i] == CompareNumber[j] && i != j)
                        ReturnAnswer.B++;
                }
            }
            return ReturnAnswer;
        }
    
        protected static int[] ConvertStringToIntArray(string String)
        {
            int[] IntValue = new int[String.Length];
            for (int i = 0; i < String.Length; i++)
            {
                try
                {
                    IntValue[i] = Convert.ToInt32(String[i].ToString());
                }
                catch (Exception ex)
                {
                    return null;
                    //  Console.WriteLine("You must input number");
                }
    
            }
            return IntValue;
        }
    
        protected static string ConvertIntArrayToString(int[] IntArray)
        {
            char[] CharArray = new char[IntArray.Length];
            for (int i = 0; i < CharArray.Length; i++)
            {
                CharArray[i] = Convert.ToChar(IntArray[i].ToString());
            }
            return new string(CharArray);           
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    名称空间猜测数
    {
    公共结构答案
    {
    公共INTA;
    公共int B;
    }
    公共课程
    {
    静态void Main(字符串[]参数)
    {
    while(true)
    {
    Console.WriteLine(“*******************************************”);
    控制台。WriteLine(“你认为它是什么号码?”);
    控制台.WriteLine(“键入'Instrustions'或'help'获取游戏规则?”);
    Console.WriteLine(“*******************************************”);
    Console.WriteLine();
    bool GameOver=false;
    int[]targetNumber=GenerateRandomNumber();
    int hintNumber=0;
    Console.WriteLine(convertintaraytostring(targetNumber));
    而(!GameOver)
    {
    控制台。写(“回答:”);
    字符串answer=Console.ReadLine();
    如果(answer.ToLower()=“我放弃”| answer.ToLower()=“退出”| answer.ToLower()=“退出”)
    {
    Console.WriteLine(convertintaraytostring(targetNumber));
    GameOver=true;
    打破
    }
    if(answer.ToLower()=“hint”)//设计用于提供提示。
    {
    if(hintNumber<2)//检查用户仅使用了2个提示
    {
    int Rando=GenerateRandomNumberforHint();
    //WriteLine(“生成的随机数为{0}”,Rando);
    if(Rando==0)
    {
    controlle.WriteLine(“{0}XXX”,targetNumber[Rando]);//如果Rando为0,则它将占据数组的第一个位置
    }
    else if(Rando==1)
    {
    WriteLine(“X{0}XX”,targetNumber[Rando]);//如果Rando为1,则它将占据数组的第二个位置
    }
    else if(Rando==2)
    {
    Console.WriteLine(“XX{0}X”,targetNumber[Rando]);
    }
    else if(Rando==3)
    {
    Console.WriteLine(“XXX{0}”,targetNumber[Rando]);
    }
    }
    其他的
    {
    WriteLine(“您已经用完了两个提示”);
    }
    hintNumber++;
    持续
    }
    if(answer.ToLower()=“说明”| answer.ToLower()=“帮助”)
    {
    Console.WriteLine(“说明如下…”);
    持续
    }
    如果(答案长度!=4)
    {
    持续
    }                      
    answer currentAnswer=CompareNumbers(targetNumber,ConvertStringToInArray(answer));
    Console.WriteLine(currentAnswer.A+“A”+currentAnswer.B+“B”);
    如果(currentAnswer.A==4)
    GameOver=true;
    }
    控制台。WriteLine(“游戏结束!”);
    Console.ReadLine();
    }
    }
    受保护的静态int生成器DomainNumberForHint()
    {
    随机rnd=新随机();
    int Random=rnd.Next(0,4);
    返回随机;
    }
    受保护的静态int[]GeneratorDomainNumber()
    {
    int[]随机数=新的int[4];
    随机种子=新随机();
    int i=0;
    而(i<4)
    {
    //RandomNumber[i]=(seed.Next()%10.ToString()[0];
    随机数[i]=种子。下一个(0,10);
    int j=i-1;
    而(j>=0)
    {
    if(RandomNumber[i]==RandomNumber[j])
    我--;
    j--;
    }
    i++;
    }
    返回随机数;
    }
    受保护的静态应答CompareNumber(int[]TargetNumber,int[]CompareNumber)
    {
    回答返回回答;
    返回答案A=0;
    返回答案B=0;
    对于(int i=0;i<4;i++)
    {
    
                int GenerateRandomNumber()
            {
                Random random = new Random();
    
                int randomNum = random.Next(1000, 9999);
    
                return randomNum;
    
            }
    
            //Make sure numbers are distinct
            int GenerateDistinctRandomNumber()
            {
    
                int randomNum = 0;
                var hashSet = new HashSet<int>();
    
                int randomNumForLoop = GenerateRandomNumber();
    
                int[] testArray = GetIntArray(randomNumForLoop);
    
                for (int i = 0; i<4; i++)
                {
    
                    if (testArray.GroupBy(x => x).Any(g => g.Count() > 1))
                    {
                        randomNumForLoop = GenerateRandomNumber();
                        testArray = GetIntArray(randomNumForLoop);
                        i = 0;
                    }
    
                    randomNum = randomNumForLoop;
    
                }
    
                return randomNum;
    
            }
    
    
    
    
            //Convert int number to an array.
            int[] GetIntArray(int num)
            {
                List<int> tempList = new List<int>();
    
                while (num > 0)
                {
                    tempList.Add(num % 10);
                    num = num / 10;
    
                }
    
                tempList.Reverse();
                return tempList.ToArray();
    
            }
    
    if (testArray.GroupBy(x => x).Any(g => g.Count() > 1)){...}