alfps

chili pill's code ported to windows

Nov 3rd, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.96 KB | None | 0 0
  1. #include "kickstart.core.hpp"   //! card suit symbols.  https://github.com/alf-p-steinbach/kickstart>
  2.  
  3. // Machinery to support a simple find/replace editing to replace cout output with UTF-8 ks::output:
  4. const struct Ostream_hack {} utf8_out;
  5.  
  6. template< class T >
  7. inline auto operator<<( const Ostream_hack o, const T& value )
  8.     -> Ostream_hack
  9. {
  10.     using namespace kickstart;
  11.     output( ""s << value );
  12.     return o;
  13. }
  14.    
  15. #include <time.h>       //! for ::time
  16.  
  17. #include <iostream>
  18. #include <vector>
  19. #include <cstdlib>
  20. #include <algorithm>
  21.  
  22. enum Suit {SPADES , DIAMONDS, CLUBS, HEARTS};
  23.  
  24. const unsigned int JACK = 11, QUEEN = 12, KING = 13, ACE = 14;
  25.  
  26. class Card {
  27.   private:
  28.      unsigned int number;
  29.      Suit suit;
  30.      
  31.   public:
  32.    
  33.      Card(unsigned int n, Suit s) : number(n), suit(s) {}
  34.      
  35.      Card () {}
  36.      
  37.      void showCard() const;
  38.      
  39.      Suit getSuit() const;
  40.      
  41.      void setCard(unsigned int n, Suit s);
  42.      
  43.      bool operator > (const Card &c) const;  
  44.      
  45.      bool operator == (const Card &c) const;
  46.      
  47.      bool isEqual (const Card &c) const;
  48.      
  49. };
  50.  
  51. void Card:: showCard() const {
  52.    if(number >= 5 && number <= 10)
  53.          utf8_out << number ;
  54.        
  55.    else
  56.       switch (number) {
  57.       case JACK: utf8_out << 'J'; break;
  58.       case QUEEN: utf8_out << 'Q'; break;
  59.       case KING: utf8_out << 'K'; break;
  60.       case ACE: utf8_out << 'A'; break;        
  61.      }
  62.        
  63.    switch (suit) {
  64.    case SPADES: utf8_out << "♠ "; break;
  65.    case DIAMONDS: utf8_out << "♦ "; break;
  66.    case HEARTS: utf8_out << "♥ "; break;
  67.    case CLUBS: utf8_out << "♣ "; break;
  68.      }
  69. }
  70.  
  71.  
  72. bool Card:: operator > (const Card &c) const {
  73.     if(suit == c.suit) {
  74.      return  (number > c.number) ? true: false;
  75.     }
  76.    
  77.     return false;
  78. }  
  79.    
  80. Suit Card:: getSuit() const {
  81.   return suit;
  82. }
  83.  
  84. void Card:: setCard(unsigned int n, Suit s) {
  85.     number = n;
  86.     suit = s;
  87. }
  88.  
  89. bool Card:: operator == ( const Card &c) const {
  90.     return (suit == c.suit) ? true : false;
  91. }
  92.  
  93. bool Card:: isEqual(const Card &c) const {
  94.     return (number == c.number && suit == c.suit) ? true : false;
  95. }
  96.  
  97. void showDeck(Card []);
  98. void shuffleCards(Card []);
  99. void setCards(Card []);
  100. void sortCards(std:: vector<Card> &);
  101. //if is Cpu turn after player plays
  102. int play(Card &, std:: vector<Card> & );
  103.  
  104. //if is cpu wins
  105. int play(std:: vector<Card> &);
  106.  
  107. //check if player has a similar card suit
  108.  
  109. bool haveSimilarSuitCard(const Card &card , std:: vector<Card> &cards) {
  110.   for(auto c : cards) {
  111.        if(card == c ) {
  112.             return true;
  113.         }
  114.      }
  115.      
  116.      return false;
  117. }
  118.  
  119. void showPlayerCards(std:: vector<Card> & cards) {
  120.   for(auto c : cards)
  121.       c.showCard();
  122.   utf8_out << '\n';
  123. }
  124.    
  125.    
  126. int main() {
  127.  
  128. ///////////////////////////////////////////
  129.     Card deck[40];
  130.    
  131.     setCards(deck);
  132.    
  133.    // showDeck(deck);
  134. ///////////////////////////////////////////
  135.     //utf8_out << "\nShuffled Cards\n\n";
  136.     shuffleCards(deck);
  137.    
  138.    // showDeck(deck);
  139.  
  140. ///////////////////////////////////////////
  141. /* Share cards */
  142.     std:: vector<Card> player1 (std:: begin(deck), std:: begin(deck) + 5);
  143.     /*first 5 cards go to player 1*/
  144.     std:: vector<Card> player2 (std:: begin(deck)+5, std:: begin(deck) + 10);
  145.     /*second 5 cards go to player 2*/
  146.    
  147.    utf8_out << "\n";
  148.   // utf8_out << "Player 1 cards : ";
  149.  //  showPlayerCards(player1);
  150.   // utf8_out << "Player 2 cards : ";
  151.    //showPlayerCards(player2);
  152.    
  153.    utf8_out << "S P A\n";
  154.  
  155.  utf8_out << "\n----------------------------------------------------\n";
  156.    
  157.      utf8_out << "The game is simple each player is dealt with 5 cards the player who presents the card with higher suit and already leading in the last round wins, it doesn't matter if you are winning the last round is all that matters....\nAlso if a player plays card you have to play a card with similar suit otherwise 'Way3 Ogba!!!' in my local language means you have violated a crucial rule but dont worry the system does not allow you to make such mistakes...\n";
  158.      
  159.      utf8_out << "------------------------------------------------------\n";
  160.      
  161.      utf8_out << "NOTE: after you choose a card, that card is popped out of sight so entering same number on different occasions will choose another card :)\n\nNOTE :.//Count the position of your cards and enter it position\n";
  162.    
  163.     PlayersTurn:
  164.     do {
  165.       int choose;
  166.      utf8_out << "\nYour cards : ";
  167.       showPlayerCards(player1);
  168.       utf8_out << "Enter number to choose card : ";
  169.       std:: cin >> choose;
  170.       if(choose < 1 || choose > player1.size()){
  171.         std:: cerr << "Number out of bounds\n";
  172.         continue;
  173.       }
  174.       //user enters correct number
  175.       else  {
  176.           Card card1 = player1[choose - 1];
  177.         utf8_out << "\nPlayer 1 card : ";  card1.showCard(); utf8_out << '\n';
  178.           player1.erase(player1.begin() + (choose-1));
  179.           int p = play(card1, player2);
  180.           Card card2 = player2[p];
  181.          utf8_out << "Player 2 card : "; card2.showCard();
  182.           player2.erase(player2.begin() + p);
  183.           utf8_out << '\n';
  184.          
  185.           if(card2 > card1) {
  186.                if(player2.size() == 0) {
  187.                  //then game is over
  188.                  utf8_out << "\nPlayer 2 wins...  GAME OVER!";
  189.                  return EXIT_SUCCESS;
  190.                }
  191.                 goto player2Leads;      
  192.           }
  193.       }
  194.    }
  195.  
  196.    while(player1.size() != 0);
  197.    
  198.    utf8_out << "\nPlayer 1 wins... GAME OVER\n";
  199.    return EXIT_SUCCESS;
  200.    
  201.    player2Leads:
  202.        utf8_out << "\n\nPlayer 2 wins this round by presenting a more stronger card suit, but this game is not over :) yet, you now have 5% chance of winning unless maybe you want to prove me wrong 😂😂\n\n\n";
  203.      
  204.    do {
  205.       utf8_out << "Player 2 plays : ";
  206.           int p = play(player2);
  207.           Card card2 = player2[p];
  208.           card2.showCard();
  209.           player2.erase(player2.begin() + p);
  210.    player1Turn:
  211.           int choose;
  212.           utf8_out << "\n\nYour cards : ";
  213.           showPlayerCards(player1);
  214.           utf8_out << "Enter number to choose card : ";
  215.           std:: cin >> choose;
  216.          
  217.           if(choose < 1 || choose > player1.size()) {
  218.           std:: cerr << "Number out of bounds\n";
  219.             goto player1Turn;
  220.           }
  221.          
  222.         else {
  223.           Card card1 = player1[choose - 1];
  224.          
  225.           if(!(card1 == card2)) {
  226.             if(haveSimilarSuitCard(card2, player1)) {
  227.               utf8_out << "\nYou have a card with similar Card suit, sorry! You have to bring it out\n";
  228.              
  229.               goto player1Turn;
  230.             }
  231.           }
  232.          
  233.          utf8_out << "\nPlayer 2 card : "; card2.showCard();
  234.        utf8_out << "\nPlayer 1 card : "; card1.showCard(); utf8_out << "\n";
  235.      
  236.          
  237.        player1.erase(player1.begin() + (choose-1));
  238.           utf8_out << '\n';
  239.      if(card1 > card2)  {
  240.                if(player1.size() == 0){
  241.              
  242.     utf8_out << "Phew! very lucky you won in the last round, GOOD LUCK   Player 1 wins... GAME OVER!";
  243.                 return EXIT_SUCCESS;
  244.              }
  245.                  else { utf8_out << "\nCongratulations on winning this round, you are on your road to victory, keep maintaning your victory by making good choices or should i say guessess!😂😂\n\n";
  246.                   goto PlayersTurn;
  247.                 }  
  248.              }
  249.           }          
  250.       }
  251.      
  252.       while(player1.size() != 0);  
  253.      
  254.       utf8_out << "\nPlayer 2 wins... GAME OVER\n";
  255.    return EXIT_SUCCESS;
  256.        
  257. }
  258.  
  259. void showDeck(Card deck[]) {
  260.   for(size_t j = 0; j < 40; ++j) {
  261.         deck[j].showCard();
  262.         if(((j+1)%10) == 0) utf8_out << '\n';
  263.     }
  264. }
  265.  
  266. void shuffleCards(Card deck[]) {
  267.      std:: srand(int(time(NULL)));      //! cast
  268.    
  269.     for(size_t j = 0; j < 40; ++j) {
  270.         int r = rand() % 40;
  271.         std:: swap(deck[j],deck[r]);
  272.     }
  273. }
  274.  
  275. void sortCards(std:: vector<Card> &cards) {
  276.   for(int x = 1; x < cards.size(); ++x) {
  277.     for(int y = 0; y <= x; ++y) {
  278.        if(cards[y] > cards[x]) {
  279.          std:: swap(cards[y], cards[x]);
  280.        }
  281.     }
  282.   }
  283. }
  284.  
  285. void setCards(Card deck[]) {
  286.     for(size_t j = 0; j < 40; ++j) {
  287.      deck[j].setCard((j%10)+5, Suit((j/10)));
  288.     }
  289. }
  290.  
  291. int play(Card &card, std:: vector<Card> &player2) {
  292.      bool containsSuit = false;
  293.      std:: vector<Card> possibleCards;
  294.  
  295.     for(auto c : player2) {
  296.        //if player2 has cards with common suit store in possible cards
  297.         if(c == card) {
  298.           possibleCards.push_back(c);
  299.           containsSuit = true;
  300.        }          
  301.     }
  302.    
  303.  
  304.     if(containsSuit) {
  305.      
  306.     sortCards(possibleCards);
  307.      
  308.      for(size_t j = 0; j < possibleCards.size(); ++j ) {
  309.      if(possibleCards[j] > card) {
  310.     auto f = std:: find(player2.begin(), player2.end(), possibleCards[j]);
  311.    
  312.       return int(f - player2.begin());      //! cast
  313.     }
  314.  }
  315.  
  316.  
  317.  std:: srand(int(time(NULL)));      //! cast -- also dubious, a second call of srand.
  318.  
  319.  
  320.       //if no better card was found
  321.      
  322.         int size = int( possibleCards.size() );     //! cast
  323.        
  324.      
  325.         int randomCard = std:: rand() % size;
  326.          
  327.         auto f = std:: find(player2.begin(), player2.end(), possibleCards[randomCard]);
  328.        
  329.         return int(f - player2.begin());        //! cast
  330.                
  331.       }
  332.  
  333.        
  334.   //if no such card of the same suit is found
  335.     int size = int(player2.size());         //! cast
  336.    
  337.    int randomCard = std:: rand() % size;
  338.        
  339.      auto f = std:: find(player2.begin(), player2.end(), player2[randomCard]);
  340.        
  341.        return int(f - player2.begin());     //! cast
  342. }
  343.  
  344. int play(std:: vector<Card> &player2) {
  345.     std:: srand(int(time(NULL)));           //! cast
  346.     size_t size = player2.size();
  347.     int r = std:: rand() % size;
  348.    
  349.     return (r);
  350. }
  351.  
Add Comment
Please, Sign In to add comment