Wrox Programmer Forums
Go Back   Wrox Programmer Forums > C# and C > C# 2005 > BOOK: Beginning Visual C# 2005
|
BOOK: Beginning Visual C# 2005
This is the forum to discuss the Wrox book Beginning Visual C# 2005 by Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon D. Reid, Morgan Skinner, Eric White; ISBN: 9780764578472
Welcome to the p2p.wrox.com Forums.

You are currently viewing the BOOK: Beginning Visual C# 2005 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old July 9th, 2008, 12:37 PM
Registered User
 
Join Date: Jun 2008
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Default Chapter 10 Shuffle code page 266

Dear Sir/Madam,

I just recently purchased this book, and I should say that this book is pretty good for beginner like me. But sometimes I find the exercises are a bit tricky. Some of them are not covered in the topic or even the previous topics, but it is a good way to learn to look at the help section. Now I'm stuck at page 266 where I cannot understand the following code. I hope that someone can help me understand. Thank you.

 1 public void Shuffle()
 2 {
 3 Card[] newDeck = new Card[52];
 4 bool[] assigned = new bool[52];
 5 Random sourceGen = new Random();
 6 for (int i = 0; i < 52; i++)
 7 {
 8 int destCard = 0;
 9 bool foundCard = false;
10 while (foundCard == false)
11 {
12 destCard = sourceGen.Next(52);
13 if (assigned[destCard] == false)
14 foundCard = true;
15 }
16 assigned[destCard] = true;
17 newDeck[destCard] = cards[i];
18 }
19 newDeck.CopyTo(cards, 0);
20 }

Now this code I found it very confusing. On Line 13
"if (assigned[destCard] == false)" What is the value of assigned[destCard]? Is it false or is it true? I cannot find any assignment of boolean value. Can anyone please explain it to me, perhaps using an example please. Thank you.

 
Old September 26th, 2008, 09:53 AM
Friend of Wrox
 
Join Date: Sep 2008
Posts: 234
Thanks: 0
Thanked 32 Times in 30 Posts
Default

There are probably a bazillion ways to shuffle a deck of cards. How about this:

    public void shuffleDeck()
    {
        int index = 1;
        int val;
        Random rnd = new Random();

        // Clear out the array
        System.Array.Clear(deck, 0, deck.Length);

        // DECKSIZE is a symbolic constant set to 52. If another
        // game using more than one deck is used (e.g., canasta)
        // this could be changed

        while (index != DECKSIZE + 1) {
            val = rnd.Next(DECKSIZE + 1); // Values between 1 and 52
            if (deck[val] == 0) // Empty card element??
            {
                deck[val] = index; // Yep,assign it a card place
                index++; // Get ready for next card
            }
        }
    }

This code assumes deck[] has already been set elsewhere to DECKSIZE + 1 elements. I use the "+1" because I want the cards to run from 1 through 52. Using a zero-based array would go from 0-51. (I have some visual card elements that make non-zero easier to use.)

So how does it work? (You can find the full details in my book.) Suppose the first pass generates the random value 18 for val. The code examines element 18 to see if a value is already there. If not, the element value is 0 and the value of index (1) is assigned to element 18. My algorithm interprets this as the Ace of Spades is located at element 18. On the next pass, suppose val is 42. If that element is unused (0), deck[42] gets 2 (the 2 of spades) assigned into it since that's the current value of index. Now suppose the third pass generates 18 again. Now the test shows deck[18] is non-zero so that space is already filled. It will generate another value to place the third card, and so on.

As the array fills up with cards, there are more and more "collisions" with used deck elements. Still, it rarely takes more than 300 passes through the loop to "shuffle" the deck. While I'm sure there are more efficient algorithms, this is an easy one to teach.

Dr. Purdum


Jack Purdum, Ph.D.
Author: Beginning C# 3.0: Introduction to Object Oriented Programming (and 14 other programming texts)





Similar Threads
Thread Thread Starter Forum Replies Last Post
Errata - Chapter 10, Page 377, C# RobC BOOK: Beginning ASP.NET 2.0 BOOK VB ISBN: 978-0-7645-8850-1; C# ISBN: 978-0-470-04258-8 5 October 3rd, 2006 02:26 AM
Ex 10, Chapter 5, page 253 Nick Y BOOK: Ivor Horton's Beginning Visual C++ 2005 1 June 16th, 2006 01:14 AM
Chapter 10, Try It Out error, page 380 VictorVictor BOOK: Beginning ASP.NET 2.0 BOOK VB ISBN: 978-0-7645-8850-1; C# ISBN: 978-0-470-04258-8 2 February 13th, 2006 12:41 PM
Chapter 10 Sample Code jramkawsky BOOK: Professional Java Development with the Spring Framework 0 December 3rd, 2005 08:44 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.