Преглед изворни кода

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