summaryrefslogtreecommitdiff
path: root/deck.c
diff options
context:
space:
mode:
authorThomas Günther <tom@toms-cafe.de>2005-05-15 00:18:18 +0200
committerThomas Günther <tom@toms-cafe.de>2005-05-15 00:18:18 +0200
commit1b80a09e835a6cd68d4160f9799a7268e54a5b53 (patch)
treefa5f92848ed602216ed76ed84980921c9af95a07 /deck.c
downloadvdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.gz
vdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.bz2
Initial versionv0.1.0
Diffstat (limited to 'deck.c')
-rw-r--r--deck.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/deck.c b/deck.c
new file mode 100644
index 0000000..e2a6a43
--- /dev/null
+++ b/deck.c
@@ -0,0 +1,80 @@
+/*
+ * Spider-Arachnid: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#include "deck.h"
+#include <vdr/config.h>
+#include <vdr/tools.h>
+#include <stdlib.h>
+
+
+/** Random number 0 .. max-1 */
+unsigned int rand(unsigned int max)
+{
+ static unsigned int seed =
+#if VDRVERSNUM >= 10318
+ cTimeMs::Now();
+#else
+ time_ms();
+#endif
+ return (unsigned int)((double)max * rand_r(&seed) / (RAND_MAX + 1.0));
+}
+
+
+/** --- class Deck --------------------------------------------------------- **/
+
+/** Constructor */
+Deck::Deck(int cards, int suits, int decks) :
+ allCards(cards * suits * decks)
+{
+ cardsInSuit = cards;
+ suitCount = suits;
+ deckCount = decks;
+ shuffle();
+}
+
+/** Current count of cards */
+int Deck::count() const
+{
+ return allCards.size();
+}
+
+/** Card in deck */
+const Card& Deck::card(int position) const
+{
+ return allCards[position];
+}
+
+/** Shuffle the deck */
+void Deck::shuffle()
+{
+ for (unsigned int i = 0; i < allCards.size(); ++i)
+ {
+ int pos = -1;
+ while (pos < 0)
+ pos = rand(allCards.size());
+ while (allCards[pos].suit >= 0)
+ pos = (pos + 1) % allCards.size();
+ allCards[pos] = Card((i / cardsInSuit) % suitCount, i % cardsInSuit);
+ }
+}
+
+
+/** --- class Card --------------------------------------------------------- **/
+
+/** Constructor */
+Card::Card(int s, int r)
+{
+ suit = s;
+ rank = r;
+}
+
+/** Matches this card to an other card? */
+bool Card::matchesTo(const Card& other) const
+{
+ return (suit == other.suit && rank + 1 == other.rank);
+}