导航:首页 > 编程语言 > 编程发牌洗牌程序

编程发牌洗牌程序

发布时间:2022-10-31 07:51:35

‘壹’ 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]=card[x];
card[x]=tmp;//其实就是交换两张牌
}
//循环下来肯定每张牌都被交换过,有它自己的新位置,也有可能凑巧还在原来的位置

//最后按下标顺序分四堆

‘贰’ C语言编程题-洗牌

我解决了这个问题,程序如下:
注意:n不能大于500,否则你就得改数组A和B的大小;
#include <stdio.h>
int A[1000],B[500];

void main()
{
int m,n,i;
int flag(int);
void exchange(int);

printf("input n:");
scanf("%d",&n);
for(i=0,m=n*2;i<m;i++) A[i]=i;
i=0;
do {exchange(n); i++;}
while(flag(m));
printf("Times: %d",i);
}

void exchange(int n)
{
int i;
for(i=0;i<n;i++)
B[i]=A[i+n];
for(i=n-1;i>=0;i--)
A[i*2+1]=A[i];
for(i=0;i<n;i++)
A[i*2]=B[i];
}

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

实现了2副牌的发牌,和每个人的牌和底牌
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

struct CARD //牌
{
char suit[10]; /*花色*/
char face[10]; /*牌面*/
};
enum { posA, posB, posC, posD};//定义好每个人的位置
struct Postion
{
struct CARD getcard[25];//每人获得的牌
};
struct Postion postion[4];//分配四个位置

struct CARD leftCard[8]; //底牌
struct CARD card[54]; //54张牌
char *suit[]={"Spades","Hearts","Clubs","Diamonds"};
char *face[] = {"A","2","3","4","5","6","7","8","9",
"10","jack","Queen","King"};
/* 函数功能:将52张牌的顺序打乱,
函数参数:结构体数组wCard,表示52张牌
函数返回值:无
*/
void Shuffle(struct CARD *wCard)
{
int i,j;
struct CARD temp;

for (i=0; i<54; i++)
{
j=rand()%54;
temp=wCard[i];
wCard[i]=wCard[j];
wCard[j]=temp;
}
}
/*函数功能:发牌结果
函数参数:结构体数组wCard,表示有54张牌
函数返回值:无
*/
void Deal(struct CARD *wCard)
{
int i,aidx=0,bidx=0,cidx=0,didx=0;

Shuffle(card);//将牌打乱
/*************发第一副牌,只发50张,分别分给A,B,C,D四个位置 4张留底**************/
// 第一次发完50张后,A,B多一张,所以下面第二次让C,D排在前面,两次发完刚好各40张 */
for (i=0; i<50; i++)//发牌数
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==1)
postion[posB].getcard[bidx++]=wCard[i];
else if(i%4==2)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==3)
postion[posD].getcard[didx++]=wCard[i];
}

/**********剩下的四张作为底牌*********/
leftCard[0]=wCard[i++];
leftCard[1]=wCard[i++];
leftCard[2]=wCard[i++];
leftCard[3]=wCard[i++];

Shuffle(card);//再次将牌打乱
/*************发第二副牌,也只发50张,分别分给A,B,C,D四个位置,4张留底,一共8张底**************/
for (i=0; i<50; i++)//发牌数
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==1)
postion[posD].getcard[didx++]=wCard[i];
else if(i%4==2)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==3)
postion[posB].getcard[bidx++]=wCard[i];
}

/**********剩下的四张作为底牌,这样就一共为8张底牌*********/
leftCard[4]=wCard[i++];
leftCard[5]=wCard[i++];
leftCard[6]=wCard[i++];
leftCard[7]=wCard[i++];

}

/* 函数功能:将52张牌按黑桃、红桃、草花、方块花色顺序,面值按A~K顺序排列
函数参数:结构体数组wCard,表示不同花色和面值的52张牌
指针数组wFace,指向面值字符串
指针数组wSuit,指向花色字符串
函数返回值:无
*/
void FillCard(struct CARD wCard[],char *wSuit[], char *wFace[])
{
int i;

for (i=0; i<52; i++)
{
strcpy(wCard[i].suit, wSuit[i/13]);
strcpy(wCard[i].face, wFace[i%13]);
}
// wCard[53].face="Big"; //大小王
strcpy(wCard[52].suit, "Small");
strcpy(wCard[52].face, "ghost");
strcpy(wCard[53].suit, "Big");
strcpy(wCard[53].face, "ghost");
}

