题目要求:
1、声明一个扑克牌类,拥有方法:传入花色和点数生成扑克牌、打印扑克牌。
2、声明一个玩家类,每人拥有18张扑克牌。拥有方法:增加手牌(摸牌)、展示手牌,其中展示手牌要求降序排序展示。
完成程序:
1、随机生成18张扑克牌,当做一个玩家的手牌。
2、用54张不同的扑克牌构成牌堆,发给3个玩家。
#include <iostream>
#include<cstdlib>
#include<ctime>
#include<cstdio>
#include<cstring>
using namespace std;
enum{
SPADES,//黑桃
HEARTS,//红桃
LCLUB,//梅花
DIAMOND,//方片
JOKER//王
};
class Poker
{
char m_type;//扑克牌的类型,成员变量用m_以示区分 全局变量g_,成员变量m_,局部变量s_
int m_point;//扑克牌的点数
public:
Poker() : //构造函数
m_type(0),
m_point(0)
{
}
Poker(char type, int point) :
m_type(type),
m_point(point)
{
}
void makePoker(char type, int point)
{
m_type = type;
m_point = point;
if (m_type == JOKER)
{
m_point += 13;
}
}
void outputPoker()//打印
{
char *type[5] = { "黑桃", "红桃", "梅花", "方片", "" };
char *point[16] = { "", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "小王", "大王" };
printf("%s%s\n", type[m_type], point[m_point]);//以宏为下标的方式打印
}
bool cmppoker(Poker tmp)
{
return (m_point < tmp.m_point) ||
(m_point == tmp.m_point&&m_type > tmp.m_type);
}
bool isEff()
{
if (m_type == JOKER && (m_point == 14 || m_point == 15))
{
return true;
}
if ((unsigned char)m_type > 3 ||
(unsigned char)m_point - 1 > 13)
{
return false;
}
return true;
}
};
class Player
{
Poker m_Handcard[18];//18张手牌
int m_size;//记录抓牌抓到哪了
public:
Player() :
m_size(0)//构造函数,构造对象时,直接调用,自动给size清零//构造函数的另一种写法Poker():m_type(0),m_point(0){}
{
}
void getCard(Poker newcard)
{
int i;
for (i = m_size; i > 0 && m_Handcard[i - 1].cmppoker(newcard); i--)//插排,抓到手牌以降序排序
{
m_Handcard[i] = m_Handcard[i - 1];
}
m_Handcard[i] = newcard;
m_size++;
}
void showCard()
{
for (auto &i : m_Handcard)
{
i.outputPoker();
putchar(' ');
}
putchar('\n');
}
};
void Pokertest()
{
srand((unsigned)time(NULL));
Player P1;
Poker tmp(0, 3);
int i;
for (i = 0; i < 18; i++)
{
tmp.makePoker(rand() % 4, rand() % 13 + 1);//花色和点数
P1.getCard(tmp);
}
P1.showCard();
}
int randnum(Poker *cardHeap)
{
int tmp = rand() % 54;
while (1)
{
if (cardHeap[tmp].isEff())
{
return tmp;
}
else
{
tmp++;
if (tmp == 54)
{
tmp = 0;
}
}
}
}
int main()
{
Poker tmp[54];
int j = 0;
Player aaa;
Player bbb;
Player ccc;
for (auto &i : tmp)
{
i.makePoker(j / 13, j % 13 + 1);
j++;
}
srand((unsigned)time(NULL));
int delcard;
int i;
for (i = 0; i < 18; i++)
{
delcard = randnum(tmp);
aaa.getCard(tmp[delcard]);
tmp[delcard].makePoker(-1, -1);
delcard = randnum(tmp);
bbb.getCard(tmp[delcard]);
tmp[delcard].makePoker(-1, -1);
delcard = randnum(tmp);
ccc.getCard(tmp[delcard]);
tmp[delcard].makePoker(-1, -1);
}
aaa.showCard();
bbb.showCard();
ccc.showCard();
system("pause");
return 0;
}