Random float but not the same
Hello guys. I trying to make tap game namely: Player have 4 cubes on screen, randomly colored, and he must tap if it is colored. I maked maaaaany random generators, I looked the same ways but I don't have a idea ;c
So.. my last code look like this:
public float newNumber;
public float lastNumber;
public float finalNumber;
//its only for preview
void randomGenerator()
{
newNumber = Random.Range(1, 4);
lastNumber = newNumber;//its in update
if (newNumber != lastNumber)
{
finalNumber = newNumber;
print(finalNumber);
}
else
{
//generate one more time
}
}
I want in order to generated number never be printed if it is the same like previous. I know, my English is low but if you don't know something , tell me. Above code not working because script generating number longer time. Thank you in advance guys:')
Answer by LazyElephant · Mar 14, 2016 at 11:43 PM
You're assigning lastNumber to equal newNumber directly before the if statement which tests that they're equal. This will cause the if statement to always be true. The following code should work to give you a non-repeating random number.
void randomGenerator()
{
do {
newNumber = Random.Range(1, 4);
} while (newNumber == lastNumber);
lastNumber = finalNumber = newNumber;
}
I don't see a reason to even use finalNumber, but I left it in since you have it in your code. Having a variable to hold the newNumber
and lastNumber
should be enough.
Thank you, it;s really helpful. I must learn do and while so, thaaank you:')
Answer by RudyTheDev · Mar 14, 2016 at 11:29 PM
Something like this:
public float GetDifferentRandomInRange(float from, float to, float notValue)
{
float value;
while ((value = Random.Range(from, to)) == notValue) { }
return value;
}
For clearer idea of what it is doing:
public float GetDifferentRandomInRange(float from, float to, float notValue)
{
float value;
do // Keep doing this:
{
// Generate a random value
value = Random.Range(from, to);
}
while (value == notValue); // until the value isn't the same as the last
return value; // last generated value is good to go
}
I think you want to use int
instead of float
though, since you are talking 4 or however many discreet cubes.