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