每个彩票玩家都有一个“球数”属性(从0到100的int)
然后从包中挑选一个球,任何被选中的人都会获胜。显然,他们在球袋中的球越多,他们获得采摘的机会就越大。
最初我认为编码他的最佳方法是拥有一个数组,其中每个索引都充当球,并存储一个对象(玩家)。但是看起来有点过分(并且不能很好地扩展)有一个包含100个对象的数组只是为了选择播放器然后继续(这是一个小函数)。
然后我考虑过标记范围(即解除其间的数字),所以如果数字在0到59之间,则必须是获胜的玩家1(即具有下限和上限)。但是我想要一些反馈,因为可能有一种非常简单的方法(我很想念)。
答案 0 :(得分:1)
您不需要存储范围,仅存储概率,或者您需要存储球的数量。
球员1有60个球。您可以直接将其存储为int
60.播放器2有20,因此存储20.依此类推。
然后计算球的总数(一次,如果静态已知则硬编码),并在0(包括)和球数(不包括)之间绘制一个随机数。
循环播放器,在循环时加上他们的球数。返回累积球数高于随机数的第一个玩家。
答案 1 :(得分:0)
试试这个:
struct Player
{
int LowestValue;
int HighestValue;
}
List<Player> players = new List<Player>(
{
new Player() { 0,59},
new Player() {60,79},
new Player() {80,159}
});
Random r = new Random();
int rVal = r.Next(0,players.Last().HighestValue+1);
Player winner = players.Single(s=> s.LowestValue <= rVal && s.HighestValue >= rVal);
显然,您可以在结构中添加多个范围数字。我假设你想要更多与你的玩家相关的数据。
另请注意,Random.Next(Int32, Int32)
会返回最低(包含)和最高(不包含)之间的值,因此我们必须在HighestValue