CGC_Codes

C++ Powerball Lottery Sim

Jan 30th, 2017
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.03 KB | None | 0 0
  1. #include <iostream>  // For std::cout, std::cin
  2. #include <iomanip>   // For std::setw
  3. #include <random>    // For all random generation stuff
  4. #include <algorithm> // For std::sort
  5. #include <vector>    // For std::vector
  6.  
  7.  
  8. class Ball
  9. {
  10. public:
  11.         Ball(int i) { number = i; }
  12.  
  13.         int   getNumber() { return number; }
  14.         bool  isRed()     { return Red; }
  15.  
  16.         const bool operator == (int i) { return number == i; }
  17.         const bool operator == (Ball &rhs) { return number == rhs.number; }
  18.         const bool operator <  (Ball &rhs) { return number < rhs.number;  }
  19.         const bool operator >  (Ball &rhs) { return number > rhs.number;  }
  20. protected:
  21.         int number;
  22.         bool Red;
  23. };
  24.  
  25. class WhiteBall : public Ball
  26. {
  27. public:
  28.         WhiteBall(int i) : Ball(i)
  29.         {
  30.                 Red = false;
  31.         }
  32. };
  33.  
  34. class RedBall : public Ball
  35. {
  36. public:
  37.         RedBall(int i) : Ball(i)
  38.         {
  39.                 Red = true;
  40.         }
  41. };
  42.  
  43. class RandomNumbers
  44. {
  45. public:
  46.         RandomNumbers(int min, int max, int amount)
  47.         {
  48.                 std::random_device rd;
  49.                 std::default_random_engine re(rd());
  50.                 std::uniform_int_distribution<int> uid(min, max);
  51.  
  52.                 for (int i = 0; i < amount; i++)
  53.                 {
  54.                         int num = uid(re);
  55.  
  56.                         for (int n : numbers)
  57.                         {
  58.                                 if (n == num)
  59.                                         num = uid(re);
  60.                         }
  61.  
  62.                         numbers.push_back(num);
  63.                 }
  64.         }
  65.  
  66.         std::vector<int> getNumbers() { return numbers; }
  67. private:
  68.         std::vector<int> numbers;
  69. };
  70.  
  71. class Ticket
  72. {
  73. public:
  74.         Ticket()
  75.         {
  76.                 RandomNumbers ticketNums(1, 58, 6);
  77.                 numbers = ticketNums.getNumbers();
  78.                 std::sort(numbers.begin(), numbers.end());
  79.         }
  80.  
  81.         void display()
  82.         {
  83.                 std::cout << "Ticket:  ";
  84.                 for (int i : numbers)
  85.                 {
  86.                         std::cout << std::setw(2) << i << " ";
  87.                 }
  88.                 std::cout << std::endl;
  89.         }
  90.  
  91.         std::vector<int> getNumbers() { return numbers; }
  92. private:
  93.         std::vector<int> numbers;
  94. };
  95.  
  96.    
  97.  
  98. class Lottery
  99. {
  100. public:
  101.         Lottery()
  102.         {
  103.                 RandomNumbers RandomWhite(1, 58, 5);
  104.                 RandomNumbers RandomRed(1, 34, 1);
  105.  
  106.                 for (int n : RandomWhite.getNumbers())
  107.                 {
  108.                         balls.push_back(new WhiteBall(n));
  109.                 }
  110.  
  111.                 std::sort(balls.begin(), balls.end(), [](Ball* a, Ball* b){ return *a < *b; });
  112.  
  113.                 balls.push_back(new RedBall(RandomRed.getNumbers()[0]));
  114.         }
  115.  
  116.         ~Lottery()
  117.         {
  118.                 for (auto ball : balls)
  119.                 {
  120.                         delete ball;
  121.                 }
  122.         }
  123.  
  124.         void display()
  125.         {
  126.                 std::cout << "Lottery: ";
  127.  
  128.                 for (auto ball : balls)
  129.                 {
  130.                         if (ball->isRed())
  131.                                 std::cout << "Red number: " << ball->getNumber() << std::endl;
  132.                         else
  133.                                 std::cout << std::setw(2) << ball->getNumber() << " ";
  134.                 }
  135.         }
  136.  
  137.         std::vector<Ball*> getBalls() { return balls; }
  138. private:
  139.         std::vector<Ball*> balls;
  140. };
  141.  
  142. class Winning
  143. {
  144. public:
  145.         Winning(std::vector<Ticket*> tickets, std::vector<Ball*> balls)
  146.         {
  147.                 for (auto ticket : tickets)
  148.                 {
  149.                         int matches = 0;
  150.                         bool hasRed = false;
  151.  
  152.                         for (int number : ticket->getNumbers())
  153.                         {
  154.                                 for (auto ball : balls)
  155.                                 {
  156.                                         if (*ball == number)
  157.                                         {
  158.                                                 matches++;
  159.  
  160.                                                 if (ball->isRed())
  161.                                                         hasRed = true;
  162.                                         }
  163.                                 }
  164.                         }
  165.  
  166.                         winnsPerTicket.push_back(matches);
  167.                         hasRedTicket.push_back(hasRed);
  168.                 }
  169.         }
  170.  
  171.         int getWinnings()
  172.         {
  173.                 for (size_t i = 0; i < winnsPerTicket.size(); i++)
  174.                 {
  175.                         std::cout << "Got " << winnsPerTicket[i] << " matches.";
  176.  
  177.                         if (hasRedTicket[i])
  178.                                 std::cout << " And has got the red ball!" << std::endl;
  179.                         else
  180.                                 std::cout << " But has not got the red ball." << std::endl;
  181.                 }
  182.  
  183.                 return 0;
  184.         }
  185.  
  186. private:
  187.         std::vector<int> winnsPerTicket;
  188.         std::vector<bool> hasRedTicket;
  189. };
  190.  
  191.    
  192. class Game
  193. {
  194. public:
  195.         Game() {};
  196.         ~Game()
  197.         {
  198.                 for (auto ticket : tickets)
  199.                 {
  200.                         delete ticket;
  201.                 }
  202.         }
  203.  
  204.         void Menu()
  205.         {
  206.                 int numTic = 0;
  207.                 std::cout << "Welcome to the PowerBall Lottery!" << std::endl;
  208.                 std::cout << "To play you need to purchase a ticket at $2. More tickets increase the odds to win." << std::endl;
  209.                 std::cout << "How many tickets would you like? " << std::endl;
  210.  
  211.                 do
  212.                 {
  213.                         std::cout << "Enter amount of tickets you would like to purchase: ";
  214.                         std::cin >> numTic;
  215.                         std::cin.sync();
  216.  
  217.                         if ((numTic < 1) || (numTic > 100))
  218.                         {
  219.                                 std::cout << "Input invalid. Needs to be a number between 1 and 100. Please try again" << std::endl;
  220.                         }
  221.                 } while ((numTic < 1) || (numTic > 100));
  222.  
  223.                 createTickets(numTic);
  224.                 std::cout << "Your tickets are registered. Thank you for playing the PowerBall lottery!" << std::endl;
  225.         }
  226.  
  227.         void Play()
  228.         {
  229.                 std::cout << "Let\'s see this weeks PowerBall lottery numbers!" << std::endl;
  230.                 lotto.display();
  231.  
  232.                 for (auto ticket : tickets)
  233.                 {
  234.                         ticket->display();
  235.                 }
  236.  
  237.                 Winning w(tickets, lotto.getBalls());
  238.                 w.getWinnings();
  239.         }
  240.  
  241. private:
  242.         std::vector<Ticket*> tickets;
  243.         Lottery lotto;
  244.  
  245.         void createTickets(int numTic)
  246.         {
  247.                 for (int i = 0; i < numTic; i++)
  248.                 {
  249.                         tickets.push_back(new Ticket);
  250.                 }
  251.         }
  252. };
Advertisement
Add Comment
Please, Sign In to add comment