فهرست منبع

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);