C# 如何每次生成一个随机数,并且没有';t重复
我们正在Unity制作第一款2D手机游戏,我们需要一些帮助。我们使用Java编写代码,但这也是我们第一次编写C# 我们正在做一个纸牌游戏,我们想给每个玩家一个随机数,但(这是对我们来说重要和困难的部分)我们希望每个随机数不要重复。 例如,如果我们有5名玩家,我们想分配一个从5到10的随机数,如果数字6分配给玩家1,那么数字6就不能分配给其他玩家 我们现在的处境是:C# 如何每次生成一个随机数,并且没有';t重复,c#,unity3d,C#,Unity3d,我们正在Unity制作第一款2D手机游戏,我们需要一些帮助。我们使用Java编写代码,但这也是我们第一次编写C# 我们正在做一个纸牌游戏,我们想给每个玩家一个随机数,但(这是对我们来说重要和困难的部分)我们希望每个随机数不要重复。 例如,如果我们有5名玩家,我们想分配一个从5到10的随机数,如果数字6分配给玩家1,那么数字6就不能分配给其他玩家 我们现在的处境是: //Player class only have string name and int trabajo public static
//Player class only have string name and int trabajo
public static void assignRandom(Player jug)
{
int randomnum;
bool aleatorio;
do
{
randomnum= Random.Range(1, 5);
aleatorio = comprobarAleatorio(randomnum);
}
while (aleatorio);
jug.setTrabajo(randomnum);
}
public static bool comprobarAleatorio(int numaleatorio)
{
bool exists = false;
int longitud = jugadoresList.Count;
for (int i = 0; i < 5; i++)
{
if (jugadoresList[i].getTrabajo().Equals(numaleatorio))
{
exists = true;
}
}
}
//Player类只有字符串名和int trabajo
公共静态无效随机(玩家壶)
{
int随机数;
布尔阿莱托里奥;
做
{
randomnum=随机范围(1,5);
Aletorio=大脑外动脉(随机数);
}
while(aleatorio);
jug.setTrabajo(随机数);
}
公共静态广播电台(国际广播电台)
{
bool exists=false;
int longitud=jugadoresList.Count;
对于(int i=0;i<5;i++)
{
if(jugadoresList[i].getTrabajo().Equals(numeratorio))
{
存在=真;
}
}
}
然后用int做一个开关,在屏幕上显示你是什么类型的玩家。但很明显,我们做错了什么,因为数字会重复,即使是0(我们不知道怎么做)
我们感谢你的帮助。非常感谢你!(对不起,我们的英文版)一个解决方案是,您可以生成一个包含有效数字的列表,然后单击 要从中无序排列列表的代码:
//用于生成
//arr[]的随机置换
静态无效随机化(int[]arr,int n)
{
//创建对象
//随机类
随机r=新随机();
//从最后一个元素开始,然后
//一个接一个地交换,我们不需要
//运行第一个元素
//这就是为什么我>0
对于(int i=n-1;i>0;i--)
{
//选择一个随机索引
//从0到i
int j=r.Next(0,i+1);
//将arr[i]与
//随机索引元素
int temp=arr[i];
arr[i]=arr[j];
arr[j]=温度;
}
//打印随机数组
对于(int i=0;i
检查以下代码:
public static void assignRandom(Player jug) //Player class only have string name and int trabajo
{
int randomnum;
private Random random = new Random(); //Declared an instance of Random
ArrayList randomNumsList = new ArrayList(); //Create arraylist to add random nums
bool aleatorio;
do
{
randomnum= random.next(1, 5); //Changed Random.ranged to random.next();
randomNumsList.add(randomnum); //add the random num to list
aleatorio = comprobarAleatorio(randomnum);
}
while (aleatorio);
if (!randomNumsList.Contains(randomnum) { //Only call setTrabajo if the randomNumsList don't have currently generated randomnum
jug.setTrabajo(randomnum);
}
}
public static bool comprobarAleatorio(int numaleatorio)
{
bool exists = false;
int longitud = jugadoresList.Count;
for (int i = 0; i < 5; i++)
{
if (jugadoresList[i].getTrabajo().Equals(numaleatorio))
{
exists = true;
}
}
return exists;
}
}
publicstaticvoidassignrandom(Player-jug)//Player类只有字符串名和int-trabajo
{
int随机数;
private Random=new Random();//声明了Random的实例
ArrayList randomNumsList=新建ArrayList();//创建ArrayList以添加随机NUM
布尔阿莱托里奥;
做
{
randomnum=random.next(1,5);//将random.ranged更改为random.next();
randomNumsList.add(randomnum);//将随机数添加到列表中
Aletorio=大脑外动脉(随机数);
}
while(aleatorio);
如果(!randomNumsList.Contains(randomnum){//仅当randomNumsList当前没有生成randomnum时调用setTrabajo
jug.setTrabajo(随机数);
}
}
公共静态广播电台(国际广播电台)
{
bool exists=false;
int longitud=jugadoresList.Count;
对于(int i=0;i<5;i++)
{
if(jugadoresList[i].getTrabajo().Equals(numeratorio))
{
存在=真;
}
}
回报存在;
}
}
告诉我它是否有用。用你想要处理的数字创建一个数组,然后选择一个随机数组条目,使用该数组元素并删除该元素,或者多次交换数组元素并依次处理数字。我认为你应该做一个宾果游戏教程。了解如何生成随机卡以及如何以随机顺序绘制宾果球。非常感谢!现在它不会崩溃,但指定的值始终为0。你知道如何修复它吗?我已更新了代码。我已将random.range更改为random.next。检查它是否工作并通知我。如果它也不工作,请尝试输出randomnum的值,以检查它是否输出值。检查random.range和random.next两种情况。欢迎随时使用。