public static class Rnd // randoms should be simple, dagnabbit
{ // C# is pretty lazy about uints, so I'm just using ints
private static readonly System.Random R = new System.Random();
public static int Uint
{ // returns a random int between 0 and 2,147,483,647
get
{
return R.Next();
}
}
public static int UIntUpTo(int max)
{ // returns an integer between 0 and max
return R.Next(max);
}
public static int UIntUpToInclusive(int max)
{ // returns an integer between 0 and max inclusive
return R.Next(max + 1);
}
public static int UIntBetween(int min, int max)
{ // returns an integer between min and max
return R.Next(min, max);
}
public static int UIntBetweenInclusive(int min, int max)
{ // returns an integer between min and max inclusive
return R.Next(min, max + 1);
}
public static float Float
{ // traditional random number between 0 and 1 exclusive.
get
{
return (float)R.NextDouble();
}
}
public static float FloatUpTo(float max)
{ // returns a number between 0 inclusive and max exclusive
return (float)(R.NextDouble() * max);
}
public static float FloatBetween(float min, float max)
{ // returns a number between min inclusive and max exclusive
return (float)(R.NextDouble() * (max - min)) + min;
}
public static bool Bool
{ // returns true or false (50% chance of true)
get
{
return (R.Next() & 0x01) == 0;
}
}
public static bool BoolWeighted(float chance = 0.5f)
{ // returns true or false (chance% chance of true)
return (R.NextDouble() < chance);
}
public static int Sign
{ // returns 1 or -1 (50% chance of 1)
get
{
return ((R.Next() & 0x01) == 0) ? 1 : -1;
}
}
public static int SignWeighted(float chance = 0.5f)
{ // returns 1 or -1 (chance% chance of 1)
return (R.NextDouble() < chance) ? 1 : -1;
}
public static int Bit
{ // returns 1 or 0 (50% chance of 1)
get
{
return R.Next() & 0x01;
}
}
public static int BitWeighted(float chance = 0.5f)
{ // returns 1 or 0 (chance% chance of 1)
return (R.NextDouble() < chance) ? 1 : 0;
}
}
Comments