难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结。
多多指教,共同进步。
问题:
要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌。在不看底牌的情况下,统计出三个玩家的炸弹数;
S(small)代表小王,B(big)代表大王
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
思路分析:
全部用数字代表牌的大小和花色,这样可以方便的进行存储分发,只有在最终的打印牌的时候再进行实际的花色和大小的转化;
如何随机发牌,如何统计炸弹数量?
1,牌库包括54张牌,用二维数组进行存储4行14列(行代表花色,列代表牌的大小)
1)难点在于如何存储大小王
因为接下来是进行随机发放给三个人的,所以随便用两行的第14列来存储大小王,(也用数字代表大小王),剩下的两行的第14列置为空即可;
2)定义布尔类型的二维数组,也是4行14列,把牌库中有牌的下标置成true;
2,随机生成牌
随机生成数字0—3来控制行数,即牌的花色;
随机生成数字0—14来控制列数,即牌的大小;
3,随机分发牌
1)随机生成数字1—3,对3求余,0代表第一个人,1代表第二个人,2代表第三个人;
2)判断是否已经发出去了(用布尔数组进行判断,true代表没有发出去)
用一位数组存储发出去的花色,发出去后用布尔数组把下标置成false;同时计算发出去牌的数量;
3)同理为第二,第三个人随机发牌;
4)条件判断,当已经发出去51张牌时,跳出循环;
4,打印生成的牌和底牌
1)遍历布尔型数组和此时的牌库,找出下标和牌的大小,即可得到底牌;
2)用存储花色的一位数组和存储牌大小的一位数组进行遍历求生成的牌的花色和大小;
5,遍历统计每个人的炸弹数量
1)先统计大小王的个数,再进行双重循环遍历其他牌是否存在用炸弹;
2)同理,统计第二个人,第三个的;
代码实现: