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

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-07
求高手帮忙编一个C语言模拟人工发牌+比大小的程序,要C语言的,并能够与电脑相互对战并判断输赢的,非常感谢

这是一个洗牌程序

#include
#include
#include
#include

#define N 52

int main(void)
{
int poker[N + 1];
int i, j, tmp, remain;

/* 初始化阵列 */
for (i = 1; i <= N; i++)
{
poker[i] = i;
printf("%d ", poker[i]);
}
printf("
");

srand(time(0));

/* 洗牌 */
for (i = 1; i <= N; i++)
{
j = rand() % N + 1;
tmp = poker[i];
poker[i] = poker[j];
poker[j] = tmp;
}

for (i = 1; i <= N; i++)
{
printf("%d ", poker[i]);
}

/* 判断花色 */
for (i = 1; i <= N; i++)
{
switch((poker[i] - 1) / 13)
{
case 0:
printf("桃"); break;
case 1:
printf("心"); break;
case 2:
printf("砖"); break;
case 3:
printf("梅"); break;
}

/* 数字 */
remain = poker[i] % 13;
switch(remain)
{
case 0:
printf("K "); break;
case 12:
printf("Q "); break;
case 11:
printf("J "); break;
default:
printf("%d ", remain); break;
}

if (i % 13 == 0)
printf("
");
}

return 0;
}

你应该分开提问,没人会一下为你做这么多题

#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");
}

自动发牌
一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。
*问题分析与算法设计
按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,...然后从52 张牌中随机的为每个人抽牌。
这里采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。
*程序与程序注释
#include<stdlib.h>
#include<stdio.h>
int comp(const void *j,const void *i);
void p(int b[],char n[]);
void main()
{
static char n[]={\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'T\',\'J\',\'Q\',\'K\',\'A\'};
int a[53],b1[13],b2[13],b3[13],b4[13];
int b11=0,b22=0,b33=0,b44=0,t=1,m,flag,i;
while(t<=52) /*控制发52张牌*/
{ m=random(52); /*产生0到51之间的随机数*/
for(flag=1,i=1;i<=t&&flag;i++) /*查找新产生的随机数是否已经存在*/
if(m==a) flag=0; /*flag=1:产生的是新的随机数
flag=0:新产生的随机数已经存在*/
if(flag)
{
a[t++]=m; /*如果产生了新的随机数,则存入数组*/
if(t%4==0) b1[b11++]=a[t-1]; /*根据t的模值,判断当前*/
else if(t%4==1) b2[b22++]=a[t-1]; /*的牌应存入哪个数组中*/
else if(t%4==2) b3[b33++]=a[t-1];
else if(t%4==3) b4[b44++]=a[t-1];
}
}
qsort(b1,13,sizeof(int),comp); /*将每个人的牌进行排序*/
qsort(b2,13,sizeof(int),comp);
qsort(b3,13,sizeof(int),comp);
qsort(b4,13,sizeof(int),comp);
p(b1,n); p(b2,n); p(b3,n); p(b4,n); /*分别打印每个人的牌*/
}
void p(int b[],char n[])
{
int i;
printf("\\n\\006 "); /*打印黑桃标记*/
for(i=0;i<13;i++) /*将数组中的值转换为相应的花色*/
if(b/13==0) printf("%c ",n[b%13]); /*该花色对应的牌*/
printf("\\n\\003 "); /*打印红桃标记*/
for(i=0;i<13;i++)
if((b/13)==1) printf("%c ",n[b%13]);
printf("\\n\\004 "); /*打印方块标记*/
for(i=0;i<13;i++)
if(b/13==2) printf("%c ",n[b%13]);
printf("\\n\\005 "); /*打印梅花标记*/
for(i=0;i<13;i++)
if(b/13==3||b/13==4) printf("%c ",n[b%13]);
printf("\\n");
}
int comp(const void *j,const void *i) /*qsort调用的排序函数*/
{
return(*(int*)i-*(int*)j);
}

mark

把要求说一下吧

程序规则???

  • 跪求C语言编程高手帮忙编个小程序,大一年级的
    答:for(j=0;j=65&&ch[j]<=90)a++;else if(ch[j]>=97&&ch[j]<=1220)b++;else if(ch[j]>=48&&ch[j]<=57)c++;else if(ch[j]==' ')d++;else e++;} tot=a+b+c+d+e;printf("字符串中共有:%d字符\n大写字母:%d个\n小写字母:%d个\n数字:%d个\n空格:%d个\n其他字...
  • 麻烦高手用c语言给编一个程序
    答:include <stdio.h> int joseph(int a[],int m, int n){ int i,j,k;i=-1;k=1;while(1){ for(j=0;j<n;){i=(i+1)%m;if(a[i]!=0)j++;} if(k==m)break;printf("%d ,", a[i]);a[i]=0;k++;} return a[i];} main(){ int a[1000]={0};int m,n,i;print...
  • 求高手帮忙写个C语言代码!!超级紧急!!
    答:int main(){float base=360000;int year=1;float get=50000;while(1){base=base+base*0.04;get=get+get*0.02;if(get>base){printf("\n%第%d年拿走%.2f, 余额:%.2f 已超过余额!",year+1,get,base);break;}base-=get;printf("\n%第%d年拿走%.2f, 余额:%.2f",year+1,get,...
  • [急求助]C语言程序编程题,请高手帮忙解答下!
    答:按照题目要求编写的程序如下(见图)
  • 求助编程高手,帮忙用C语言编个小程序
    答:已测试,测试环境VS2008,多字集是使用多字节字符集:#include <windows.h> include <stdio.h> LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam ){ switch(uMsg){ case WM_LBUTTONDOWN:MessageBox(hwnd,"鼠标左键已点击","Message",0);break;case WM_RBUTTONDOWN:M...
  • 请求高手帮忙编一个C语言程序
    答:用fopen("文件名","打开方式")打开文件 用fgets("字符串名称","读出元素数加1","文件指针")读出字符串 用strcmp(字符串1的名称,字符串2的名称)来比较大小。如果字符串1字母大则会得到一个大于零的返回值。用一个循环将两个字符串写入一个字符串,注意结尾符"\0"用fputs(字符串名,文件指针)...
  • c语言程序编写,求教高手!!!
    答:"%d",&a[i]);for(i=0;i<2;i++){ k=i;for(j=i+1;j<n;j++)if(a[j]<a[k]) k=j;temp=a[i];a[i]=a[k];a[k]=temp;} for(i=0;i<n;i++)printf("%4d",a[i]);return 0;} 你是只要将a[0],a[1]与最小的和次小的换对不,这样的话我的程序就可以了!
  • 各位高手帮帮忙,帮我做个C语言编程
    答:二楼第二个求的有错 12366 99 15 include <stdio.h> int count();//第二个问题 int fun3();//第三个问题 int isSushu(int k);void main(){ int i,record;double s=0;for(i=1;;i++){ s+=1.0/i;if(s>10)break;else record=i;} printf("%d\n",record);printf("%d\n",...
  • 请C语言编程达人帮忙编写一段程序
    答:flag=1;else l.p=l.p->next;} if(flag==1)return 1;else return 0;} void CreatLink(Linkemployee &l)//构造空链表 { l.head=l.tail=(Employee*)malloc(sizeof(Employee));l.head=l.tail=NULL;l.tot=0;} void AddInformation(Linkemployee &l){ l.current=(Employee*)malloc(size...
  • 求位C语言编程高手帮忙编程序?
    答:/*车辆信息结点*/ typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车站*/ typedef struct car{ CarNode *data; struct car *next; }QueueNode; typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟通道*/ /*...