Procházet zdrojové kódy

Added random card shuffle.

But this will give us consistent cards for a given seed/
certain year/month/day, 1 .. 5, + some other seed if I
want to use the same routines but have different card
games.  (I don't want someone to play one game, and
know what the cards will be in another.)
Steve Thielemann před 4 roky
rodič
revize
c58b90f965
2 změnil soubory, kde provedl 22 přidání a 1 odebrání
  1. 19 1
      deck.cpp
  2. 3 0
      deck.h

+ 19 - 1
deck.cpp

@@ -1,5 +1,6 @@
 #include "deck.h"
 
+#include <algorithm>
 #include <sstream>
 
 Deck::Deck(int size) {
@@ -281,4 +282,21 @@ int levels[4] = {3, 6, 9, 10};
     x = -1;
     level = -1;
   }
-}
+}
+
+vector<int> card_shuffle(std::seed_seq &seed, int decks) {
+  std::mt19937 gen;
+
+  // build deck of cards
+  int size = decks * 52;
+  vector<int> deck;
+  deck.reserve(size);
+  for (int x = 0; x < size; ++x) {
+    deck.push_back(x);
+  }
+
+  // repeatable, but random
+  gen.seed(seed);
+  std::shuffle(deck.begin(), deck.end(), gen);
+  return deck;
+}

+ 3 - 0
deck.h

@@ -1,5 +1,6 @@
 #include "door.h"
 
+#include <random>
 #include <string>
 #include <vector>
 
@@ -40,3 +41,5 @@ public:
 };
 
 void cardgo(int pos, int space, int h, int &x, int &y, int &level);
+
+vector<int> card_shuffle(std::seed_seq &seed, int decks = 1);