生成Bingo有奖和无奖奖票

标签: listrandombuttonobject测试
1130人阅读 评论(0) 收藏 举报
private int[] Bingos = new int[] 2371132917 }// 中奖的号码组
private List<int[]> Tickets = new List<int[]>(); // 1000张废奖票
private List<int[]> BingoTickets = new List<int[]>(); // 200张有奖奖票

/// <summary>
/// 判断是否出现Bingo的直线
/// </summary>
/// <returns>返回是否出现Bingo的直线</returns>

private bool IsBingoLine(int[] ALine)
{
    
bool[] vExists = new bool[Bingos.Length];
    
for (int i = 0; i < ALine.Length; i++)
        
for (int j = 0; j < Bingos.Length; j++)
            
if (ALine[i] == Bingos[j])
            
{
                vExists[i] 
= true;
            }

    
for (int i = 0; i < vExists.Length; i++)
    
{
        
if (!vExists[i]) return false;
    }

    
return true;
}


/// <summary>
/// 需要判断的+6+2条直线上的数字下标
/// </summary>

private int[,] bingoIndexs = new int[,] {  
        
000102030405 }
        
060708091011 }
        
121314151617 }
        
181920212223 }
        
242526272829 }
        
303132333435 }

        
000612182430 },
        
010713192531 },
        
020814202632 },
        
030915212733 },
        
041016222834 },
        
051117232935 },

        
000714212835 },
        
051015202530 },
    }
;

/// <summary>
/// 判断奖票是否中奖
/// </summary>
/// <param name="ATicket">奖票数字排列</param>
/// <returns>返回奖票是否中奖</returns>

private bool IsBingoTicket(int[] ATicket)
{
    
for (int i = 0; i < 14; i++)
    
{
        
int[] vLine = new int[6];
        
for (int j = 0; j < vLine.Length; j++)
        
{
            vLine[j] 
= ATicket[bingoIndexs[i, j]];
        }

        
if (IsBingoLine(vLine)) return true;
    }

    
return false;
}


/// <summary>
/// 判断奖票是否重复
/// </summary>
/// <param name="ATicket">奖票数字排列</param>
/// <returns>返回奖票在列表中是否存在</returns>

private bool ExistsTicket(int[] ATicket)
{
    
for (int i = 0; i < Tickets.Count; i++)
    
{
        
bool vExists = true;
        
for (int j = 0; j < Tickets[i].Length; j++)
        
{
            
if (Tickets[i][j] != ATicket[j])
            
{
                vExists 
= false;
                
break;
            }

        }

        
if (vExists) return true;
    }

    
return false;
}


/// <summary>
/// 随机产生一个组奖票
/// </summary>
/// <returns>返回奖票数字排列的数组</returns>

