Skip to main content
 首页 » 编程设计

c#之显示随机网格 c#

2024年08月12日29emanlee

我在 Windows Phone 中随机显示一些网格时遇到问题。 我创建了自己的代码,它工作正常但并不简单。也许有一种更简单的方法可以在 Windows Phone 中显示随机网格。

这是我的应用所需要的:

我想点击一个按钮来显示随机网格。当我再次点击时,它应该显示另一个网格并隐藏之前的网格。它现在应该显示任何网格两次。

这是我自己的代码:

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<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++; 
} 

需要显示原来的格子号吗?如果没有,上面的代码就简单多了。这是 Shuffle() 扩展方法,我从 this answer 得到它:

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;   
    }   
}