Game Development Community

Problems using script object as an array.

by Paul Bruner · in Torque Game Engine · 10/16/2011 (5:59 pm) · 1 replies

I just don't know whats wrong. I have looked at this code for a few hours and I can't figure out if its me or the engine:P
function ShuffleArray(%array,%count, %passes)
{
	echo("Start Shuffle" SPC %array.data[0] SPC %array.data[1] SPC %array.data[2] SPC %array.data[3] SPC %array.data[4] SPC %array.data[5] SPC %array.data[6] SPC %array.data[7] SPC %array.data[8] SPC %array.data[9]);
   for(%i=0;%i<%passes;%i++) // 5 shuffle passes
      for(%j=0;%j<%count;%j++) // 
      {
         // card to swap
         %card = getRandom(%count);
         // swap
         %swap = %array.data[%j];
         %array.data[%j] = %array.data[%card];
         %array.data[%card] = %swap;
      }
      	echo("End Shuffle" SPC %array.data[0] SPC %array.data[1] SPC %array.data[2] SPC %array.data[3] SPC %array.data[4] SPC %array.data[5] SPC %array.data[6] SPC %array.data[7] SPC %array.data[8] SPC %array.data[9]);
}

I have a similar code in C, very simple generic array shuffler. But for some reason its copying numbers. I have a big loop making about 30 decks of 10 cards.
for(%i =0;%i<30;%i++)
 {
      %deck = new ScriptObject();
      for(%j=0;%j<10;%j++) %deck.data[%j] = %j;
      ShuffleArray(%deck,10,10);
      %deck.delete();
}
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 6 4 5 8 3 1 9 7 2
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 1 2 5 7 3 0 8 6 9
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 5 6 3 1 8 7 0 9 2

I try it the way I originally had it
%deck = new ScriptObject();
for(%i =0;%i<30;%i++)
 {
      for(%j=0;%j<10;%j++) %deck.data[%j] = %j;
      ShuffleArray(%deck,10,10); 
}
%deck.delete();

Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 8 2 0 1 4 3 6 5 7
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 6 1 2 9 5 4 9 7 0 8
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 4 0 1 8 6 5 3 9 3 2
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 2 9 7 6 5 3 4 1 8 7
Start Shuffle 0 1 2 3 4 5 6 7 8 9
End Shuffle 4 9 5 7 8 2 3 1 0 0


As you see I am losing numbers. Heck, if I am not losing numbers it looks like they are getting deleted as well. Is it something I don't understand about the engine that is getting me?

#1
10/16/2011 (6:06 pm)
Sigh. Never mind. I have just been up to late.

After typing the code here, it suddenly occurred to me I was generating a random number from 0-10 instead of 0-9;
//%card = getRandom(%count);  DON'T do this
%card = getRandom(%count-1); // There we go

Yes, I have comments like that in my code:P So used to bounds checking in C++ with segfaluts:P