【发布时间】:2020-04-02 07:31:37
【问题描述】:
我正在尝试统一创建一个简单的德州扑克游戏,我有一副牌中有 52 张卡片的精灵(图像)
我正在尝试在一轮开始时为 n 名玩家加载玩家卡(每个玩家 2 张卡),所有玩家都对应于套牌中的 52 张卡。
所以我要做的是首先生成一个随机数,然后基于该数字,我加载特定的精灵,但我的统一冻结并且没有任何工作,我知道如果我复制我的这种方法将不起作用与 Get_Card 类绑定的 Card Prefab,所以我需要另一种方法。帮忙谢谢
随机数类
public class Random_Number
{
const int n = 52;
int[] all_num = new int[n];
int number = 0;
void Start()
{
for (int i = 0; i < n; i++)
{
all_num[i] = i;
}
}
// Update is called once per frame
void Update()
{
}
public int get_me_a_number()
{
while (number == 0)
{
int rand = Random.Range(0, n);
number = all_num[rand];
all_num[rand] = 0;
}
Debug.Log(number.ToString());
return number;
}
}
卡类
public class Get_Card : MonoBehaviour
{
public Sprite[] Sprite_pic;
int number;
Random_Number number_class = new Random_Number();
// Start is called before the first frame update
void Start()
{
number = number_class.get_me_a_number();
GetComponent<SpriteRenderer>().sprite = Sprite_pic[number];
}
ISSUE 现已修复,冻结问题是由无限循环引起的。
【问题讨论】:
-
是否肯定会调用 Random_Number Start 来初始化 all_num?发完所有 52 张牌后,您的代码也将锁定:您可以让 get_me_a_number 发现 all_num 全为零并重新洗牌。
-
numberinRandom_Number是班级成员,因此您每次都将返回同一张卡,因为您不会将其重置为零。 (可能与冻结无关) -
阻止你改变问题......不是很好;,答案没有链接到关于无限循环的新问题..请重新发布最后一个问题并打开一个新问题..但不要改变问题
-
@Frenchy 好的兄弟
-
如果你想增加随机生成使用随机算法dotnetfiddle.net/zrHCuw