I've written a ShuffleCards function that will actually shuffle a deck of
cards just like would happen in real life (divide the deck in half and stick
them into each other with 1-3 cards between each other card)

   function ShuffleCards(&$cardsArray, $times)
   {
    // Randomizes where to split within center (-3 to +3 from dead center)
(MINIMUM 10 CARDS IN DECK)
    // Splits into two array. Randomizes how many cards from left and how
many cards from right (between 1 and 3)
    // Alternates sides. Continues until both arrays are empty.
    $arraySize = count($cardsArray);

    if($arraySize<10)
     return;

    $deadCenter = $arraySize/2;

    for($i=0;$i<$times;$i++)
    {
     reset($cardsArray);

     $cutVariant = rand(-3, 3);
     $cutLocation = $deadCenter+$cutVariant;

     $firstArray = array();
     $secondArray = array();

     for($z=0;$z<$arraySize;$z++)
     {
      if($z<$cutLocation)
       array_push($firstArray, $cardsArray[$z]);
      else
       array_push($secondArray, $cardsArray[$z]);
     }

     $bottomFirst = rand(0, 1);
     $cardsArray = array();

     while(count($firstArray) && count($secondArray))
     {
      $leftNewCards = array();
      $rightNewCards = array();

      $leftVariant = rand(1, 3);
      if($leftVariant>count($firstArray))
       $leftVariant = count($firstArray);

      $rightVariant = rand(1, 3);
      if($rightVariant>count($secondArray))
       $rightVariant = count($secondArray);


      for($x=0;$x<$leftVariant;$x++)
      {
       array_push($leftNewCards, array_shift($firstArray));
      }

      for($y=0;$y<$rightVariant;$y++)
      {
       array_push($rightNewCards, array_shift($secondArray));
      }

      if($bottomFirst==0)
      {
       $newCardsArray = array_merge($leftNewCards, $rightNewCards);
       $bottomFirst = 1;
      }
      else
      {
       $newCardsArray = array_merge($rightNewCards, $leftNewCards);
       $bottomFirst = 0;
      }

      reset($newCardsArray);

      while(count($newCardsArray))
      {
       array_push($cardsArray, array_shift($newCardsArray));
      }
     }

     if(count($firstArray))
     {
      while(count($firstArray))
       array_push($cardsArray, array_shift($firstArray));
     }
     if(count($secondArray))
     {
      while(count($secondArray))
       array_push($cardsArray, array_shift($secondArray));
     }
    }
   }

Robert Schultz - [EMAIL PROTECTED]




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to