excluding numbers from random generator (preventing duplicates) [SOLVED]

Started by homelightgames, Thu 30/11/2006 18:38:53

Previous topic - Next topic

homelightgames

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)

Code: ags

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

Babar

The ultimate Professional Amateur

Now, with his very own game: Alien Time Zone

Khris

Code: ags
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++;
}

Ubel

This is my version. It hasn't been properly tested but I think it should work.

Code: ags

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

homelightgames

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

SMF spam blocked by CleanTalk