实验七——扑克牌

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验七——扑克牌.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219