Java實現--模擬鬥地主的洗牌和發牌
阿新 • • 發佈:2019-01-28
案例分析:
我們需要模擬鬥地主過程中的洗牌、發牌和看牌。而且要求牌是排好序的。
1.每張撲克牌都有花色和點數,所以我們可以先把花色和點數存進兩個字串陣列,然後再存進集合裡,而因為我們後面涉及到對牌進行洗牌還有排序等等,所以我們選擇TreeMap集合來儲存,鍵是撲克牌的編號,值是撲克牌的花色和點數(把花色和點數拼接成一個字串)。
2.洗牌洗的是編號,我們再用ArrayList集合來儲存牌的編號,呼叫Collections集合工具類的shuffle()方法來進行洗牌操作。
3.發牌,我們發到每個人手裡的牌是排好序的,所以我們選擇TreeSet集合來接收牌。
4.看牌,我們寫個lookPoker()方法就行了,這個方法通過TreeSet集合來獲取每個人牌對應的編號,再去TreeMap集合中的找編號對應的撲克牌。
具體步驟:
1.建立一個TreeMap集合來儲存撲克牌編號和撲克牌花色及點數
2.定義兩個陣列分別用來儲存花色和點數
3.建立一個ArrayList集合來儲存編號
4.往HashMap集合中儲存編號以及對應的撲克牌,同時往ArrayList集合中儲存編號
5.洗牌(洗的是編號)
6.發牌(發的也是編號,為了保證撲克牌排好序,建立TreeSet集合來接收)
7.看牌(遍歷TreeSet集合,獲取編號,到HashMap集合中找對應的牌)
具體程式碼實現如下:
package com.edu_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;
public class Poker {
public static void main(String[] args) {
//1.建立一個TreeMap集合來儲存撲克牌編號和撲克牌花色及點數
TreeMap<Integer, String> pokers = new TreeMap<Integer,String>();
//2.定義兩個陣列分別用來儲存花色和點數
String[] colors={"♥","♠","♦","♣"};
String[] numbers={"3","4","5","6" ,"7","8","9","10","J","O","K","A","2"};
//3.建立一個ArrayList集合來儲存編號
ArrayList<Integer> indexs = new ArrayList<Integer>();
//4.往HashMap集合中儲存編號以及對應的撲克牌,同時往ArrayList集合中儲存編號
int index=0;
for (String number : numbers) {
for (String color : colors) {
pokers.put(index,color+number);
indexs.add(index);
index++;
}
}
pokers.put(index,"小王");
indexs.add(index);
index++;
pokers.put(index,"大王");
indexs.add(index);
//5.洗牌(洗的是編號)
Collections.shuffle(indexs);
//6.發牌(發的也是編號,為了保證撲克牌排好序,建立TreeSet集合來接收)
TreeSet<Integer> zhangsan = new TreeSet<Integer>();
TreeSet<Integer> lisi = new TreeSet<Integer>();
TreeSet<Integer> wangwu = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
for (int i = 0; i < indexs.size(); i++) {
if(i>=indexs.size()-3){
dipai.add(indexs.get(i));
}else if(i%3==0){
zhangsan.add(indexs.get(i));
}else if(i%3==1){
lisi.add(indexs.get(i));
}else if(i%3==2){
wangwu.add(indexs.get(i));
}
}
//7.看牌(遍歷TreeSet集合,獲取編號,到HashMap集合中找對應的牌)
lookPoker("張三",zhangsan,pokers);
lookPoker("李四",lisi,pokers);
lookPoker("王五",wangwu,pokers);
lookPoker("底牌",dipai,pokers);
}
private static void lookPoker(String name, TreeSet<Integer> indexs,
TreeMap<Integer, String> pokers) {
System.out.print(name+"的牌為:");
for (Integer index : indexs) {
System.out.print(pokers.get(index)+" ");
}
System.out.println();
}
}
執行結果:
注意:因為我的花色是用了”♥”,”♠”,”♦”,”♣”這這幾個符號,所以儲存程式的時候一定要選擇Save as UTF-8,不能選擇OK,否則會出現亂碼。