void print(char ch)//输出牌
{
int i;
switch(ch)
{
case 'A': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posA].getcard[i].suit, postion[posA].getcard[i].face);
}
break;
case 'B': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posB].getcard[i].suit, postion[posB].getcard[i].face);
}
break;
case 'C': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posC].getcard[i].suit, postion[posC].getcard[i].face);
}
break;
case 'D': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posD].getcard[i].suit, postion[posD].getcard[i].face);
}
break;
}

}

void outputLeftCard()//输出底牌
{
int i;
for(i=0; i<8; i++)
printf("%10s %5s\n", leftCard[i].suit, leftCard[i].face);
}

int main()
{
char pos;
srand(time(NULL));
FillCard(card,suit,face);
//Shuffle(card);
Deal(card);

printf("Please choose your position(A、B、C、D):");
scanf("%c", &pos);
print(pos);//输出你所在位置的牌
/**********下面输出的是,除了你之外其他人的牌**********/
if(pos !='A')
{
printf("A:\n");
print('A');
}
if(pos !='B')
{
printf("B:\n");
print('B');
}
if(pos !='C')
{
printf("C:\n");
print('C');
}
if(pos !='D')
{
printf("D:\n");
print('D');
}

printf("底牌为:\n");
outputLeftCard();//输出底牌

return 0;
}

‘肆’ 用VB编程写一个程序 自动发牌系统

相信你也找过一些这类的代码,可能你用过的方法中就有可以用的,变通一下方法就好了!提供方法给你,仅供参考!

VB还可以用MAPI进行,核心控件:MAPI会话控件和MAPI消息控件。MAPI会话控件用于建立和控制一个Microsoft Mail会话,MAPI消息控件用于创建和收发邮件消息。此外,程序必须运行在采用遵从MAPI的消息系统(如:Microsoft Exchange、Microsoft Mail、Outlook等)的环境中。

编程需要将MAPI控件加入VB工具箱。全名是:"Microsoft MAPI Controls"。加入后,工具箱中将添上MAPI会话控件和MAPI消息控件的图标。

下面将以简单的VB程序为例,介绍发送邮件程序编制方法。

邮件发送程序的基本处理过程是:根据用户输入信息组成邮件,然后使用MAPI消息控件的Send方法将邮件发出。编程步骤如下:

1、新建一个VB项目。

2、将缺省窗体Form1的Caption属性设置为"发送邮件"。

3、将MAPI控件加入VB工具框。

4、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。

5、在Form1中加入三个文本框控件,将它们的Name属性分别设置为txtSendTo、txtSubject、txtMessage,并将txtMessage的Multiline属性设置为True。这三个文本框控件将分别用于填写邮件的收件人、主题和内容。

‘伍’ c语言编程 扑克发牌

头文件:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>

初始化 洗牌 发牌 程序没有声明
int b,c,i,q=0,a[52];
int chu();
int xipai();
int fapai(int);

int型函数没有返回值。添加return(0)。

发牌次序不合实际。

做了一点改动。fapai的参数减少了一个,只剩下p作为总牌数。
q定义为全局变量,作为计数当前发牌人序号。
发牌程序更改,i每次增加4,实现跳序发牌。末尾增加q++。
fapai(int p)
{
for(i=q;i<p;i=i+4)
{
b=(a[i]-1)/13;
c=a[i]-b*13;
switch(b)
{
case 0 :printf("%c%d ",3,c);break;
case 1 :printf("%c%d ",4,c);break;
case 2 :printf("%c%d ",5,c);break;
case 3 :printf("%c%d ",6,c);break;
default:printf("error\n");
return(0);
}
}
q++;
}//发牌程序

主函数调用fapai函数时,p值赋52即扑克总数。
void main()
{
chu(); //调用赋初值程序
xipai(); //调用洗牌程序
printf("第一位的牌是:\n");
fapai(52); //调用发牌程序,给第一位发牌
printf("\n第二位的牌是:\n");
fapai(52); //调用发牌程序,给第二位发牌
printf("\n第三位的牌是:\n");
fapai(52); //调用发牌程序,给第三位发牌
printf("\n第四位的牌是:\n");
fapai(52); //调用发牌程序,给第四位发牌
printf("\n");
}

个人意见,欢迎交流。

