#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=0i<SIZEi++)
{
MARK:pokerRand[i] = rand()%52
for (j=0j<ij++)
{
if (pokerRand[i] == pokerRand[j])
{
goto MARK
}
}
}
}
//给4个玩家发牌
void Palyer(int *pokerRand)
{
int i, j
int count = 0
for (j=0j<NUMj++)
{
for (i=0i<PLAYERi++)//轮流发牌
{
man[i].manNum[j] = pokerRand[count++]
}
}
}
//统计玩家手中的牌
void Process(int *countA, int *countB, int *countC, int *countD)
{
int i, j
for (i=0i<PLAYERi++)
{
countA[i] = 0
countB[i] = 0
countC[i] = 0
countD[i] = 0
for (j=0j<NUMj++)//统计四个玩家手中的牌
{
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=0i<PLAYERi++)
{
printf("\n第%d人 :\n", i+1)//开始输出第i个玩家
printf("%c:\t", 6)//输出第i个玩家的黑桃牌
for (j=0j<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=0j<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=0j<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=0j<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")
}
发牌方法:一副牌,留三张底牌,其他发给三家,从庄家开始按顺时针方向依次发牌。
叫牌方法:首先系统翻出一张明牌,获得明牌的人开始先叫牌,每人只能叫一次,叫牌可以:1分、2分、 3分或不叫,叫完后叫的最大的为地主。
出牌规则:首先将三张底牌交给地主,三张底牌所有人都能看到。由地主开牌,然后按逆时针顺序依次出牌,论到你跟牌时,你可选择PASS或按规则出牌。直至某一方牌出完就结束此局。
扩展资料:
相关技巧
1、算牌,这里涉及到了一个智力问题和习惯问题,有些人没有算牌的习惯,就不能得以精进,只要有了这种习惯,就能在这方面得以提升,先从断张,以及从大至小的牌逐一延升。
2、打牌,合理的利用自己的炸d,多副炸d就得先看好哪些炸是牺牲作为增翻的,哪些是为自己或盟友争取上手机会磨竖的,如果瞎隐大是为盟友争取机会的,一定要把传牌算好,以防传入敌手。
3、堵牌,先看清自己的位置 ,如果是闲家就得先看清自己是打主力,还是打阻击,如果是主力就得把q口位让给盟友,如果是阻击就得尽量舍身,得以让盟军保存实力,顶出携碧庄家手上的可能大牌!
4、赌牌,注意,上面是堵,这里是赌,也是就机率算牌,在尽可能大的机率上决定自己的出牌是否被对方炸掉,以及有可能被反炸。
这是以随咐旁机的形式发牌的。希望能帮到你。int main(){int a[60] int b[60] int w = 0 int wi,wj,wii int i,j,index,x=0,m for(i=0i<54i++)a[i]=i+1 srand((unsigned)time(0)) for(i=0i<54){index=rand()%54 if(a[index]!=0){b[i]=a[index] //printf("%d ",b[i]) a[index]=0 ++i }}printf("\n说明:\n") printf("*******************\n") printf("**红桃 %c ",3) printf("**\n") printf("**方块 %c ",4) printf("**\n") printf("**梅花 %c ",5) printf("**\n") printf("**黑桃 %c ",6) printf("**\n") printf("**大王 A **\n**小王 a **\n") printf("*******************\n") printf("\n请输入打牌人数:薯简段\n") scanf("%d",&w) wi = 54/w wj = 54%w //printf("%d,%d",wi,wj) for (j = 0j <wj++){m = 0 printf("\n\n第%d个人的数誉牌\n",j+1) wj -- if (wj>=0)wii = wi + 1 elsewii = wi//红桃printf("红桃 %c ",3) printf(":") for(i = j*wiii<(j+1)*wiii++){if (b[i]<=13&&b[i]>0){m++ if (b[i]==11)printf("J ") else if (b[i]==12)printf("Q ") else if (b[i]==13)printf("K ") elseprintf("%d ",b[i]) }} //方块printf("\n方块 %c ",4) printf(":") for(i = j*wiii<(j+1)*wiii++){if (b[i]<=26&&b[i]>13){m++ b[i] = b[i]-13 if (b[i]==11)printf("J ") else if (b[i]==12)printf("Q ") else if (b[i]==13)printf("K ") elseprintf("%d ",b[i]) }} //梅花printf("\n梅花 %c ",5) printf(":") for(i = j*wiii<(j+1)*wiii++){ if (b[i]<=39&&b[i]>26){m++ b[i] = b[i]-26 if (b[i]==11)printf("J ") else if (b[i]==12)printf("Q ") else if (b[i]==13)printf("K ") elseprintf("%d ",b[i]) }}//黑桃printf("\n黑桃 %c ",6) printf(":") for(i = j*wiii<(j+1)*wiii++){if (b[i]<=52&&b[i]>39){m++ b[i] = b[i]-39 if (b[i]==11)printf("J ") else if (b[i]==12)printf("Q ") else if (b[i]==13)printf("K ") elseprintf("%d ",b[i]) }}//大小王printf("\n大小王 A or a :") for(i = j*wiii<=(j+1)*wiii++){if (b[i]==53){m++ printf("A ") }if (b[i]==54){m++ printf("a ") }}printf("\n总共:%d张牌!!!",m) } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)