首先我們得知道鬥地主的規則,這裏小編就不介紹規則了,説下如何寫代碼的思路吧
一.準備牌
-
定义Map集合用来存储 牌索引 扑克牌
//定义Map集合用来存储 牌索引 扑克牌 Map<Integer,String> map =new HashMap<>();
-
定义list集合用来存储 牌索引
//定义list集合用来存储 牌索引 List<Integer> list=new ArrayList<>();
-
定义花色数组,定义数字数组
//定义花色数组 String[] huas="♥-♠-♣-♦".split("-"); //定义数字数组 String[] nums="2-A-K-Q-J-10-9-8-7-6-5-4-3".split("-");
-
循环拼接扑克牌 将牌索引和扑克牌放入到map集合中
int index=2; for (String num:nums){ for (String hua:huas){ String poker=hua+num; map.put(index, poker); index++; } }
-
将牌索引放入到list集合中
//将牌索引放入到list集合中 for (int i = 0; i < 54; i++) { list.add(i); }
-
单独添加大王和小王(用的笑臉表示)
//单独添加大王和小王 map.put(0,"大😊"); map.put(1,"小😊");
二、洗牌(這裏直接使用Collections中的shuffle()方法)
//將list集合中的數據打亂順序,相當於洗牌
Collections.shuffle(list);
Collections.shuffle(list);
三、發牌
-
三个玩家 三个集合 底牌一个集合
//三个玩家 三个集合 底牌一个集合 List<Integer> player1 =new ArrayList<>(); List<Integer> player2 =new ArrayList<>(); List<Integer> player3 =new ArrayList<>(); List<Integer> diPai =new ArrayList<>();
-
遍历list集合 判断索引 发 牌索引
//遍历list集合 判断索引 发 牌索引 for (int i = 0; i < list.size(); i++) { // >=51 為底牌添加元素 if (i >=51){ diPai.add(list.get(i)); //為玩家1添加牌 }else if(i %3 ==0){ player1.add(list.get(i)); //為玩家2添加牌 }else if(i %3 ==1){ player2.add(list.get(i)); //為玩家3添加牌 }else{ player3.add(list.get(i)); } }
四、 整理玩家手牌(直接使用Collections中的sort()方法)
// 排序 对玩家集合排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
五、 看牌
這裏寫了個看牌的方法,直接展示玩家的手牌,直接調用方法,可以減少重複代碼,提高代碼的可用性.
//看牌
show("小羅",map,player1);
show("小韓",map,player2);
show("小飛",map,player3);
show("底牌:",map,diPai);
看牌的show方法
public static void show(String name,Map<Integer,String> map,List<Integer> player){
StringBuilder sb =new StringBuilder(name+"[");
//遍历玩家集合
for (int i = 0; i < player.size(); i++) {
//依次获取到每个牌索引 就map集合的键
Integer key = player.get(i);
//调用map集合键找值的方法 显示扑克牌
sb.append(map.get(key));
//判斷是不是數組最後一個元素,是添加"]",不是添加","
if (i == player.size()-1){
sb.append("]");
}else{
sb.append(", ");
}
}
//打印下sb
System.out.println(sb.toString());
}
六、運行結果
打印的結果根據鬥地主的規則展示出來,感興趣的小夥伴可以自己敲著玩玩.