实验案例--发纸牌C++(模板类实现)
作者:
AmbitionX
,
2022-05-06 09:31:59
,
所有人可见
,
阅读 224
#include <iostream>
#include <ctime>
#include <cstring>
using namespace std;
int sign[4][13] = {0}; // 标记数组,用于标记改纸牌有无被发过
string str1[4] = {"梅花", "黑桃", "红桃", "方块"};
string str2[13] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
class PlayCard
{
public:
PlayCard();
// ~PlayCard(); // 静态存储函数为空
void SendCards(int n);
void PrintCards();
private:
string card[13]; // 最多发13张牌
int num; // 发牌张数
};
PlayCard :: PlayCard()
{
num = 0; // 初始发牌
}
// PlayCard :: ~PlayCard()
// {}
void PlayCard :: SendCards(int n)
{
int i, j, k;
num = n;
memset(sign, 0, n); // 初始化标志数组,所有牌均未发出
srand(time(nullptr)); // 初始化随机种子
for (int k = 0; k < n; )
{
i = rand() % 4; // 随机生成花色
j = rand() % 13; // 随机生成点数
if (sign[i][j] == 1) continue; // 如果牌已经发出跳出循环
else
{
card[k] = str1[i] + str2[j]; // 链接str1 和 str2
sign[i][j] = 1; // 标记这张牌已经发出
k ++; // 准备发下一张牌
}
}
}
void PlayCard :: PrintCards()
{
for (int k = 0; k < num; k++) cout << card[k] << "\t"; // 输出第k张牌
cout << endl;
}
int main()
{
int n;
PlayCard P{ }; // 创建对象P
cout << "输入要发牌的张数: ";
cin >> n;
P.SendCards(n);
P.PrintCards(); // 打印发出来的牌
return 0;
}