编写一个斗地主洗牌发牌的程序,要求按照斗地主的规则完成洗牌发牌的过程。
规则描述:
每张牌由花色和数字组成(包括JQKA),还有大王、小王。
将54张牌打乱顺序,有3位玩家参与游戏,每人轮流一次摸一张牌,剩余3张作为底牌。最后,打印每人手中的纸牌和底牌。
实现思路:
1.生成54张牌
(1)创建两个集合,一个存储花色,一个存储数字。
(2)创建一个map集合,对每一张牌设置一个编号,然后通过嵌套循环组合成52张牌,
(3)最后再单独添加大王和小王。
2.洗牌:打乱排列顺序
创建一个数字集合(list),使用Collections.shuffle();
3. 发牌
(1)创建四个数字集合,分别代表3个玩家和底牌
(2)通过循环方式发牌。按照%3的余数作为判断标准。底牌就是编号大于51的牌
(3)创建四个字符串集合,把数字牌面转化成对应的字符串牌面,通过循环,将map集合对应的字符串添加到字符串集合中
4. 打印
代码实现:
package jiHe;import java.util.*;public class DouDiZhuText {public static void main(String[] args) {System.out.println("===========================生成牌================================");ArrayList<String> color = new ArrayList<String>();color.add("黑桃");color.add("红桃");color.add("方便");color.add("梅花");ArrayList<String> num = new ArrayList<String>();for(int i=2;i<=10;i++)num.add(i+"");num.add("J");num.add("Q");num.add("K");num.add("A");HashMap<Integer,String> map = new HashMap<Integer,String>();int index=0;//设置初始的编号for(String thisnum : num) {for(String thiscolor : color) {map.put(index++, thiscolor+thisnum); }} map.put(index++, "小王");map.put(index++, "大王");System.out.println(map);System.out.println("============================洗牌================================");ArrayList<Integer> cards = new ArrayList<Integer>();for(int i=0;i<=53;i++)cards.add(i);//按顺序排列的0---53个数字Collections.shuffle(cards);//打乱顺序System.out.println(cards); System.out.println("=======================生成玩家和底牌并发牌==========================");ArrayList<Integer> p1 = new ArrayList<Integer>();ArrayList<Integer> p2 = new ArrayList<Integer>();ArrayList<Integer> p3 = new ArrayList<Integer>();ArrayList<Integer> dp = new ArrayList<Integer>();for(int i=0;i<cards.size();i++) {if(i>=51)dp.add(cards.get(i));else if(i%3==1)p1.add(cards.get(i));else if(i%3==2)p2.add(cards.get(i));elsep3.add(cards.get(i));}Collections.sort(p1);Collections.sort(p2);Collections.sort(p3);Collections.sort(dp);ArrayList<String> sp1 = new ArrayList<String>();ArrayList<String> sp2 = new ArrayList<String>();ArrayList<String> sp3 = new ArrayList<String>();ArrayList<String> sdp = new ArrayList<String>();for(Integer key : p1) {sp1.add(map.get(key));}for(Integer key : p2) {sp2.add(map.get(key));}for(Integer key : p3) {sp3.add(map.get(key));}for(Integer key : dp) {sdp.add(map.get(key));}System.out.println("玩家一:"+sp1);System.out.println("玩家二:"+sp2);System.out.println("玩家三:"+sp3);System.out.println("底牌:"+sdp);}}
Java之棋牌游戏——编写一个斗地主洗牌发牌的程序 要求按照斗地主的规则完成洗牌发牌的过程