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
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.
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
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?
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?
Torque Owner Paul Bruner
Default Studio Name
After typing the code here, it suddenly occurred to me I was generating a random number from 0-10 instead of 0-9;
Yes, I have comments like that in my code:P So used to bounds checking in C++ with segfaluts:P