//*******************preprocessor directives*********************** #include <iostream.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <time.h> // used to seed the random number generator
//*******************************扑克类**************************************** class Playing_Card { friend class PerDeck; public:
int m_Value; //扑克的实际面值,用整型值表示,从1开始,1~13
char m_Face[3]; //扑克的数字大小,用字符串的形式表示,为A,2,3,....,10,J,Q,K int order;
char m_Suit; //扑克的花色(黑、红、梅、方) public: Playing_Card(); // 构造函数,初始化扑克牌对象,实际上是将对象清零 void showcard(); // 显示扑克牌对象的面值,花色 void Card_Make(int); //为一张扑克牌对象赋予特定的面值和花色
void AskPaidui(); //询问是否进行扑克小人游戏 void Paidui(); //扑克小人排序游戏 int getCount(); };
//*************************** 一副扑克(54张)************************** class Deck { friend class PerDeck; friend class PlayDEck; public: Playing_Card m_cardarray[54],temp; // 一副扑克牌有54张扑克牌组成(包括大小王) int m_lastdelt; //标记这副扑克牌删除的张数 public: Deck(); // 构造函数,初始化一副扑克牌对象,实际上是将其内的54张扑克牌清零 void MakeDeck() ; // 生成一副扑克,即对其内的54张扑克牌赋予正确的面值及花色 void ShowDeck(); // 显示余下的所有的扑克牌 void DeckShuff(int); // 洗牌,其参数是洗牌的次数 // void Remove_Card(); // 将删除的那张扑克牌的内容清零,使这张
牌在屏幕上显示不出来 }; // mistakenly using a nonexistant card // can bu used to send a card ?? //************************某个人拿的牌****************************** class PerDeck {
public: Playing_Card m_Card[20],temp; //最多有20张牌 int nNum; //实际张数 PerDeck(){} };
void MakePerDeck(Deck&,int);//对象初始化,参数为指定的那副牌及实际赋值个数 void Show(); // 显示 void SortFace(); //按面值排序 void SortSuit(); //按花色排序 void Delete(int n); //删除序号为n的那一张
玩
牌
的
过
程
//*********************************四个人**************************************** class PlayDeck {
public : PerDeck m_deck[4]; //一共是4个人玩牌 int delt,sort; public: PlayDeck(){}
void PlayCard(Deck&); //用指定的那副牌对四个人分别赋值 void ShowAll(); // 显示 void DeleteOne(int row,int column); //删除一张,参数为第row个人的第column那一张 void DeleteAll(int,int,int,int); //删除一轮,参数分别代表4个人各删除哪一张 void SortDeckFace(); //对整副牌按面值排序 void SortDeckSuit(); //对整副牌按花色排序 void AskSort(); //询问排序方法 void AskDelete(); //询问删除方法 int get_int(); //获得一个整数 };
//*************************************************
//***************************prototypes********************************** void Program_Init(); // 程序初始化,输出初始化信息 int main();
void Center_Text(char []); // 将参数(字符串)显示在屏幕的中间 int get_number(); // 接收用户输入的数值,作为函数值返回
int choose_number(); //判断选择是删除一张还是一轮的办法 char Get_Key(); // 获得一个字符,作为函数值返回 void DeckMakeDriver(); // 主要算法,调用多个函数,执行声成牌,洗牌删除等操作
int getRandInt(int min, int max); // 取得两参数见的随机值 void prog_close(); // 暂停程序运行,查看中间运行结果 char continue_quit();
//****************************Main************************************* int main() {
srand( (unsigned)time( NULL ) ); // 初始化随机数种子 int Card_Number = 0; 程 }
Program_Init(); DeckMakeDriver(); prog_close(); return 1;
// 显示程序初始化信息
// 调用函数的主要算法,包含程序的主要操作过// 暂停程序的运行,供用户查看运行结果 // 结束
Deck :: Deck() // 初始化一副牌,将54张牌清零 { int lastdelt = 0; int i; for(i=0;i<=53;i++) { m_cardarray[i] = Playing_Card(); //构造一个临时对象赋值 } }
void Deck::DeckShuff( int times) //洗牌,参数为次数 {
int x, split; //split是分开成两部分的位置,如上部分、下部分 Center_Text(" 开始洗牌……"); cout << endl;
for(x=0;x<=times;x++) 重排一遍 { split = getRandInt(20,35); Deck topdeck; Deck bottomdeck; int i; int bottomdeckindex = 1; int topdeckindex = 1;
// 开始循环,每循环一次将牌全部
// 随机选取split的值 // 生成两副扑克牌对象
for(i=0;i<=split - 1;) //将初始的那副牌的上边部分的张数赋值到新生成的牌的对象中 { topdeck.m_cardarray[topdeckindex] = this->m_cardarray[i]; topdeckindex++; i++; } for(i=(split);i< 54;) // 将下边的部分的张数赋值到新生成的对象中 { bottomdeck.m_cardarray[bottomdeckindex] = this->m_cardarray[i]; bottomdeckindex++; i++; } int deckoutindex = 0; int numcardstomovetop; int numcardstomovebottom; int j; int h = 0; bottomdeckindex = 54 - split; //下部分扑克牌的张数 topdeckindex =split; // 上部分扑克牌的张数 while(decko …… 此处隐藏:10316字,全部文档内容请下载后查看。喜欢就下载吧 ……