summaryrefslogtreecommitdiff
path: root/deck.cpp
diff options
context:
space:
mode:
authorThomas Günther <tom@toms-cafe.de>2007-09-21 01:43:48 +0200
committerThomas Günther <tom@toms-cafe.de>2007-09-21 01:43:48 +0200
commitb39a6bf3e7add336dbb127394e8c611ec1d29cd6 (patch)
treeab3b1c27a8ec9769ba0725b9b5179dd19a7bb785 /deck.cpp
parenta9e755360f08ce8da20d15b1aa1593ea753393de (diff)
downloadvdr-plugin-spider-b39a6bf3e7add336dbb127394e8c611ec1d29cd6.tar.gz
vdr-plugin-spider-b39a6bf3e7add336dbb127394e8c611ec1d29cd6.tar.bz2
Renamed *.c files to C++ suffix *.cpp
Diffstat (limited to 'deck.cpp')
-rw-r--r--deck.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/deck.cpp b/deck.cpp
new file mode 100644
index 0000000..0537ee9
--- /dev/null
+++ b/deck.cpp
@@ -0,0 +1,89 @@
+/*
+ * Spider-Arachnid: A plugin for the Video Disk Recorder
+ *
+ * Copyright (C) 2005-2007, Thomas Günther <tom@toms-cafe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * $Id: deck.cpp 94 2007-09-20 23:43:48Z tom $
+ */
+
+#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 = cTimeMs::Now();
+ 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);
+}