欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++分享笔记:扑克牌的洗牌发牌游戏设计

程序员文章站 2022-12-05 07:50:40
笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏。具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌。然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等。 笔者在学习他人设计的基础上,完成了自己的程序设计。这里将源程序分享给大家。 [1] 文件“card. ......

  笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏。具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌。然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等。

  笔者在学习他人设计的基础上,完成了自己的程序设计。这里将源程序分享给大家。

 

[1] 文件“card.h”

 1 #ifndef CARD_H
 2 #define CARD_H
 3 #include<string>
 4 using namespace std;
 5 
 6 class Card
 7 {
 8 public:
 9     static const int totalFaces=13;
10     static const int totalSuits=4;
11 
12     Card(int,int);
13     int getFace();
14     int getSuit();
15     string toString();
16 
17 private:
18     int face,suit;
19     static const string faceNames[totalFaces];
20     static const string suitNames[totalSuits];
21 
22 };
23 #endif // CARD_H

 

[2] 文件“card.cpp”

 1 #include"card.h"
 2 
 3 Card::Card(int faceNumber,int suitNumber)
 4 {
 5     face=faceNumber;
 6     suit=suitNumber;
 7 }
 8 
 9 string Card::toString()
10 {
11     return faceNames[face]+" of "+suitNames[suit];
12 }
13 
14 int Card::getFace() {return face;}
15 int Card::getSuit() {return suit;}
16 
17 const string Card::faceNames[totalFaces]=
18 {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
19 
20 const string Card::suitNames[totalSuits]=
21 {"heart","diamond","club","spade"};

 

[3] 文件“deckofcards.h”

 1 #ifndef DECKOFCARDS_H
 2 #define DECKOFCARDS_H
 3 #include<vector>
 4 #include"card.h"
 5 using namespace std;
 6 
 7 class DeckOfCards
 8 {
 9 public:
10     static const int fiveCards=5;
11     static const int allCards=52;
12     DeckOfCards();
13     void shuffle();
14     Card dealCard(int);
15 
16     void sortCards();
17     int duiziCards(int* sortFaces);
18     //bool moreCards();
19 
20 private:
21     vector<Card> deck;
22     int currentCard;
23 
24 };
25 #endif // DECKOFCARDS_H

 

[4] 文件“deckofcards.cpp”

  1 #include"deckofcards.h"
  2 #include<cstdlib>
  3 #include<ctime>
  4 
  5 DeckOfCards::DeckOfCards()
  6 {
  7     //currentCard=0;
  8 
  9     for(int i=0;i<allCards;i++)
 10     {
 11         Card card(i%Card::totalFaces,i/Card::totalFaces);
 12         deck.push_back(card);
 13     }
 14 }
 15 
 16 void DeckOfCards::shuffle()
 17 {
 18     srand(time(0));
 19 
 20     int swapRandom[allCards];
 21 
 22     for(int i=0;i<allCards;i++)
 23         swapRandom[i]=int(rand())%allCards;
 24 
 25     for(int i=0;i<allCards;i++)
 26     {
 27         Card swapCard(0,0);
 28         swapCard=deck[i];
 29         deck[i]=deck[swapRandom[i]];
 30         deck[swapRandom[i]]=swapCard;
 31     }
 32 
 33 }
 34 
 35 Card DeckOfCards::dealCard(int how_many)
 36 {
 37     for(int i=0;i<how_many;i++)
 38     {
 39         cout <<deck[i].toString() <<endl;
 40         if((i+1)%13==0) cout <<endl;
 41     }
 42 }
 43 
 44 void DeckOfCards::sortCards()
 45 {
 46     int sortFaces[fiveCards];
 47     int sortSuits[fiveCards];
 48     for(int i=0;i<fiveCards;i++)
 49     {
 50         sortFaces[i]=deck[i].getFace();
 51         sortSuits[i]=deck[i].getSuit();
 52     }
 53 
 54     for(int i=fiveCards-1;i>=0;i--)
 55         for(int j=0;j<=i-1;j++)
 56             if(sortFaces[j]>sortFaces[j+1])
 57             {
 58                 int t;
 59                 t=sortFaces[j];
 60                 sortFaces[j]=sortFaces[j+1];
 61                 sortFaces[j+1]=t;
 62             }
 63 
 64     if((sortFaces[0]==sortFaces[1]&&sortFaces[0]==sortFaces[2]&&sortFaces[0]==sortFaces[3])||
 65       (sortFaces[1]==sortFaces[2]&&sortFaces[1]==sortFaces[3]&&sortFaces[1]==sortFaces[4]))
 66         cout <<"There are 4 same cards." <<endl;
 67 
 68     else if((sortFaces[0]==sortFaces[1]&&sortFaces[0]==sortFaces[2])||
 69            (sortFaces[1]==sortFaces[2]&&sortFaces[1]==sortFaces[3])||
 70            (sortFaces[2]==sortFaces[3]&&sortFaces[2]==sortFaces[4]))
 71         cout <<"There are 3 same cards." <<endl;
 72 
 73     else if(int i=duiziCards(sortFaces))
 74         cout <<"There are " <<i <<" pairs." <<endl;
 75 
 76     else
 77         cout <<"There is no same cards." <<endl;
 78 
 79     if(sortFaces[0]+1==sortFaces[1]&&sortFaces[1]+1==sortFaces[2]&&
 80        sortFaces[2]+1==sortFaces[3]&&sortFaces[3]+1==sortFaces[4])
 81         cout <<"The five cards is a straight." <<endl;
 82     else
 83         cout <<"The five cards is not a straight." <<endl;
 84 
 85     if(sortSuits[0]==sortSuits[1]&&sortSuits[0]==sortSuits[2]&&
 86        sortSuits[0]==sortSuits[3]&&sortSuits[0]==sortSuits[4])
 87         cout <<"The five cards have same flower." <<endl;
 88     else
 89         cout <<"The five cards have different flower." <<endl;
 90 
 91 }
 92 
 93 int DeckOfCards::duiziCards(int* sortFaces)
 94 {
 95     int duiziNum=0;
 96 
 97     for(int i=0;i<fiveCards-1;i++)
 98         if(sortFaces[i]==sortFaces[i+1]) duiziNum++;
 99 
100     return duiziNum;
101 }

 

[5] main函数文件“main_FiveCards.cpp”

 1 #include<iostream>
 2 #include"card.cpp"
 3 #include"deckofcards.cpp"
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     DeckOfCards aDeck;
 9 
10     cout <<"Deal all cards before shuffle." <<endl;
11     aDeck.dealCard(aDeck.allCards);
12 
13     aDeck.shuffle();
14 
15     cout <<"Deal five cards after shuffle." <<endl;
16     aDeck.dealCard(aDeck.fiveCards);
17 
18     cout <<"\nThe result after sorting." <<endl;
19     aDeck.sortCards();
20 
21     return 0;
22 }

 

  将5个文件放在同一目录下,对文件“main_FiveCards.cpp”编译运行即可。以下是在CodeBlocks中的运行结果:

  C++分享笔记:扑克牌的洗牌发牌游戏设计

 

注:如有疑问或者高见,欢迎各位读者与笔者交流,以期共同学习进步。