Adventure Game Studio

AGS Support => Beginners' Technical Questions => Topic started by: homelightgames on Thu 30/11/2006 18:38:53

Title: excluding numbers from random generator (preventing duplicates) [SOLVED]
Post by: homelightgames on Thu 30/11/2006 18:38:53
Hey All,

I have a situation where I have eight variables that all need to pick a random number (1-8) but I don't want any of them to have the same number (so if variable1=5 I don't want the other seven variables to be able to pick 5)?

Right now the code I'm using to do this is long and bulky.Ã,  Does anyone have suggestions for a better, more efficient way? (I think duplicates occasionally slip through)


int pran1;
int pran2;
int pran3;
int pran4;
int pran5;
int pran6;
int pran7;
int pran8;
int pran9;

pran1=Random(7)+1;
//weeding out duplicates
pran2=Random(7)+1;
if (pran2==pran1) {
Ã,  while (pran2==pran1) {
Ã,  Ã,  Ã, pran2=Random(7)+1;
Ã,  Ã, Ã,  }
}
pran3=Random(7)+1;
if ((pran3==pran1) || (pran3==pran2)) {
Ã,  Ã, while ((pran3==pran1) || (pran3==pran2)) {
Ã,  Ã,  Ã, Ã,  pran3=Random(7)+1;
Ã,  Ã,  }
}
pran4=Random(7)+1;
if ((pran4==pran3) || (pran4==pran2) || (pran4==pran1)) {
Ã,  Ã, while ((pran4==pran3) || (pran4==pran2) || (pran4==pran1)) {
Ã,  Ã,  Ã,  pran4=Random(7)+1;
Ã,  Ã, }
}
pran5=Random(7)+1;
if ((pran5==pran3) || (pran5==pran2) || (pran5==pran1) || (pran5==pran4)) {
Ã,  Ã, while ((pran5==pran3) || (pran5==pran2) || (pran5==pran1) || (pran5==pran4)) {
Ã,  Ã,  Ã,  pran5=Random(7)+1;
Ã,  Ã, }
}
pran6=Random(7)+1;
if ((pran6==pran3) || (pran6==pran2) || (pran6==pran1) || (pran6==pran4) || (pran6==pran5)) {
Ã,  while ((pran6==pran3) || (pran6==pran2) || (pran6==pran1) || (pran6==pran4) || (pran6==pran5)) {
Ã,  Ã,  Ã,  pran6=Random(7)+1;
Ã,  Ã,  }
}
pran7=Random(7)+1;
if ((pran7==pran3) || (pran7==pran2) || (pran7==pran1) || (pran7==pran4) || (pran7==pran5) || (pran7==pran6)) {
Ã,  Ã, while ((pran7==pran3) || (pran7==pran2) || (pran7==pran1) || (pran7==pran4) || (pran7==pran5) || (pran7==pran6)) {
Ã,  Ã,  Ã,  pran7=Random(7)+1;
Ã,  Ã,  }
}
pran8=Random(7)+1;
if ((pran8==pran3) || (pran8==pran2) || (pran8==pran1) || (pran8==pran4) || (pran8==pran5) || (pran8==pran6) || (pran8==pran7)) {
Ã,  while ((pran8==pran3) || (pran8==pran2) || (pran8==pran1) || (pran8==pran4) || (pran8==pran5) || (pran8==pran6) || (pran8==pran7)) {
Ã,  Ã,  Ã,  pran8=Random(7)+1;
Ã,  Ã,  }
}


I know I can make it slightly shorter by using an int array (instead of eight seperate variables) so it's on my to-do list, but not priority.

Thanks for your help in advance.

visionmind
Title: Re: excluding numbers from random generator (preventing duplicates)
Post by: Babar on Thu 30/11/2006 18:53:32
use an array instead of pran1-8?
Title: Re: excluding numbers from random generator (preventing duplicates)
Post by: Khris on Thu 30/11/2006 18:55:16
int pran[9];
bool taken[9];

int i=1;
int rd;
bool done;
while (i<=8) {
Ã, done=false;
Ã, while(!done) {
Ã,  Ã, rd=Random(7)+1;
Ã,  Ã, if (!taken(rd)) {
Ã,  Ã,  Ã, pran[i]=rd;
Ã,  Ã,  Ã, taken[rd]=true;
Ã,  Ã,  Ã, done=true;
Ã,  Ã, }
Ã, }
Ã, i++;
}
Title: Re: excluding numbers from random generator (preventing duplicates)
Post by: Ubel on Thu 30/11/2006 19:22:26
This is my version. It hasn't been properly tested but I think it should work.


int pran[9];
int i=0;
int temp;

while (i < 9) {
Ã,  pran[i] = Random(7)+1;
Ã,  temp=0;
Ã,  Ã,  while (temp < i) {
Ã,  Ã,  Ã,  if (pran[i] == pran[temp]) {
Ã,  Ã,  Ã,  Ã,  pran[i] = Random(7)+1;
Ã,  Ã,  Ã,  Ã,  temp--;
Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  temp++;
Ã,  Ã,  }
Ã,  i++;
}


It seems that KhrisMUC was faster. :P
Title: Re: excluding numbers from random generator (preventing duplicates)
Post by: homelightgames on Thu 30/11/2006 19:53:02
Wow, thank guys for your help guys.  This will be extremely valuable for me, especially the introduction to bools.

Babar, yeah, that's what I meant, using a int pran[9] array instead of pran1-pran8.

Thanks everyone.

visionmind