一副牌有52张,把牌分给四个人,请设计一个程序完成自动发牌工作.要求不能有重复牌,

一副牌有52张,把牌分给四个人,请设计一个程序完成自动发牌工作.要求不能有重复牌,派的花色:黑桃用S表示,红桃用H表示,方块用D表示,梅花用C表示.牌的数字:2,3,4,... 一副牌有52张,把牌分给四个人,请设计一个程序完成自动发牌工作.要求不能有重复牌,派的花色:黑桃用S表示,红桃用H表示,方块用D表示,梅花用C表示.牌的数字:2,3,4,5,6,7,8,9,T,J,Q,K,A 展开
 我来答
mayadong7349
推荐于2016-12-01 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:674万
展开全部
//对我的回答有什么疑问或要求,可以Hi我。
//模拟发牌程序,供参考:
//算法:用随机数模拟洗牌。产生两个1~54之间的随机数,然后交换对应的两张牌。
//洗牌模块非原创
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,temp,r;
int pk[52]={
101,102,103,104,105,106,107,108,109,110,111,112,113,
201,202,203,204,205,206,207,208,209,210,211,212,213,
301,302,303,304,305,306,307,308,309,310,311,312,313,
401,402,403,404,405,406,407,408,409,410,411,412,413};
printf("\n");
srand((unsigned int)time(NULL));
for(i=0;i<51;i++) //洗牌
{
r=rand()%(51-i)+i+1;//加1为了洗最后一张牌
temp=pk[i];
pk[i]=pk[r];
pk[r]=temp;
}
int k=1;
for(i=0;i<52;i++)//输出每家的牌
{
if(i%13==0)printf("\n第%d家的牌:",k++);
switch(pk[i]/100)
{
case 1:printf(" \003");break;//黑桃
case 2:printf(" \006");break;//红桃
case 3:printf(" \005");break;//梅花
case 4:printf(" \004");break;//方块
}
switch(pk[i]%100)
{
case 1:printf("%-2c",'A');break;
case 11:printf("%-2c",'J');break;
case 12:printf("%-2c",'Q');break;
case 13:printf("%-2c",'K');break;
default:printf("%-2d",pk[i]%100);break;
}
}
printf("\n");
return 0;
}
http://hi.baidu.com/mayadong7349/blog/item/3a1a850daab061e7aa645769.html
chbhhz
2010-04-25 · 超过13用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:39.4万
展开全部
刚才没有登录呀 为什么不让我发了呢 都没法跟踪这个问题了
Playing_Cards(){
//在这个构造中给cards付上初值 52张牌,有顺序的那种,跟新牌一样
}
public xipai(){
//这个方法,用来重新排列cards,用随机顺序组织cards;
}
)

客户端
Playing_Cards pc = new Playing_Cards();
Player p1 = new Player();
Player p2 = new Player();
Player p3 = new Player();
Player p4 = new Player();
pc.xipai();
Array init_cards = pc.getCards;
for(int i=0;i<13;i++){
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
}

这样就把牌发到p1,p2,p3,p4手中了
至于具体的问题,可以具体的解决,比如说这个客户端完全可以抽象成为一个发牌的人类 ,具有发牌人的所有的功能
洗牌 发牌(根据人数去发牌,而不是固定的4个人)
新的客户端只需要,告诉发牌的人对象 是否洗牌 是否发牌 给谁发牌 发牌的顺序等等
这就要具体考虑了,要根据你的需要去具体的判断

仅供参考,如能改进 多谢多谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Monkey家园
2010-04-25 · TA获得超过5635个赞
知道大有可为答主
回答量:1134
采纳率:60%
帮助的人:607万
展开全部
//整个代码完全原创,可以直接拿去用,并且可以反复多轮发牌
//另外,mayadong7349 的功能在意义上符合楼主要求,但是实际上比如其实是用T代替10,花色用S,H,D,C 这几点不满足lz要求.
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;

#define CHAOS 500 //这个数越大,发出来的牌越公平
int main()
{
int th=1;
srand ( (unsigned) time (NULL) );
for(;_getch()!='1'&&cout<<"第"<<th++<<"次发牌";cout<<"\n\n"){//循环发牌
int tag,index,cards[52]={0};
for(int i=0;i!=52;i++)//顺序排好52张牌
cards[i]=i+1;
for(int i=0;i!=CHAOS;i++)//洗牌
{
index=rand()%52;
tag=cards[index];
cards[index]=cards[i%52];
cards[i%52]=tag;
}
for(int i=0,j=1;i!=52;i++)
{
if(i%13==0)
cout<<"\n玩家"<<(j++)<<"的牌:";
if(cards[i]/13>=3)
cout<<"C";
else if(cards[i]/13>=2)
cout<<"D";
else if(cards[i]/13>=1)
cout<<"H";
else if(cards[i]/13>=0)
cout<<"S";
if((cards[i]%13>=0)&&(cards[i]%13<=7))
{
cout<<cards[i]%13+2;
}else
{
if(cards[i]%13==8)
cout<<"T";
else if(cards[i]%13==9)
cout<<"J";
else if(cards[i]%13==10)
cout<<"Q";
else if(cards[i]%13==11)
cout<<"K";
else if(cards[i]%13==12)
cout<<"A";
}cout<<" ";
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-04-25
展开全部
Playing_Cards(){
//在这个构造中给cards付上初值 52张牌,有顺序的那种,跟新牌一样
}
public xipai(){
//这个方法,用来重新排列cards,用随机顺序组织cards;
}
)

客户端
Playing_Cards pc = new Playing_Cards();
Player p1 = new Player();
Player p2 = new Player();
Player p3 = new Player();
Player p4 = new Player();
pc.xipai();
Array init_cards = pc.getCards;
for(int i=0;i<13;i++){
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
删除init_cards 的最后一个元素 使长度-1
p1.getCard()[i] = init_cards[init_cards.length-1];
}

这样就把牌发到p1,p2,p3,p4手中了
至于具体的问题,可以具体的解决,比如说这个客户端完全可以抽象成为一个发牌的人类 ,具有发牌人的所有的功能
洗牌 发牌(根据人数去发牌,而不是固定的4个人)
新的客户端只需要,告诉发牌的人对象 是否洗牌 是否发牌 给谁发牌 发牌的顺序等等
这就要具体考虑了,要根据你的需要去具体的判断

仅供参考,如能改进 多谢多谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
evil0angel
2010-04-25 · TA获得超过112个赞
知道答主
回答量:97
采纳率:0%
帮助的人:65.2万
展开全部
LZ"设计一个程序完成自动发牌工作.要求不能有重复牌“
这句话能不能解释下
重复牌指……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式