C语言中用结构体设计一个可以显示花色和编号的扑克牌,并实现对这副扑克牌洗牌、整牌和发牌三个功能

其中黑桃用S表示,红心用H表示,梅花用C表示,方块用D表示,编号为(A、2、3、4、5、6、7、8、9、T、J、Q、K

#include <iostream>
#include <ctime>

using namespace std;

//全局变量,一副牌
//*****************************************************************************************
int g_cards[54] = {

0, 1, 2, 3, // 3
10, 11, 12, 13, // 4
20, 21, 22, 23, // 5
30, 31, 32, 33, // 6
40, 41, 42, 43, // 7
50, 51, 52, 53, // 8
60, 61, 62, 63, // 9
70, 71, 72, 73, // 10
80, 81, 82, 83, // J
90, 91, 92, 93, // Q
100, 101, 102, 103, // K
110, 111, 112, 113, // A
120, 121, 122, 123, // 2
130, //小王
140 //大王

};

void xipai() //洗牌全局函数
{
srand( time(NULL) ); //设置种子
for(int i=0; i<54 ; i++)
{
int position = rand()%54;
int temp = g_cards[i]; //与牌的下标进行互换
g_cards[i] = g_cards[position];
g_cards[position] = temp;
}
}
void showCards() //显示全局函数
{
for(int i=0; i<54 ; i++)
{
if( g_cards[i] != 130 && g_cards[i] !=140 )
{
switch(g_cards[i]%10)
{
case 0:
cout<<"黑桃:";
break;
case 1:
cout<<"红桃:";
break;
case 2:
cout<<"梅花:";
break;
case 3:
cout<<"方片:";
break;
}
}
switch(g_cards[i]/10)
{
case 0:
cout<<"3:"<<endl;
break;
case 1:
cout<<"4:"<<endl;
break;
case 2:
cout<<"5:"<<endl;
break;
case 3:
cout<<"6:"<<endl;
break;
case 4:
cout<<"7:"<<endl;
break;
case 5:
cout<<"8:"<<endl;
break;
case 6:
cout<<"9:"<<endl;
break;
case 7:
cout<<"10:"<<endl;
break;
case 8:
cout<<"J:"<<endl;
break;
case 9:
cout<<"Q:"<<endl;
break;
case 10:
cout<<"K:"<<endl;
break;
case 11:
cout<<"A:"<<endl;
break;
case 12:
cout<<"2:"<<endl;
break;
case 13:
cout<<"小王:"<<endl;
break;
case 14:
cout<<"大王:"<<endl;
break;
}
}
}
//******************************************************************************************
struct CARDMESSAGE
{

//牌型, 牌的信息
int cardType; //牌型 0 单牌 1 双牌 2 三带一/二 3 四带一/二 4 顺子 5 连对 6 飞机 7 炸弹
int size; //牌的张数
int value; //牌值
int num; //连对或者飞机的顺数, -1为无限制
bool isLord; //是否是地主出的牌

void show()
{
switch(cardType)
{
case 0:
cout<<"单张:"<<endl;
break;

case 1:
cout<<"两张:"<<endl;
break;
case 2:
{
if(size==4)
cout<<"三带一:"<<endl;
else
cout<<"三带二:"<<endl;
}
case 3:
{
if(size == 5)
cout<<"四带一"<<endl;
else
cout<<"四带二"<<endl;
}
case 4:
{
cout<<"顺子"<<endl;
}
case 5:
{
cout<<"连对"<<endl;
}
case 6:
{
cout<<"飞机"<<endl;
}
case 7:
{
cout<<"炸弹"<<endl;
}

}
break;
}
switch(value%10)
{
case 0:
cout<<"黑桃:"<<endl;
break;
case 1:
cout<<"红桃:"<<endl;
break;
case 2:
cout<<"梅花:"<<endl;
break;
case 3:
cout<<"方片:"<<endl;
break;
}
switch(value/10)
{
case 0:
cout<<"3:"<<endl;
break;
case 1:
cout<<"4:"<<endl;
break;
case 2:
cout<<"5:"<<endl;
break;
case 3:
cout<<"6:"<<endl;
break;
case 4:
cout<<"7:"<<endl;
break;
case 5:
cout<<"8:"<<endl;
break;
case 6:
cout<<"9:"<<endl;
break;
case 7:
cout<<"10:"<<endl;
break;
case 8:
cout<<"J:"<<endl;
break;
case 9:
cout<<"Q:"<<endl;
break;
case 10:
cout<<"K:"<<endl;
break;
case 11:
cout<<"A:"<<endl;
break;
case 12:
cout<<"2:"<<endl;
break;
case 13:
cout<<"小王:"<<endl;
break;
case 14:
cout<<"大王:"<<endl;
break;
}
}
};
//******************************************************************************************
class Ccard
{
public:
int cardArray[20]; //保存所有牌的信息
int cardNum; //有效牌的张数
public:
Ccard();
~Ccard();
void sortCard();
void getCards(); //获得多张牌
void getOneCard(int card , int index ); //在发牌过程中获得一张牌
void show();
};
void Ccard::getOneCard(int card , int index )
{
cardArray[index] = card;
}
void Ccard::show()
{
for(int i=0; i<cardNum ; i++)
{
if( cardArray[i] != 130 && cardArray[i] !=140 )
{
switch(cardArray[i]%10)
{
case 0:
cout<<"黑桃:";
break;
case 1:
cout<<"红桃:";
break;
case 2:
cout<<"梅花:";
break;
case 3:
cout<<"方片:";
break;
}
}
switch(cardArray[i]/10)
{
case 0:
cout<<"3:" ;
break;
case 1:
cout<<"4:" ;
break;
case 2:
cout<<"5:" ;
break;
case 3:
cout<<"6:" ;
break;
case 4:
cout<<"7:" ;
break;
case 5:
cout<<"8:" ;
break;
case 6:
cout<<"9:" ;
break;
case 7:
cout<<"10:" ;
break;
case 8:
cout<<"J:" ;
break;
case 9:
cout<<"Q:" ;
break;
case 10:
cout<<"K:" ;
break;
case 11:
cout<<"A:" ;
break;
case 12:
cout<<"2:" ;
break;
case 13:
cout<<"小王:" ;
break;
case 14:
cout<<"大王:" ;
break;
}
}
}
Ccard::Ccard()
{
for( int j = 0; j<20 ;j++)
{
cardArray[j] = -1;
}
}
Ccard::~Ccard()
{
}
void Ccard::getCards()
{
for(int i=0; i<17 ; i++)
{
cardArray[i] = g_cards[i];
}
cardNum = 17;
}
void Ccard::sortCard()
{
for( int j = 0; j<cardNum-1 ;j++)
{
for(int i = 0; i<cardNum-1-j ;i++)
{
if( cardArray[i]<cardArray[i+1] )
{
int temp ;
temp = cardArray[i];
cardArray[i] = cardArray[i+1];
cardArray[i+1] = temp;
}
}
}
}
//******************************************************************************************
void fapai(Ccard& player1,Ccard& player2,Ccard& player3)
{
for(int i=0;i<17;i++)
{
player1.getOneCard( g_cards[i*3] , i);
player2.getOneCard( g_cards[i*3 + 1] , i);
player3.getOneCard( g_cards[i*3 + 2] , i);
player1.cardNum = 17;
player2.cardNum = 17;
player3.cardNum = 17;
}
}

int main()
{
Ccard a;
Ccard b;
Ccard c;
xipai(); //第一步 洗牌
fapai(a,b,c); //第二步 发牌
//第三步 发地主牌
a.show();
cout<<"******************************************************"<<endl;
b.show();
cout<<"******************************************************"<<endl;
c.show();
return 0;
}

以前学的时候写的不知道有没有用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-21
哎。。。。。貌似是作业题吧!哈哈。。。。楼上的哥们貌似是用c++做的吧,class都出来了!追问

的确是作业题真的让人很头痛

追答

哈哈。。。。其实最好自己做做,我感觉做了这个程序之后,好好调试调试,然后对一些小问题就可以秒杀了!会有提高的!

本回答被提问者和网友采纳
相似回答