Преглед на файлове

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 преди 4 години
родител
ревизия
c58b90f965
променени са 2 файла, в които са добавени 22 реда и са изтрити 1 реда
  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);