‘陆’ 初学c语言,求一个自动发牌的程序。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
intcard[52];
voidDisplay(inti)//将0~51之间的数映射成牌号和花色
{
switch(i%4)
{
case0:printf("红桃");break;
case1:printf("黑桃");break;
case2:printf("梅花");break;
case3:printf("方块");break;
}
if(i/4+1<11)
printf("%d ",i/4+1);
elseif(i/4+1==11)
printf("%c ",'J');
elseif(i/4+1==12)
printf("%c ",'Q');
elseif(i/4+1==13)
printf("%c ",'K');
}
voidInitCard()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)//随机生成52个数
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}

for(i=0;i<52;i++)//初始化输出
{
if(i%5==0&&i!=0)printf(" ");
Display(card[i]);
}
}
voiddeal()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}

for(i=0;i<52;i++)//发牌输出
{

if(i%5==0&&i!=0)printf(" ");
if(i%13==0&&i!=0)printf(" ");
if(i%13==0)
printf("第%d个玩家的牌: ",i/13+1);

Display(card[i]);
}
}
intmain(void)
{
intkey=0;
printf("================主菜单============== ");//菜单
printf("=============1、初始化扑克========= ");
printf("=============2、洗牌、发牌========= ");
printf("=============3、退出============== ");

while(key!=3)//选择菜单
{
printf("请输入菜单功能编号:");
scanf("%d",&key);

switch(key)
{
case1:InitCard();break;//初始化
case2:deal();//发牌
default:break;
}

printf(" ");
}
return0;
}

代码如上,测试结果:

基本思想就是,只要随机生成的数,发给谁都一样;所以初始化和发牌时候先随机生成52个不同的数0~51,初始化时,直接输出就可以了。发牌时按13一组一次分给一个人就可以了。

‘柒’ 求高手帮忙写一个c语言发牌程序

#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define PLAYER 4//玩家人数
#define NUM 13//玩家拿牌数
#define SIZE 52//所有牌数

//声明函数
void PokerRand(int *pokerRand);
void Palyer(int *pokerRand);
void Process(int *countA, int *countB, int *countC, int *countD);
void Output(int *poker, int *countA, int *countB, int *countC, int *countD);

struct PokerGame
{

int A[NUM];//记录玩家手中的黑桃牌
int B[NUM];//记录玩家手中的红桃牌
int C[NUM];//记录玩家手中的梅花牌
int D[NUM];//记录玩家手中的方片牌
int manNum[NUM];//记录玩家手里所有的牌

}man[PLAYER];

//随机产生52张牌
void PokerRand(int *pokerRand)
{
int i, j;

srand((unsigned)time(NULL));

for (i=0; i<SIZE; i++)
{
MARK: pokerRand[i] = rand()%52;
for (j=0; j<i; j++)
{
if (pokerRand[i] == pokerRand[j])
{
goto MARK;
}
}
}
}

//给4个玩家发牌
void Palyer(int *pokerRand)
{
int i, j;
int count = 0;

for (j=0; j<NUM; j++)
{
for (i=0; i<PLAYER; i++)//轮流发牌
{
man[i].manNum[j] = pokerRand[count++];
}
}
}

