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

C语言斗地主发牌程序,急求,谢谢,第1张

这是以随机的形式发牌的。希望能帮到你。

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) } }

我试着做过类似的程序,判断出牌是否符合规则的部分我已经做出来了。方法如下,仅供你参考。

一、自已做一个“牌”控件,它有一个属性 “值”。例如:牌A的值为1,J为11,Q为12,K为13,小王14,大王15 ……

二、做多个字符型数组。数组的每个元素均为合法的出牌可能,即,不在数组中的出牌是不合法的。如单牌数组,它有15个元素,分别是每个单牌的值。

三、在玩家选牌(即单击某张牌)的事件里,扫描一下所有被选中的牌,得到选中牌的值的顺序。

四、将得到的值顺序的这个字符串与二步中所创建数组的所有元素比较,若有相同则说明所选的牌符合规则。

例子:

For i = 1 To 13

DuiZi(i) = Trim(Hex(i)) &Trim(Hex(i)) '对子牌的所有可能,两个王属于炸d牌,不属于对子。

Next i

至于这里为什么要把数字转化成十六进制,那是因为当我选择了比如Q这张牌时,它的值为12,和选择了A、2这两张牌时产生的选牌字符串是一样的,会产生混淆,转化成十六进制后,Q的值是十六进制数“C”,而A、2这两张牌的值的字符形式还是“12”。

判断函数:

Public Function IsRight(ByVal SelectedCard As String) As Boolean

IsRight = False

For i = 1 To 13

If SelectedCard =DuiZi(i) Then

IsRight = True

Card_Style = CS_DUIZI

Exit Function

End If

Next i

End Function

当然,这只是判断函数的一部分,你可以把所有判断都写到一个函数里,这样,当你的函数返回真的时候,你不但知道你所选的牌是符合要求的,还可以知道它是什么类型的牌。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/11484573.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存