C++扑克牌

题目要求:

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);

扫描二维码关注公众号,回复: 9856659 查看本文章

        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;

}
 

发布了20 篇原创文章 · 获赞 10 · 访问量 1379

猜你喜欢

转载自blog.csdn.net/JM624235197/article/details/101099153