前言:欢迎转载,但请注明出处http://blog.csdn.net/jiadabin,因为原文可能会改动部分不足,最好从原文处阅读,同时也欢迎大家来点评丶吐槽!让我们大家共同进步......
前边一篇文章介绍了斗地主一般的发牌思路,今天我就分享一下有点难度的的分配发牌算法,欢迎各位提意见!
需求是这样的:每局3个玩家手中至少有一个玩家手中有一个炸弹并且是随机发出的。
解决思路是这样的:
其实54张牌我们可以定义成一个这样的数组如下(其中元素为十六进制的数,括号内为十进制数)
static int card_arr[] = {
0x01(1 方块A), 0x11(17 梅花), 0x21(33 红桃), 0x31(49 黑桃),//A
0x02(2 方块2), 0x12(18 梅花), 0x22(34 红桃), 0x32(50 黑桃),//2
0x03(3 方块3), 0x13(19 梅花), 0x23(35 红桃), 0x33(51 黑桃),//3
0x04(4 方块4), 0x14(20 梅花), 0x24(36 红桃), 0x34(52 黑桃),//4
0x05(5 方块5), 0x15(21 梅花), 0x25(37 红桃), 0x35(53 黑桃),//5
0x06(6 方块6), 0x16(22 梅花), 0x26(38 红桃), 0x36(54 黑桃),//6
0x07(7 方块7), 0x17(23 梅花), 0x27(39 红桃), 0x37(55 黑桃),//7
0x08(8 方块8), 0x18(24 梅花), 0x28(40 红桃), 0x38(56 黑桃),//8
0x09(9 方块9), 0x19(25 梅花), 0x29(41 红桃), 0x39(57 黑桃),//9
0x0A(10 方块10), 0x1A(26 梅花), 0x2A(42 红桃), 0x3A(58 黑桃),//10
0x0B(11 方块J), 0x1B(27 梅花), 0x2B(43 红桃), 0x3B(59 黑桃),//J
0x0C(12 方块Q), 0x1C(28 梅花), 0x2C(44 红桃), 0x3C(60 黑桃),//Q
0x0D(13 方块K), 0x1D(29 梅花), 0x2D(45 红桃), 0x3D(61 黑桃),//K
0x0E(14小王), 0x0F(15大王)
};
54张牌有了,下边我们针对这样的一副牌可以看出:1-13个数字就可以代表A-K了,所以我们就可以以这为基数,留下炸弹牌的基数,那么他另外的三张同值牌也就有了。
用一句来说也就是:先随机出1-N个炸弹,将炸弹的基数预留出来,在随机出每个玩家应该分配的炸弹数,把炸弹发给玩家,后其他牌随机发出即可。
下边请看具体代码: