// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "Card.hpp" #include "util/Random.hpp" using namespace Dawn; void Card::shuffle(std::vector &deck) { for(uint8_t i = 0; i < deck.size(); i++) { uint8_t swap = Random::random(0, deck.size() - 1); struct Card tmp = deck[i]; deck[i] = deck[swap]; deck[swap] = tmp; } } void Card::fillDeck(std::vector &deck) { deck.clear(); for(uint8_t i = 0; i < CARD_DECK_SIZE; i++) { deck.push_back(Card(i)); } } int32_t Card::contains( const std::vector &deck, const struct Card c ) { if(deck.size() == 0) return -1; return std::distance( deck.begin(), std::find_if( deck.begin(), deck.end(), [c](struct Card card) { return card.cardValue == c.cardValue; } ) ); } int32_t Card::containsValue( const std::vector &deck, const enum CardValue number ) { if(deck.size() == 0) return -1; return std::distance( deck.begin(), std::find_if( deck.begin(), deck.end(), [number](struct Card c) { return c.getValue() == number; } ) ); } std::vector Card::countPairs( const std::vector &deck, const enum CardValue val ) { std::vector pairs; std::for_each( deck.begin(), deck.end(), [&pairs, val](struct Card c) { if(c.getValue() == val) pairs.push_back(c); } ); return pairs; } bool_t Card::cardSorter(struct Card left, struct Card right) { return left.cardValue < right.cardValue; } void Card::sort(std::vector &deck) { std::sort(deck.begin(), deck.end(), &Card::cardSorter); } enum CardValue Card::getValue() { return (enum CardValue)(cardValue % CARD_COUNT_PER_SUIT); } enum CardSuit Card::getSuit() { return (enum CardSuit)(cardValue / CARD_COUNT_PER_SUIT); }