显示随机网格c#
我在windows phone中随机显示一些网格时遇到问题。 我创建了自己的代码,它运行良好,但并不简单。也许有一种更简单的方法可以在windows phone中显示随机网格 这就是我的应用程序所需的: 我想单击按钮以显示随机网格。当我再次单击时,它将显示另一个网格并隐藏上一个网格。它现在应该显示任意网格两次。 这是我自己的代码:显示随机网格c#,c#,windows-phone,C#,Windows Phone,我在windows phone中随机显示一些网格时遇到问题。 我创建了自己的代码,它运行良好,但并不简单。也许有一种更简单的方法可以在windows phone中显示随机网格 这就是我的应用程序所需的: 我想单击按钮以显示随机网格。当我再次单击时,它将显示另一个网格并隐藏上一个网格。它现在应该显示任意网格两次。 这是我自己的代码: List<int> number = new List<int> { 1,2,3,4,5 }; //create list private v
List<int> number = new List<int> { 1,2,3,4,5 }; //create list
private void Button_Click_2(object sender, RoutedEventArgs e)
{
int numberrandom;
Random bsd = new Random();
if (number.Count > 0) // get random number from (numberlist) without repetition
{
int fIndex = bsd.Next(0, number.Count);
numberrandom = number[fIndex];
txtbox1.Text = numberrandom.ToString(); // show random number at txtbox
number.RemoveAt(fIndex);
}
else
{
messagebox.show("no more grid show");
}
int a = Convert.ToInt32(txtbox1.Text); // convert number txtbox from string to int
int val = a;
switch (val)
{
case 1: //show grid 1
grid1.Visibility = Visibility.Visible;
grid2.Visibility = Visibility.Collapsed;
grid3.Visibility = Visibility.Collapsed;
grid4.Visibility = Visibility.Collapsed;
grid5.Visibility = Visibility.Collapsed;
break;
case 2: //show grid 2
grid1.Visibility = Visibility.Collapsed;
grid2.Visibility = Visibility.Visible;
grid3.Visibility = Visibility.Collapsed;
grid4.Visibility = Visibility.Collapsed;
grid5.Visibility = Visibility.Collapsed;
break;
case 3: //show grid 3
grid1.Visibility = Visibility.Collapsed;
grid2.Visibility = Visibility.Collapsed;
grid3.Visibility = Visibility.Visible;
grid4.Visibility = Visibility.Collapsed;
grid5.Visibility = Visibility.Collapsed;
break;
case 4: //show grid 4
grid1.Visibility = Visibility.Collapsed;
grid2.Visibility = Visibility.Collapsed;
grid3.Visibility = Visibility.Collapsed;
grid4.Visibility = Visibility.Visible;
grid5.Visibility = Visibility.Collapsed;
break;
case 5: //show grid 5
grid1.Visibility = Visibility.Collapsed;
grid2.Visibility = Visibility.Collapsed;
grid3.Visibility = Visibility.Collapsed;
grid4.Visibility = Visibility.Collapsed;
grid5.Visibility = Visibility.Visible;
break;
}
List number=新列表{1,2,3,4,5}//创建列表
私有无效按钮\u单击\u 2(对象发送方,路由目标)
{
整数域;
随机bsd=新随机();
if(number.Count>0)//不重复地从(numberlist)获取随机数
{
int fIndex=bsd.Next(0,number.Count);
numberrandom=数字[fIndex];
txtbox1.Text=numberrandom.ToString();//在txtbox处显示随机数
编号:RemoveAt(fIndex);
}
其他的
{
show(“不再显示网格”);
}
int a=Convert.ToInt32(txtbox1.Text);//将数字txtbox从字符串转换为int
int val=a;
开关(val)
{
案例1://显示网格1
grid1.Visibility=Visibility.Visible;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例2://显示网格2
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=Visibility.Visible;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例3://显示网格3
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Visible;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例4://显示网格4
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Visible;
grid5.可见性=可见性。折叠;
打破
案例5://显示网格5
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.Visibility=Visibility.Visible;
打破
}
我认为您要做的只是在开始之前对整数列表随机排序一次
List<int> lNumbers = New List<int> {1,2,3,4,5};
var rnd = New Random();
lNumbers = lNumbers.OrderBy(ob => rnd.Next()).ToList();
不需要将所有栅格可见性设置为Collpased。只需最后一个:
if (gridIndex > 0) {
grids[gridIndex - 1].Visibility = Visibility.Collapsed;
}
grids[gridIndex].Visibility = Visibility.Visible;
您的代码确实可以简化。例如,您可以将所有网格放在一个列表中,并在其上循环以设置可见性:
List<int> number = new List<int> { 0, 1, 2, 3, 4 }; //create list
private void Button_Click_2(object sender, RoutedEventArgs e)
{
int numberrandom;
Random bsd = new Random();
if (number.Count > 0) // get random number from (numberlist) without repetition
{
int fIndex = bsd.Next(0, number.Count);
numberrandom = number[fIndex];
txtbox1.Text = (numberrandom + 1).ToString(); // show random number at txtbox
number.RemoveAt(fIndex);
}
else
{
MessageBox.Show("no more grid show");
}
var grids = new List<Grid> { grid1, grid2, grid3, grid4, grid5 };
for (int i = 0; i < grids.Count; i++)
{
grids[i].Visibility = i == numberrandom ? Visibility.Visible : Visibility.Collapsed;
}
}
List number=新列表{0,1,2,3,4};//创建列表
私有无效按钮\u单击\u 2(对象发送方,路由目标)
{
整数域;
随机bsd=新随机();
if(number.Count>0)//不重复地从(numberlist)获取随机数
{
int fIndex=bsd.Next(0,number.Count);
numberrandom=数字[fIndex];
txtbox1.Text=(numberrandom+1).ToString();//在txtbox处显示随机数
编号:RemoveAt(fIndex);
}
其他的
{
Show(“不再显示网格”);
}
var grids=新列表{grid1,grid2,grid3,grid4,grid5};
对于(int i=0;i
您可以做一些改进:
List<Grid> grids = new List<Grid> { grid1, grid2, grid3, gridN ... };
int gridIndex = 0;
void Load() {
grids.Shuffle(); // use the extension method linked below
}
void Button_Click_2(object sender, RoutedEventArgs e) {
if (gridIndex >= grids.Count)
return;
if (gridIndex > 0) {
grids[gridIndex - 1].Visibility = Visibility.Collapsed;
}
grids[gridIndex].Visibility = Visibility.Visible;
gridIndex++;
}
List grids=新列表{grid1,grid2,grid3,gridN…};
int gridIndex=0;
空荷载(){
grids.Shuffle();//使用下面链接的扩展方法
}
无效按钮\u单击\u 2(对象发送器,路由目标){
如果(gridIndex>=grids.Count)
返回;
如果(gridIndex>0){
网格[gridIndex-1]。可见性=可见性。已折叠;
}
网格[gridIndex]。可见性=可见性。可见;
gridIndex++;
}
是否需要显示原始网格编号?如果不需要,则上面的代码要简单得多。这是Shuffle()扩展方法,我从以下位置获得:
publicstaticvoidshuffle(此IList列表)
{
随机rng=新随机();
int n=list.Count;
而(n>1){
n--;
int k=下一个(n+1);
T值=列表[k];
列表[k]=列表[n];
列表[n]=值;
}
}
所以这段代码很有效,但你们想简化它吗?哇,我不希望使用列表。这很有帮助。谢谢Zachary:D
List<Grid> grids = new List<Grid> { grid1, grid2, grid3, gridN ... };
int gridIndex = 0;
void Load() {
grids.Shuffle(); // use the extension method linked below
}
void Button_Click_2(object sender, RoutedEventArgs e) {
if (gridIndex >= grids.Count)
return;
if (gridIndex > 0) {
grids[gridIndex - 1].Visibility = Visibility.Collapsed;
}
grids[gridIndex].Visibility = Visibility.Visible;
gridIndex++;
}
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random();
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}