实验七——扑克牌
时间:2025-05-15
时间:2025-05-15
一、实验目的
1、要求掌握扑克牌的洗牌、发牌、牌值输出等原理。
2、熟悉应用类的对象来编程。
二、程序功能简介:
1)创建一副扑克牌,可根据需要选择有大小王或者没有大小王的扑克牌。
2)根据需要输入参与扑克牌游戏的人数。
3)重新初始化整副扑克牌,清除所有打牌者的扑克牌,并显示。
4)洗牌,并显示。
5)发牌,并显示。
6)去掉一张最上面的扑克牌,并显示
7)清除所有打牌者的扑克牌,并显示。
8)显示没有发出的扑克牌的情况。
9)显示所有打牌者的扑克牌的情况。
三、实验内容
原程序:
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
enum suit {clubs, diamonds,hearts,spades};
typedef int pips;
struct card {
suit s;
pips p;
};
struct deck {
card d[52];
};
class game
{
public:
pips assign_pips(int n)
{
return (n%13+1);;
}
suit assign_suit(int n)
{
return (static_cast<suit>(n/13));
}
void assign(int n, card& c)
{
c.s= assign_suit(n);
c.p= assign_pips(n);
}
pips get_pip(card c)
{
return c.p;
}
suit get_suit(card c)
{
return c.s;
}
void print_card(card c)
{
cout<<c.p;
switch(c.s)
{
case clubs:
cout<<"C ";
break;
case diamonds:
cout<<"D ";
break;
case hearts:
cout<<"H ";
break;
case spades:
cout<<"S ";
}
}
void print_deck(deck& dk)
{
for (int i=0; i<52;++i)
print_card(dk.d[i]);
}
void shuffle(deck& dk)
{
card t;
for (int i=0; i<52;++i)
{
int k=rand()%(52-i);
t=dk.d[i];
dk.d[i]= dk.d[k];
dk.d[k]=t;
}
}
void deal(int n, int pos, card* hand, deck& dk)
{
for (int i=pos; i<pos+n; ++i)
hand[i-pos]=dk.d[i];
}
void init_deck(deck& dk)
{
for (int i=0; i<52;++i)
assign(i, dk.d[i]);
}
};
void main()
{
int i,c,d;
game A;
deck a;
card b1[13],b2[13],b3[13],b4[13];
A.init_deck(a);
A.print_deck(a);
cout<<endl;
while(1)
{
cout<<"本游戏可以有3或4个选手,需要用户自定义"<<endl\
<<"请输入1和选手人数X开始洗牌并发牌!"<<endl\
<<"请输入2和选手人数X查看洗牌后的牌值!"<<endl;
cin>>c>>d;
//四个人的情况
if(c==1&&d==4)
{
A.shuffle(a);
A.deal(13, 0, b1, a);
A.deal(13, 13, b2, a);
A.deal(13, 26, b3, a);
A.deal(13, 39, b4, a);
cout<<"第一个选手的牌是:";
for( i=0;i<13;i++)
A.print_card(b1[i]);
cout<<endl;
cout<<"第二个选手的牌是:";
for(i=0;i<13;i++)
A.print_card(b2[i]);
cout<<endl;
cout<<"第三个选手的牌是:";
for(i=0;i<13;i++)
A.print_card(b3[i]);
cout<<endl;
cout<<"第四个选手的牌是:";
for(i=0;i<13;i++)
A.print_card(b4[i]);
cout<<endl;
}
//三个人的情况
if(c==1&&d==3)
{
A.shuffle(a);
A.deal(17, 0, b1, a);
A.deal(17, 17, b2, a);
A.deal(18, 34, b3, a);
}
} cout<<"第一个选手的牌是:"; for( i=0;i<17;i++) A.print_card(b1[i]); cout<<endl; cout<<"第二个选手的牌是:"; for( i=0;i<17;i++) A.print_card(b2[i]); cout<<endl; cout<<"第三个选手的牌是:"; for( i=0;i<18;i++) A.print_card(b3[i]); cout<<endl; } if(c==2) { A.shuffle(a); A.print_deck(a); cout<<endl; }
三、输出结果
四、实验分析
本实验程序可以无数次的进行洗牌与发牌的操作,玩家人数可以为3人也可以为4人,这个需要由用户自行定义。在发完牌之后可以显示每个选手手中的牌值。在程序的开始先将整副牌的牌值输出显示出来,然后显示“
本游戏可以有3或4个选手,需要用户自定义\
请输入1和选手人数X开始洗牌并发牌!"\
请输入2和选手人数X查看洗牌后的牌值!"”
提示用户进行正确操作。用户输入1和4,程序将分别输出洗牌并发牌后4个选手手中的牌值。用户输入1和3,程序将分别输出洗牌并发牌后3个选手手中的牌值,特别声明第3个选手有18张牌。用户输入2和任意一个数,程序将输出洗牌后的整副牌的牌值。
五、实验感想
通过本次实验,我掌握了自己设计一个简单程序的基本步骤。初步了解了扑克牌游戏中的洗牌与发牌的过程。
本次课程设计,使我对C++面向对象程序设计有了进一步的认识和掌握,
在设计的过程中,我们更好的懂得了团队合作的重要性,程序设计过程中,出现过几次小错误,都是在头文件处出现的,通过大家的努力还有查阅了相关资料,最后终于把问题解决了。
C++课程设计实验——
发扑克牌程序
姓 名: 柯丙秋 学 号: 6100312023 班 级: 自 …… 此处隐藏:729字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:-分析天平的称量练习
下一篇:SS4改型电力机车主电路