- Home /
Question by
Michael Boyd · Mar 28, 2012 at 07:36 PM ·
array
implementing shuffle script
Hi, I'm just starting out on a card game and have been hunting around for a shuffle script here in unity answers.
I found a script (below) which performs the shuffle and prints the new order to the debug log but I'm confused as to how to then implement this in game. How do I apply this new order to a deck of cards which I have created and textured? Resulting in a newly shuffled deck of cards which can be interacted with; cards dealt, picked from the top of the pile etc?
Thanks for your help
function Start () {
InitiateDeck ();
ShuffleDeck (2);
}
var deck : Array = new Array ();
function InitiateDeck () {
deck.Clear ();
for (var valueCard : float = 1; valueCard <= 13; valueCard++) {
for (var suitCard : float = 1; suitCard <= 4; suitCard++) {
deck.Push (Vector2 (valueCard, suitCard));
}
}
Debug.Log ("Deck initiated. Current size :"+deck.length+". Current content:"+deck);
}
function ShuffleDeck (times : int) {
// Repeat the process as many times as specified.
for (var i : int = 0; i < times; i++) {
// Setting the first temporary deck, put all existing card of deck in deck 1.
var tempDeck1 : Array = new Array ();
for (var j : int = 0; j < deck.length; j++) {
tempDeck1.Push (deck[j]);
}
// Shuffle by using random number and transfers in deck 2.
var tempDeck2 : Array = new Array ();
var indexCard : int;
while (0 < tempDeck1.length) {
// Get a random card between minimum (inclusive) and maximum (exclusive).
var minimum : int = 0;
var maximum : int = tempDeck1.length;
indexCard = Random.Range (minimum, maximum);
// Add the card in the deck 2.
tempDeck2.Push (tempDeck1 [indexCard]);
// Remove the card at deck 1.
tempDeck1.RemoveAt (indexCard);
}
// Shuffle done, but needs to set the new deck in the current deck.
deck.Clear ();
for (var k : int = 0; k < tempDeck2.length; k++) {
deck.Push (tempDeck2[k]);
}
Debug.Log ("Deck shuffled. Current size :"+deck.length+". Current content:"+deck);
}
}``
Comment