猛牛哥
记录网络点滴生活

牛牛牌大小计算

本段牛牛牌大小计算程序可以计算扑克游戏“牛牛”(又称“斗牛”)的牌面大小,牌越大,函数返回值越大。

程序设计思想:扑克牌比大小的顺序为:牛牛》牛几》点数大小》花色大小。所以可以设计一个有4种权重的数字来表示结果大小。而十进制数字就符合这种表示方式,当然,十六进制的也可以。我刚开始因为习惯的问题选择了10进制。4个不同级别需要4种不同权重,即至少需要4个进位。其中牛牛,牛几,花色的数值个数都是10以内,只分配一位数即可,而点数大小(0-13)可能是2位数,所以给它分配2位数的进位(后来才想到如果采用16进制表示则没有这个问题)。这样一共需要5位10进制数字表示牌的大小,不同大小级别采用不同的数量级别。例如,有牛的牌,结果值就加10000,剩下的2张牌点相加的结果是个1位数,他的大小乘以1000加到结果值中,如果这2张牌也是牛,结果值就再加10000,这样最大的牛牛牌就是20000起。然后比较牌点大小,把牌排序后把最大的一张牌的点数乘以10加到结果值中。最后把最大的那张牌的花色数字(0123)加进去。这样就得到了一副牌的大小。例如:20123代表的牌是牛牛,最大的一张牌点是Q(12),他的花色是黑桃(用3表示);15092代表的是牛5,最大一张牌是9,花色是红桃(用2表示);121代表的牌是没牛,最大一张牌是12,花色是梅花(用数字1表示)。

Func _niuniu($_data)
If UBound($_data) < 5 Then Return SetError(1, 1, 0)
Local $_dianshu = 0, $_data_b[5], $_dianshu_b = 0, $_data_c[5]
For $_i = 0 To 4
$_data_c[$_i] = Mod($_data[$_i], 16)
$_data_b[$_i] = $_data_c[$_i]
If $_data_b[$_i] > 10 Then $_data_b[$_i] = 10
$_dianshu_b += $_data_b[$_i];点数总和,用于有牛时计算牛几
Next
;有牛的,点数+10000
For $_i = 0 To 2
For $_j = $_i + 1 To 3
For $_k = $_j + 1 To 4
If Mod($_data_b[$_i] + $_data_b[$_j] + $_data_b[$_k], 10) == 0 Then
$_dianshu = Mod($_dianshu_b, 10)
If $_dianshu == 0 Then
$_dianshu = 10000;牛牛
Else
$_dianshu *= 1000
EndIf
$_dianshu += 10000
ExitLoop 3
EndIf
Next
Next
Next
;~     _show_console(“dianshu a:” & $_dianshu)
$_data_d = _paixu($_data_c, 0, 1)
$_dianshu += $_data_c[$_data_d[0]] * 10;点数中加上最大一张牌的因素
$_dianshu += Int($_data[$_data_d[0]] / 16)
;~     _show_console(“dianshu b:” & $_dianshu)
Return $_dianshu
EndFunc   ;==>_niuniu

赞(0) 打赏
猛牛哥原创:猛牛哥的博客 » 牛牛牌大小计算

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