C语言编程——发牌洗牌模拟,求帮助

作者&投稿:荀河 (若有异议请与网页底部的电邮联系)
~ #include
#include
#include
#include

#define SUIT 52
#define HALF 26
#define COLOR ((char)13)

// 扑克牌的编码是一组13进制的数据,从0编到51
// 函数tell用于解释编码的内容
int tell(char card, char * description)
{
char i=0, j=0;
char *suit[]={"Spades","Hearts","Clubs","Diamonds"};
char *face[] = {"A","2","3","4","5","6","7","8","9",
"10","Jack","Queen","King"};
//题干比较奇怪,要求扣8张底牌,但是含大小王。正确的规则应该是不含大小王的情况下扣8张牌,每人11张牌就对了
//否则应该扣10张牌或者6张牌,否则每人发牌得到的牌数不相同(不是4的倍数)
//如需要,可自行定义JB=52,JA=53,SUIT=54,HALF=27即可。
//if (card > JB || card < 0 || !description) return 0;
//if (card == JB) { sprintf(description, "Big Joker"); return 1; }
//if (card == JA) { sprintf(description, "Little Joker"); return 1; }
i = card / COLOR; j = card % COLOR;
sprintf(description, "%s %s", suit[i], face[j]);
return 1;
}

//初始化牌,形成一个顺序牌
int init(char *poker)
{
char i = 0;
if (!poker) return 0;
for (i=0; i<SUIT; i++) poker[i]=i;
srand((unsigned)time(0));
return 1;
}

//洗牌,将当前牌分成上下两组,然后交叉,有右手先和左手先两种可能,这一个是左手先交换法
int wash_left_hand(char *poker)
{
char i=0, j=0, k=0;
char boker[SUIT];
if(!poker) return 0;
for(i=0; i<HALF; i++) {
j = i * 2; //上半组
boker[j] = poker[i];
k = i + HALF; //下半组
boker[j+1]=poker[k];
}//next i
memcpy(poker, boker, SUIT);
return 1;
}

//洗牌,将当前牌分成上下两组,然后交叉,有右手先和左手先两种可能,这一个是右手先交换法
//注意左右手先后顺序的区别在于变量j的奇偶变化
int wash_right_hand(char *poker)
{
char i=0, j=0, k=0;
char boker[SUIT];
if(!poker) return 0;
for(i=0; i<HALF; i++) {
j = i * 2; //上半组
boker[j+1] = poker[i];
k = i + HALF; //下半组
boker[j]=poker[k];
}//next i
memcpy(poker, boker, SUIT);
return 1;
}

//在当前牌的基础上洗一次牌,主要用随机函数的奇偶性确定用左手洗还是右手洗
int wash_once(char *poker)
{
return rand()%2?wash_left_hand(poker):wash_right_hand(poker);
}

//在当前牌的基础上随机洗若干次牌,至少8次,最多18次
int wash_full(char *poker)
{
int i = 0, j = 0, k = 0;
i = rand() % 10 + 8;
printf("\nTry to wash %d times.\n", i);
for (j=0; j < i ; j++) k+=wash_once(poker);
return k;
}

int main(void)
{
char choice = 0, i = 0, j = 0; char poker[SUIT], card[16];
init(poker);
do {
printf("\n\tWelcome to My Poker Game!\n");
printf("\t0-Wash.\n");
printf("\t1-Show A.\n");
printf("\t2-Show B.\n");
printf("\t3-Show C.\n");
printf("\t4-Show D.\n");
printf("\tany other number-quit.\n");
printf("Your Choice?");
scanf("%d", &choice);
if(choice 4) break;
if(choice ==0) {
wash_full(poker);
continue;
}//end if
i = (choice - 1) * 11; //注意用11张牌,扣8张底牌
printf("His card is...\n");
for(j = i; j<i+11; j++) {
tell(poker[j], card);
printf("%s\t", card);
}//next
printf("\n");
}while(1);
return 0;
}


