我的电脑里有一副牌里的所有牌的文件。我想做的是生成所有54个数字,并将其中7个以按钮的形式提供给用户,以便他们可以播放这些卡,另外7张卡到计算机,其余的卡存储在队列中,以便他们中的任何一个在需要时按下以获得更多。但我面临的错误是生成需要存储的7个随机数供用户获取。
这就是我所指的代码:
我相信这部分代码调用SetButtonImage开始加载编译。
public FmClassic()
{
InitializeComponent();
SetButtonImage();
}
字符串
这是SetButtonImage从我的计算机中收集图像,并调用另一个函数来生成随机数。
private void SetButtonImage()
{
Stack<int> ShuffleOnTime = ShuffleOneTime();
string Cards = String.Join("\n", ShuffleOnTime);
button1.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(0, Cards.IndexOf(Environment.NewLine))}.png");
button2.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(1, Cards.IndexOf(Environment.NewLine))}.png");
button3.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(2, Cards.IndexOf(Environment.NewLine))}.png");
button4.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(3, Cards.IndexOf(Environment.NewLine))}.png");
button5.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(4, Cards.IndexOf(Environment.NewLine))}.png");
button6.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(5, Cards.IndexOf(Environment.NewLine))}.png");
button7.Image = Image.FromFile($"C:\\filepath\\{Cards.Substring(6, Cards.IndexOf(Environment.NewLine))}.png");
}
型
然后调用它来确保它们是随机的,而不是用哈希表调用两次,以及转换为字符串,我认为这在搜索文件时更好。
public Stack<int> ShuffleOneTime()
{
Random random = new Random();
Stack<int> generatednumbers = new Stack<int>();
Stack<int> randomNumbers = GenerateRandomNumber(random, generatednumbers);
return randomNumbers;
}
型
这有助于生成数字并将其返回给另一个函数。
Stack<int> GenerateRandomNumber(Random random, Stack<int> generatednumbers)
{
//Queue<int> Cards = new Queue<int>();
//Queue<string> realNumbers = new Queue<string>();
int randomNumber;
do
{
randomNumber = random.Next(1, 54);
generatednumbers.Push(randomNumber);
if (generatednumbers.Count >= 2)
{
int Compare1 = generatednumbers.Pop();
int Compare2 = generatednumbers.Pop();
if (Compare1 == Compare2)
{
generatednumbers.Push(Compare1);
}
}
} while (generatednumbers.Count != 53);
//string number = generatednumbers.ToString();
//realNumbers.Enqueue(number);
return generatednumbers;
}
型
我试着把它变成一个字符串而不是一个整数来帮助找到它,但它不起作用。卡的文件名都是1.jpg,2.jpg等,所以我不知道为什么会有错误。一切编译,但然后我的屏幕冻结60秒,他们输入这个错误:
第一个月
1条答案
按热度按时间nue99wik1#
所以,你在某个文件夹中有53张图像,你想 Shuffle 和挑选。您可以简化此任务,因为文件名是您要生成和混洗的数字范围。
创建一个生成给定范围的随机数字的方法。
字符串
在
SetButtonImage
方法中需要的所有内容是:型
注意,
numbers
数组包含所有53个数字,你可以取一个范围:型
……你可以跳过并采取:
型
所有这些都返回
IEnumerable<int>
。如果需要,请调用.ToList()
或.ToArray()
。如果需要创建
Stack<int>
或Queue<int>
,则两者都有一个接受IEnumerable<T>
的构造函数重载。型