1. 程式人生 > >java 用集合實現撲克牌的洗牌和發牌

java 用集合實現撲克牌的洗牌和發牌

1隨機發撲克,但沒對玩家的撲克整理,程式碼如下:

//實現隨機發牌,按鬥地主的模式,實現步驟,建立List集合物件將54張撲克放入集合中,用集合工具類的shuffle方法,將List打亂
//將List集合的元素放入四份,三個玩家,一份底牌
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Poker {
	public static void main(String[] args) {
		String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
		String[] colors = { "黑桃", "紅桃", "梅花", "方片" };
		//建立List物件,將54張牌放入到List物件中
		ArrayList<String> pokerList = new ArrayList<>();
		for (String num : nums) {
			for (String color : colors) {
				pokerList.add(color + num);
			}
		}
		pokerList.add("大鬼");
		pokerList.add("小鬼");
		//洗牌,將List集合的元素打亂順序
		Collections.shuffle(pokerList);
		System.out.println(pokerList);
		List<String> buttoms = new ArrayList<>();
		List<String> player1 = new ArrayList<>();
		List<String> player2 = new ArrayList<>();
		List<String> player3 = new ArrayList<>();

		for (int i = 0; i < pokerList.size(); i++) {
			if (i >= pokerList.size() - 3) {
				buttoms.add(pokerList.get(i));
			} else if (i % 3 == 0) {
				player1.add(pokerList.get(i));
			} else if (i % 3 == 1) {
				player2.add(pokerList.get(i));
			} else {
				player3.add(pokerList.get(i));
			}
		}
		System.out.println(buttoms);
		System.out.println(player1);
		System.out.println(player2);
		System.out.println(player3);
	}
}
out:
[紅桃2, 梅花3, 黑桃2, 黑桃5, 方片7, 方片10, 梅花A, 梅花2, 黑桃Q, 小鬼, 方片A, 梅花J, 紅桃10, 方片8, 紅桃3, 紅桃8, 梅花Q, 梅花K, 紅桃A, 黑桃9, 紅桃5, 黑桃4, 方片Q, 方片9, 方片4, 紅桃Q, 梅花5, 梅花10, 紅桃4, 黑桃J, 紅桃7, 梅花4, 方片K, 紅桃K, 方片5, 黑桃10, 黑桃6, 黑桃A, 紅桃9, 梅花8, 方片6, 黑桃3, 梅花6, 方片3, 方片J, 方片2, 黑桃K, 梅花7, 紅桃J, 大鬼, 紅桃6, 黑桃7, 黑桃8, 梅花9]
[黑桃7, 黑桃8, 梅花9]
[紅桃2, 黑桃5, 梅花A, 小鬼, 紅桃10, 紅桃8, 紅桃A, 黑桃4, 方片4, 梅花10, 紅桃7, 紅桃K, 黑桃6, 梅花8, 梅花6, 方片2, 紅桃J]
[梅花3, 方片7, 梅花2, 方片A, 方片8, 梅花Q, 黑桃9, 方片Q, 紅桃Q, 紅桃4, 梅花4, 方片5, 黑桃A, 方片6, 方片3, 黑桃K, 大鬼]
[黑桃2, 方片10, 黑桃Q, 梅花J, 紅桃3, 梅花K, 紅桃5, 方片9, 梅花5, 黑桃J, 方片K, 黑桃10, 紅桃9, 黑桃3, 方片J, 梅花7, 紅桃6]

2隨機發撲克,並對玩家手中的撲克進行整理,程式碼如下:

package exercise;

//初始化一副撲克的,建立集合物件將撲克放進去,要注意撲克與索引的對應,應該是先4張A,再4張2,......
//使用Collections的shuffle方法對集合進行洗牌
//  實現發牌,發三家牌
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.TreeSet;

public class Poker02 {
	public static void main(String[] args) {
		String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
		String[] colors = { "黑桃", "紅桃", "梅花", "方片" };
		HashMap<Integer, String> pokerMap = new HashMap<>();// 用來存放key索引value和牌
		List<Integer> indexList = new ArrayList<>();// 儲存撲克的索引0-53
		TreeSet<Integer> buttoms = new TreeSet<>();
		TreeSet<Integer> player1 = new TreeSet<>();
		TreeSet<Integer> player2 = new TreeSet<>();
		TreeSet<Integer> player3 = new TreeSet<>();
		// 定義索引值變數
		int index = 0;
		// 將撲克牌與索引建立對應關係放入map和list中
		for (String num : nums) {
			for (String color : colors) {
				pokerMap.put(index, color + num);
				indexList.add(index);
				index++;
			}
		}
		pokerMap.put(index, "小鬼");
		indexList.add(index++);
		pokerMap.put(index, "大鬼");
		indexList.add(index);
		// 洗牌
		Collections.shuffle(indexList);
		// 發牌
		for (int i = 0; i < indexList.size(); i++) {
			if (i >= indexList.size() - 3) {
				buttoms.add(indexList.get(i));
			} else if (i % 3 == 0) {
				player1.add(indexList.get(i));
			} else if (i % 3 == 1) {
				player2.add(indexList.get(i));
			} else {
				player3.add(indexList.get(i));
			}
		}

		check(pokerMap, player1, "player1");
		check(pokerMap, player2, "player2");
		check(pokerMap, player3, "player3");
		check(pokerMap, buttoms, "buttoms");
	}

	public static void check(HashMap<Integer, String> pokerMap, TreeSet<Integer> player1, String name) {
		// 檢視手中的牌
		System.out.println(name + " :");
		for (Integer i : player1) {
			System.out.print(pokerMap.get(i) + " ");
		}
		System.out.println();
	}

}
out:
player1 :
梅花A 梅花2 紅桃3 黑桃4 梅花5 方片5 梅花6 紅桃7 黑桃8 方片8 黑桃9 梅花9 黑桃J 梅花J 紅桃K 小鬼 大鬼 
player2 :
方片A 黑桃2 方片2 梅花3 方片3 方片4 黑桃5 紅桃5 方片6 方片7 紅桃8 梅花8 方片9 黑桃10 紅桃10 黑桃Q 方片Q 
player3 :
紅桃A 紅桃2 黑桃3 紅桃4 梅花4 紅桃6 黑桃7 紅桃9 梅花10 方片10 紅桃J 方片J 紅桃Q 梅花Q 黑桃K 梅花K 方片K 
buttoms :
黑桃A 黑桃6 梅花7 

原文:

http://www.monkey1024.com/javase/592