//统计玩家手中的牌
void Process(int *countA, int *countB, int *countC, int *countD)
{
int i, j;

for (i=0; i<PLAYER; i++)
{
countA[i] = 0;
countB[i] = 0;
countC[i] = 0;
countD[i] = 0;
for (j=0; j<NUM; j++)//统计四个玩家手中的牌
{
if ((man[i].manNum[j] >= 0) && (man[i].manNum[j] < 13))//黑桃
{
man[i].A[ countA[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 26)//红桃
{
man[i].B[ countB[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 39)//梅花
{
man[i].C[ countC[i]++ ] = man[i].manNum[j];
}
else//方片
{
man[i].D[ countD[i]++ ] = man[i].manNum[j];
}
}
}
}

//输出
void Output(int *poker, int *countA, int *countB, int *countC, int *countD)
{
int i, j;

printf("扑克牌自动发牌 %c(黑) %c(红) %c(梅) %c(方):\n", 6, 3, 5, 4);

for (i=0; i<PLAYER; i++)
{
printf("\n第%d人 :\n", i+1);//开始输出第i个玩家

printf("%c:\t", 6);//输出第i个玩家的黑桃牌
for (j=0; j<countA[i]; j++)
{
if (poker[ man[i].A[j] ] == 10)//假如等于10,以%d格式输出
{
printf("%4d", poker[ man[i].A[j] ]);
}
else//否则以%c格式输出
{
printf("%4c", poker[ man[i].A[j] ]);
}
}
printf("\n");

printf("%c:\t", 3);//输出第i个玩家的红桃牌
for (j=0; j<countB[i]; j++)
{
if (poker[ man[i].B[j] ] == 10)
{
printf("%4d", poker[ man[i].B[j] ]);
}
else
{
printf("%4c", poker[ man[i].B[j] ]);
}
}
printf("\n");

printf("%c:\t", 5);//输出第i个玩家的梅花牌
for (j=0; j<countC[i]; j++)
{
if (poker[ man[i].C[j] ] == 10)
{
printf("%4d", poker[ man[i].C[j] ]);
}
else
{
printf("%4c", poker[ man[i].C[j] ]);
}
}
printf("\n");

printf("%c:\t", 4);//输出第i个玩家的方片牌
for (j=0; j<countD[i]; j++)
{
if (poker[ man[i].D[j] ] == 10)
{
printf("%4d", poker[ man[i].D[j] ]);
}
else
{
printf("%4c", poker[ man[i].D[j] ]);
}
}
printf("\n");
}
}

void main(void)
{
int countA[PLAYER] = { 0 };//记录4个玩家持黑桃牌数
int countB[PLAYER] = { 0 };//记录4个玩家持红桃牌数
int countC[PLAYER] = { 0 };//记录4个玩家持梅花牌数
int countD[PLAYER] = { 0 };//记录4个玩家持方片牌数
int pokerRand[SIZE] = { 0 };//存放随机产生52张牌

int poker[SIZE] = {65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,};

PokerRand(pokerRand);//洗牌

Palyer(pokerRand);//发牌

Process(countA, countB, countC, countD);//整牌

Output(poker, countA, countB, countC, countD);//亮牌

printf("\n\n\n");

system("pause");
}

‘捌’ C语言斗地主发牌程序,急求,谢谢

我爱吃的水果有很多,而我最爱吃的是葡萄。;;细雨如丝,茂密的葡萄藤贪婪地吮吸着春天的甘露。它们伸展着嫩绿的枝条,一片片掌形的叶子在雨雾中欢笑着。;;;;清明节过后,葡萄藤长出了一粒粒小籽,这就是葡萄花的花苞。过了几天,葡萄花开了,花小小的,白中带有一点黄,像一团团雪花。风把香气吹得四处飘散,引来了一群群辛勤的蜜蜂和翩翩起舞的蝴蝶。我走到葡萄藤下,闻到一阵清香,使人感到心旷神怡。;;;;春末夏初时,葡萄花纷纷凋谢,开花的地方又长出一粒粒小籽,这就是葡萄了。葡萄先是嫩绿色的,上面就像蒙上了一层“白霜”,粉扑扑的。然后渐渐变成紫色,一个个绿中透紫的珍珠,挂在葡萄藤上,闪着诱人的亮光。最后葡萄已经成熟了,一串串亮晶晶、紫红色的葡萄,挂满了葡萄藤,让人真想尝一尝。;;;摘下一颗葡萄,剥去它的表皮,便看见一颗诱人的晶球。把它放进嘴里,舌尖触到葡萄那晶莹透明的果肉,使人感到细腻。没有熟透的葡萄甜中带酸,熟透了就甜滋滋的,叫人越吃越想吃。;;;葡萄不但营养丰富,含有多种维生素,是水果中的佳品,而且还有一定的医药价值。;;;我真喜爱葡萄啊。

阅读全文

与编程发牌洗牌程序相关的资料

热点内容
国二考试调用编译器运算选择题 浏览:748
同济大学高等数学pdf 浏览:232
延时的宏命令怎么设置 浏览:594
数据库有哪些加密 浏览:207
改之理反编译注册教程 浏览:389
什么是编译程序和翻译程序 浏览:205
python课程心得总结 浏览:17
派派中怎么看对方在哪个服务器 浏览:794
xp配置java环境变量配置 浏览:7
python中1到100怎么算 浏览:765
小度我想看程序员 浏览:505
bs刷装备建立后文件夹没有 浏览:79
找漫画看应该下载什么app 浏览:182
如何在vps上搭建自己的代理服务器 浏览:744
nginxphp端口 浏览:403
内脏pdf 浏览:152
怎么看云服务器架构 浏览:86
我的世界国际服为什么登不进服务器 浏览:998
微盟程序员老婆 浏览:932
intellij创建java 浏览:113