c++模拟发牌程序

去掉双王,每人13张,只显示一人的牌即可。还能再发。还要按花色和牌面整理手中的牌,(2最小),还要用表格线绘制边框。还要模拟出牌过程,使用手牌下方显示牌的序号,选择要出牌... 去掉双王,每人13张,只显示一人的牌即可。还能再发。还要按花色和牌面整理手中的牌,(2最小),还要用表格线绘制边框。还要模拟出牌过程,使用手牌下方显示牌的序号,选择要出牌的序号,在读取用户输入的序号出牌,显示剩下的牌。 大神们,救我啊!!!!谢过先!!!! 展开
 我来答
百度网友fa066cb
推荐于2016-10-05 · TA获得超过327个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:202万
展开全部
/*
*我不能给出完整程序,只能提供一个框架,首先每一张牌都是相异的,对于一副牌的存储,不
*妨用数组或者链表。对于花色和牌面属性,用数字和字串来存都行。
*对于发牌函数,就是一个随机数加链表或数组的查找操作
*/
#ifndef card_h
#define card_h
#include "unit.h" //这个里面可以写描述牌的类,包括每一张牌属性
//和函数,属性包括牌面、花色,函数可以有显示本张拍信息show()
//,还应该有获得各个属性的get或set函数

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class A_Set_Card //描述一副牌
{
private:
unit *top; //表头
int n; //当前这副牌中有多少张牌
public:
card(); //构造函数
~card(); //析构,这个别忘了
unit* outputone(); //随机派一张牌
void creat(); //产生不含大小王的一副牌
};
/*
*构造,刚开始时这幅牌为空,(也可以把create函数写到构造函数里边)
*/
A_Set_Card::A_Set_Card()
{
top = NULL;
n = 0;
}

A_Set_Card::~A_Set_Card() //析构函数
{
unit *tem = top; //从表头开始
top = NULL;
while (tem) //如果null != tem
{
unit *pp = tem; //用指针pp接住tem所指向的单元
tem = tem->nextp; //tem后移
delete pp; //析构掉刚才tem所指的单元
}
n = 0; //这幅牌中牌数归零
cout<<"。。。洗完牌。。。"<<endl;
}

/*
*创建一副牌,不含大小王
*/
void A_Set_Card::create()
{
for(int j=1; j<5; j++) //j的取值{1、2、3、4}代表四种花色
{
for(int i=1; i<14; i++) //i的取值{1...13}代表A到K,13种牌面,共13*4 = 52张
{
unit *newp = new unit; //生成一张牌
n++;
newp->inputnum(i); //inputnum()函数用来设置牌面,具体到unit.h里描述单张牌的类中去写
if(j == 1)
{
newp->inputname("黑桃"); //inputname()函数用来设置花色
}
else if (j == 2)
{
newp->inputname("红桃");
}
else if (j == 3)
{
newp->inputname("梅花");
}
else
{
newp->inputname("方块");
}
if (top == NULL) //第一张
{
top = newp;
top->nextp = NULL;
}
else //非第一张
{
unit *tem = top;
top = newp;
top->nextp = tem;
}
}
}
}
/*
* 随机发一张牌,返回那张牌的对象,我觉得稍微有点难的就在这个函数
*/
unit* A_Set_Card::outputone()
{
unit *tem = top; //接过头
srand(time(0)); //设置随机种子
int nn = rand()%n; //在这副牌中剩余的所有牌里随机选一张
if (nn == 0)//恰好是第一张
{
if(tem==NULL)//若空
{
cout<<"空链表"<<endl;
return NULL;
}
top = tem->nextp;
n--;
return tem;
}
else//非第一张
{
for (int i=0; i<nn-1; i++) //tem往下移nn次
{
tem = tem->nextp;
}
if(tem==NULL)//若空
{
cout<<"空链表"<<endl;
return NULL;
}
else
{
unit *pp = tem->nextp;//删除这一张
tem->nextp = tem->nextp->nextp;
n--;//记住牌数自减
return pp;
}
}
}

/*
*然后是排序函数,其实都挺简单,我就写到这吧,希望对你有所帮助
*/
void A_Set_Card::sort()
{}

#endif
bear1200
2012-07-04 · TA获得超过383个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:477万
展开全部
一副牌 初始时 按顺序排好 然后把第一张随即给一个人 (若它手牌已满则重给) 这样发完后的排序也省了。 应该和真正的发牌是等价的。 没几行代码。
至于绘图 你用一个库也不太难 mfc 或vcl 等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
歧倩0fra83
2012-06-26 · 超过10用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:27.9万
展开全部
void FaPai();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式