diff options
author | Thomas Günther <tom@toms-cafe.de> | 2007-09-21 01:43:48 +0200 |
---|---|---|
committer | Thomas Günther <tom@toms-cafe.de> | 2007-09-21 01:43:48 +0200 |
commit | b39a6bf3e7add336dbb127394e8c611ec1d29cd6 (patch) | |
tree | ab3b1c27a8ec9769ba0725b9b5179dd19a7bb785 /deck.cpp | |
parent | a9e755360f08ce8da20d15b1aa1593ea753393de (diff) | |
download | vdr-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.cpp | 89 |
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); +} |