C++撲克牌的洗牌發(fā)牌游戲設計
筆者在大學二年級期間,做過的一次C++程序設計:撲克牌的洗牌發(fā)牌游戲。具體內容是:除去大王和小王,將52張撲克牌洗牌,并發(fā)出5張牌。然后判斷這5張牌中有幾張相同大小的牌,是否是一條鏈,有幾個同花等。
筆者在學習他人設計的基礎上,完成了自己的程序設計。這里將源程序分享給大家。
[1] 文件“card.h”
#ifndef CARD_H
#define CARD_H
#include<string>
using namespace std;
class Card
{
public:
 static const int totalFaces=13;
 static const int totalSuits=4;
 Card(int,int);
 int getFace();
 int getSuit();
 string toString();
private:
 int face,suit;
 static const string faceNames[totalFaces];
 static const string suitNames[totalSuits];
};
#endif // CARD_H 
[2] 文件“card.cpp”
#include"card.h"
Card::Card(int faceNumber,int suitNumber)
{
 face=faceNumber;
 suit=suitNumber;
}
string Card::toString()
{
 return faceNames[face]+" of "+suitNames[suit];
}
int Card::getFace() {return face;}
int Card::getSuit() {return suit;}
const string Card::faceNames[totalFaces]=
{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
const string Card::suitNames[totalSuits]=
{"heart","diamond","club","spade"};
[3] 文件“deckofcards.h”
#ifndef DECKOFCARDS_H
#define DECKOFCARDS_H
#include<vector>
#include"card.h"
using namespace std;
class DeckOfCards
{
public:
 static const int fiveCards=5;
 static const int allCards=52;
 DeckOfCards();
 void shuffle();
 Card dealCard(int);
 void sortCards();
 int duiziCards(int* sortFaces);
 //bool moreCards();
private:
 vector<Card> deck;
 int currentCard;
};
#endif // DECKOFCARDS_H
[4] 文件“deckofcards.cpp”
#include"deckofcards.h"
#include<cstdlib>
#include<ctime>
DeckOfCards::DeckOfCards()
{
 //currentCard=0;
 for(int i=0;i<allCards;i++)
 {
  Card card(i%Card::totalFaces,i/Card::totalFaces);
  deck.push_back(card);
 }
}
void DeckOfCards::shuffle()
{
 srand(time(0));
 int swapRandom[allCards];
 for(int i=0;i<allCards;i++)
  swapRandom[i]=int(rand())%allCards;
 for(int i=0;i<allCards;i++)
 {
  Card swapCard(0,0);
  swapCard=deck[i];
  deck[i]=deck[swapRandom[i]];
  deck[swapRandom[i]]=swapCard;
 }
}
Card DeckOfCards::dealCard(int how_many)
{
 for(int i=0;i<how_many;i++)
 {
  cout <<deck[i].toString() <<endl;
  if((i+1)%13==0) cout <<endl;
 }
}
void DeckOfCards::sortCards()
{
 int sortFaces[fiveCards];
 int sortSuits[fiveCards];
 for(int i=0;i<fiveCards;i++)
 {
  sortFaces[i]=deck[i].getFace();
  sortSuits[i]=deck[i].getSuit();
 }
 for(int i=fiveCards-1;i>=0;i--)
  for(int j=0;j<=i-1;j++)
   if(sortFaces[j]>sortFaces[j+1])
   {
    int t;
    t=sortFaces[j];
    sortFaces[j]=sortFaces[j+1];
    sortFaces[j+1]=t;
   }
 if((sortFaces[0]==sortFaces[1]&&sortFaces[0]==sortFaces[2]&&sortFaces[0]==sortFaces[3])||
  (sortFaces[1]==sortFaces[2]&&sortFaces[1]==sortFaces[3]&&sortFaces[1]==sortFaces[4]))
  cout <<"There are 4 same cards." <<endl;
 else if((sortFaces[0]==sortFaces[1]&&sortFaces[0]==sortFaces[2])||
   (sortFaces[1]==sortFaces[2]&&sortFaces[1]==sortFaces[3])||
   (sortFaces[2]==sortFaces[3]&&sortFaces[2]==sortFaces[4]))
  cout <<"There are 3 same cards." <<endl;
 else if(int i=duiziCards(sortFaces))
  cout <<"There are " <<i <<" pairs." <<endl;
 else
  cout <<"There is no same cards." <<endl;
 if(sortFaces[0]+1==sortFaces[1]&&sortFaces[1]+1==sortFaces[2]&&
  sortFaces[2]+1==sortFaces[3]&&sortFaces[3]+1==sortFaces[4])
  cout <<"The five cards is a straight." <<endl;
 else
  cout <<"The five cards is not a straight." <<endl;
 if(sortSuits[0]==sortSuits[1]&&sortSuits[0]==sortSuits[2]&&
  sortSuits[0]==sortSuits[3]&&sortSuits[0]==sortSuits[4])
  cout <<"The five cards have same flower." <<endl;
 else
  cout <<"The five cards have different flower." <<endl;
}
int DeckOfCards::duiziCards(int* sortFaces)
{
 int duiziNum=0;
 for(int i=0;i<fiveCards-1;i++)
  if(sortFaces[i]==sortFaces[i+1]) duiziNum++;
 return duiziNum;
} 
[5] main函數(shù)文件“main_FiveCards.cpp”
#include<iostream>
#include"card.cpp"
#include"deckofcards.cpp"
using namespace std;
int main()
{
 DeckOfCards aDeck;
 cout <<"Deal all cards before shuffle." <<endl;
 aDeck.dealCard(aDeck.allCards);
 aDeck.shuffle();
 cout <<"Deal five cards after shuffle." <<endl;
 aDeck.dealCard(aDeck.fiveCards);
 cout <<"\nThe result after sorting." <<endl;
 aDeck.sortCards();
 return 0;
}
將5個文件放在同一目錄下,對文件“main_FiveCards.cpp”編譯運行即可。以下是在CodeBlocks中的運行結果:
注:如有疑問或者高見,歡迎各位讀者與筆者交流,以期共同學習進步。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。
上一篇:C++使用異或運算實現(xiàn)交換兩個數(shù)的值
欄 目:C語言
本文標題:C++撲克牌的洗牌發(fā)牌游戲設計
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/683.html
您可能感興趣的文章
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
 - 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
 - 01-10c語言求1+2+...+n的解決方法
 - 01-10求子數(shù)組最大和的解決方法詳解
 - 01-10深入理解約瑟夫環(huán)的數(shù)學優(yōu)化方法
 - 01-10深入二叉樹兩個結點的最低共同父結點的詳解
 - 01-10數(shù)據(jù)結構課程設計- 解析最少換車次數(shù)的問題詳解
 - 01-10c語言 跳臺階問題的解決方法
 


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言的正則匹配函數(shù) c語言正則表達
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段
 - 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎
 - 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
 
隨機閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10SublimeText編譯C開發(fā)環(huán)境設置
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 08-05織夢dedecms什么時候用欄目交叉功能?
 - 01-10delphi制作wav文件的方法
 - 01-11ajax實現(xiàn)頁面的局部加載
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10C#中split用法實例總結
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 