c语言编程用扑克牌洗牌和发牌
程序就不写了,写下大致流程 \/\/定义一个数组,或者列表,链表什么的随你 \/\/共52个元素 记作card[52]\/\/card代表扑克牌的类,有花色(color 枚举,0,1,2,3),点数(枚举 A~K)等属性 card tmp;for(int i=0;i<52;i++){ \/\/计算一个0到52之间的随机数x tmp=card[i];card[i]=...

C语言关于分扑克和洗扑克的问题
cards[53].num = 17;cards[52].type = 0;cards[53].type = 0;\/\/将54张牌打乱 srand((unsigned)time(NULL));for (int j = 0; j < 54; j++){ int k = rand()%54;struct card tempCard;tempCard = cards[j];cards[j] = cards[k];cards[k] = tempCard;} \/\/按需发牌 ...

纸牌游戏程序设计 c语言
先定义一个牌的数组A,这样如是一负牌,A是这样,A[54],前放入牌 那么开始发牌,54\/4=12……2 所以每个玩家都有可能得到13张牌,那么发牌前我们不得不洗牌,比如我们洗100次 for(int i=0;i<100;i++){ 生成一个0—53随机数a 再生成一个0-53的随机娄b if(a==b){ 重新生成 } els...

初学c语言,求一个自动发牌的程序。
} if(j==i) card[i] = temp; else i--; } for(i=0; i<52; i++)\/\/发牌输出 { if(i%5==0 && i!=0) printf("\\n"); if(i%13==0 && i!=0) printf("\\n\\n"); if(i%13==0) printf("第...

C语言中用结构体设计一个可以显示花色和编号的扑克牌,并实现对这副扑克...
include <iostream> include <ctime> using namespace std;\/\/全局变量,一副牌 \/\/ int g_cards[54] = { 0,1,2,3,\/\/ 3 10,11,12,13,\/\/ 4 20,21,22,23,\/\/ 5 30,31,32,33,\/\/ 6 40,41,42,43,\/\/ 7 50,51,52,53,\/\/ 8 60,61,62,63,\/\/ 9 70,71,72,73,\/\/ 10 80...

C++语言程序设计
cout<<endl<<"正在发牌..."<<endl;for(i=0;i<no1;){ a[j]=pk[i++];b[j]=pk[i++];if(j<=12){ c[j]=pk[i++];d[j]=pk[i++];} j++;} } void pack::disp(){ int i;cout<<"a的牌是:";for(i=0;i<no2;i++)cout<<a[i]<<",";cout<<"\\b;"<<endl...

如何用一维数组模仿扑克洗牌和发牌
n * 4 + 1]player2手上的第n张牌就是Joker[n * 4 + 2]player3手上的第n张牌就是Joker[n * 4 + 3]好了,洗牌和发牌都已经完成,剩下就是如何玩牌了,你没问,就不多说了。上面的伪代码应该能看懂吧?如果有问题,就用消息联系好了。你自己用编程语言去实现,不是什么大问题的。

C语言的发牌程序
2008-01-09 如何用c语言编写纸牌发牌程序 28 2011-12-01 求高手帮忙写一个c语言发牌程序 25 2013-11-03 c语言纸牌发牌程序源代码(附注释) 2 2018-01-06 c语言编程 自动发牌程序 2013-11-19 初学c语言,求一个自动发牌的程序。 5 2012-12-23 求一个c语言的洗牌发牌程序 11 2010-05-11 ...

C语言,写程序实现一堆扑克牌的排序。
for(i=51;i>1;i--)\/\/洗牌、发牌(0~12为第一人,13~25为第二人。。。){j=rand()%(i+1);t=a[i];a[i]=a[j];a[j]=t;} for(i=0;i<4;i++) \/\/排序 sort(&a[i*13]);for(i=0;i<52;i++){ switch(a[i]%13) \/\/不同点数按不同输出 { case 1:case 2...

求助一道C语言的题目. (速度)...
\/*一副扑克有52张牌,打升级时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。问题分析与算法设计 按照打升级的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的...

昔阳县13374963143: 用C语言编程《洗牌和发牌模拟》 -
吴唐哈力: 洗发牌模拟程序: 一副扑克牌有54张,为简单起见,撇去大小王不计,剩下52张扑克共4种花色:红桃(Heart),方块(Diamond),梅花(Club),黑桃(Spade),其ASCII码分别为3,4,5,...

昔阳县13374963143: 求一个c语言的洗牌发牌程序 -
吴唐哈力: 要求不是很明确,给你个演示程序,供你参考:#include <stdio.h> #include <time.h>#include <stdlib.h> void main(){int aim,i; int poker[52]={0};/*已发的牌在数组中,初始状态为0,表示没发过,置为1表示已发过,避免重复发放*/ srand((unsigned)...

昔阳县13374963143: 编写一个C语言程序,模拟洗牌和发牌的过程 -
吴唐哈力: #include #include struct POKER { int num; // A:1 , J:11 , Q:12 , K:13 int color; //黑1,红2,梅3,方4 }s[52]; int main() { int i,num,color; memset(s,0,sizeof(struct POKER)*52); srand((unsigned)time(0)); int count=0; while(count { num=rand()%13+1; ...

昔阳县13374963143: c语言编程用扑克牌洗牌和发牌 -
吴唐哈力: #include<stdio.h>#include<time.h>#include<stdlib.h> int main(){ int a[4][13],d,i,j,m,num=0,b[52]={0}; srand(time(NULL)); for(i=0;i<4;i++){ for(j=0;j<13;j++){ a[i][j]=j+1; }} for(;num<=52;){ d=rand()%52; for(m=0;m<num;m++){ if(d==b[m]){ break; } } if(m==...

昔阳县13374963143: 初学c语言,求一个自动发牌的程序. -
吴唐哈力: #include int card[52]; void Display(int i)//将0~51之间的数映射成牌号和花色 { switch(i%4) { case 0:printf("红桃");break; case 1:printf("黑桃");break; case 2:printf("梅花");break; case 3:printf("方块");break; } if(i/4+1 printf(...

昔阳县13374963143: 编写C语言程序,模拟将一副扑克牌54张随机分给4个人 (如何表达不同花色和大小,如何高效洗牌) -
吴唐哈力: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() {int poke[13][4],joker[2],last_four_card[4]; //定义四类十三张牌、双王int i,j,card,count,tank[54],player[20],computer[2][20];bool flag;srand(time(NULL)); //初始化随机种子for(i=...

昔阳县13374963143: 模拟扑克牌的洗牌过程 -
吴唐哈力: 貌似这样的洗牌方式毫无实际意义...两种方式各自连用两次的话都等于无操作.这里把牌看成 0~53 的数字. 操作指令是 s, i 组成的一行字符串.#include #define n 54 /* 总牌数...

昔阳县13374963143: 用c语言创建一个数组用来表示52张扑克牌,然后洗牌后输出,要求每行输出13张 -
吴唐哈力: 可以把花色直接定下来,每隔13个数为一种花色,然后用rand()函数随机输出1到13之间的数字.

昔阳县13374963143: 用C语言编写一个52张扑克牌随即洗牌的程序 并写上注释
吴唐哈力: 定义一个int p[52],里面的元素就是1~52,然后,直接 for循环i:1~52,每次随机一个数 m=rand()%52 ,swap(p[i],p[m]),就ok了

昔阳县13374963143: c语言编程 自动发牌程序 -
吴唐哈力: #include #include typedef struct { int num; // A:1 , J:11 , Q:12 , K:13 int color; //黑1,红2,梅3,方4 }POKER; void build(POKER* s) //生成扑克函数 { int i,count=0,num,color; while(count<52) { num=rand()%13+1; color=rand()%4+1; int flag_skip=0,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网