I am attempting to write a simple card game. In an effort to come up with a good shuffling algorithm I came across Jeff Atwood's post on Coding Horror.
However When I view the contents of the object after calling the Constructor they are not shuffled.
Here is my attempt to use Jeff's Solution:
class MainDeck : List<Card>
{
public MainDeck()
{
this.Add(new Card(1, "Hearts"));
this.Add(new Card(2, "Hearts"));
this.Add(new Card(3, "Hearts"));
...
this.OrderBy(a => Guid.NewGuid());
}
}
here is the code for Card:
class Card
{
string suit;
int value;
public Card(int value, string suit)
{
this.value = value;
this.suit = suit;
}
bool isFaceCard()
{
if (value >= 11 || value == 1)
return true;
else
return false;
}
public override string ToString()
{
return (value +", " + suit);
}
}
What should I change to make the shuffling work?
LINQ methods are not mutating existing collections. So this statement does nothing at all: this.OrderBy(a => Guid.NewGuid());
Also, I'm pretty sure you can't assign to this
, so you have to either don't inherit from List<T>
(which is good), or do something like this:
var sorted = this.OrderBy(a => Guid.NewGuid()).ToList();
this.Clear();
this.AddRange(sorted);
Also look at this SO answer, there is more correct shuffling algorithm.