private int[] RandomTicket()
{
    
int[] vResult = new int[36];
    
for (int i = 1; i <= vResult.Length; i++// 顺序得到-36的数组
    {
        vResult[i 
- 1= i;
    }

    Random vRandom 
= new Random();
    
for (int i = 0; i < vResult.Length; i++// 打乱顺序
    {
        
int j = vRandom.Next(vResult.Length - i); // 随机抽取倒数i前面的数字
        int t = vResult[j];
        vResult[j] 
= vResult[vResult.Length - i - 1];
        vResult[vResult.Length 
- i - 1= t;
    }

    
return vResult;
}


/// <summary>
/// 判断奖票是否重复
/// </summary>
/// <param name="ATicket">奖票数字排列</param>
/// <returns>返回奖票在列表中是否存在</returns>

private bool ExistsBingoTicket(int[] ATicket)
{
    
for (int i = 0; i < BingoTickets.Count; i++)
    
{
        
bool vExists = true;
        
for (int j = 0; j < BingoTickets[i].Length; j++)
        
{
            
if (BingoTickets[i][j] != ATicket[j])
            
{
                vExists 
= false;
                
break;
            }

        }

        
if (vExists) return true;
    }

    
return false;
}


/// <summary>
/// 随机产生一张中将的奖票
/// </summary>
/// <returns>返回一张中将的奖票</returns>

private int[] RandomBingoTicket()
{
    
int[] vResult = new int[36];
    
// 随机排列Bingos数组
    int[] vBingos = new int[Bingos.Length];
    Bingos.CopyTo(vBingos, 
0); 
    Random vRandom 
= new Random();
    
for (int i = 0; i < vBingos.Length; i++// 打乱顺序
    {
        
int j = vRandom.Next(vBingos.Length - i); // 随机抽取倒数i前面的数字
        int t = vBingos[j];
        vBingos[j] 
= vBingos[vBingos.Length - i - 1];
        vBingos[vBingos.Length 
- i - 1= t;
    }

    
int vIndex = vRandom.Next(14); // 随机一条线上填上Bingos号码
    for (int i = 0; i < 6; i++)
    
{
        vResult[bingoIndexs[vIndex, i]] 
= vBingos[i];
    }

    List
<int> vNumbers = new List<int>();
    
for (int i = 1; i <= 36; i++)
    
{
        
bool vExists = false;
        
for (int j = 0; j < Bingos.Length; j++)
        
{
            
if (Bingos[j] == i)
            
{
                vExists 
= true;
                
break;
            }

        }

        
if (!vExists) vNumbers.Add(i); // 添加Bingo号码之外的数字
    }

    
for (int i = 0; i < vResult.Length; i++)
    
{
        
bool vExists = false;
        
for (int j = 0; j < 6; j++// 如果这个位置已经被填值
        {
            
if (bingoIndexs[vIndex, j] == i)
            
{
                vExists 
= true;
                
break;
            }

        }

        
if (!vExists)
        
{
            
int j = vRandom.Next(vNumbers.Count); // 从余下的数字中抽取一个
            vResult[i] = vNumbers[j];
            vNumbers.RemoveAt(j); 
// 移出
        }

    }

    
return vResult;
}


/// <summary>
/// 判断一个数是否是奖号中的数
/// </summary>
/// <param name="ANumber">测试数值</param>
/// <returns>返回一个数是否是奖号中的数</returns>

private bool IsBingoNumber(int ANumber)
{
    
for (int i = 0; i < Bingos.Length; i++)
    
{
        
if (ANumber == Bingos[i])
        
{
            
return true;
        }

    }

    
return false;
}


private void button1_Click(object sender, EventArgs e)
{
    
for (int i = 0; i < 1000; ) // 产生张废票
    {
        
int[] vTicket = RandomTicket();
        
if (ExistsTicket(vTicket) || IsBingoTicket(vTicket))
        
{
            
continue;
        }

        
else
        
{
            Tickets.Add(vTicket);
            i
++;
        }

        
////输出
        Console.WriteLine("------无奖-------");
        
for (int j = 0; j < vTicket.Length; j++)
        
{
            
if (j % 6 == 0) Console.WriteLine();
            
if (IsBingoNumber(vTicket[j]))
                Console.Write(
"{0:00}*", vTicket[j]);
            
else Console.Write("{0:00} ", vTicket[j]);
        }

        Console.WriteLine();
    }


    
for (int i = 0; i < 200; ) // 产生张有奖奖票
    {
        
int[] vBingoTicket = RandomBingoTicket();
        
if (ExistsBingoTicket(vBingoTicket))
        
{
            
continue;
        }

        
else
        
{
            BingoTickets.Add(vBingoTicket);
            i
++;
        }

    
        
////输出
        Console.WriteLine("-----有奖--------");
        
for (int j = 0; j < vBingoTicket.Length; j++)
        
{
            
if (j % 6 == 0) Console.WriteLine();
            
if (IsBingoNumber(vBingoTicket[j]))
                Console.Write(
"{0:00}*", vBingoTicket[j]);
            
else Console.Write("{0:00} ", vBingoTicket[j]);
        }

        Console.WriteLine();
    }

}
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:628954次
    • 积分:9836
    • 等级:
    • 排名:第1758名
    • 原创:199篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1615条
    最新评论