1.Main

import java.util.List;
public class Main {
	/**
	 * 1.面向对象思维(一张扑克)
	 * 抽取共性属性
	 *   花色	int
	 *   牌值	int
	 *   花色符号	String
	 *   牌值符号	String
	 * 抽取共性方法
	 * 
	 * 2.面向对象思维(一副扑克)
	 * 抽取共性属性
	 *   花色数量	int 
	 *   牌的张数	int
	 *   所有牌	List
	 * 抽取共性方法
	 *   创建扑克
	 *   洗牌
	 *   抽取一张
	 *   分组
	 *   排序
	 * 1(多)--对--2(一)
	 * */
	public static void main(String[] args) {
		/**
		 * 6.创建一副扑克对象
		 * */
		Pukes p=new Pukes(); // 这是一副空盒
		List<Apuke> list=p.createPuke();
		//System.out.println(list);
		
		/**
		 * 7.洗牌
		 * */
		List<Apuke> list2=p.shufferPuke();
		//System.out.println(list2);
		
		/**
		 * 8.随机抽取一张牌
		 * */
		Apuke a=p.getRandomPuke();
		//System.out.println(a);
		
		/**
		 * 10.洗牌后,重新排序牌
		 * */
		List<Apuke> list3=p.sortPuke();
		System.out.println(list3);
	}

}


2.Apuke

//一张扑克类
public class Apuke implements Comparable<Apuke>{
	/**
	 * 1.定义属性
	 * */
	private int    color;      // 花色值
	private String colorText;  // 花色符号
	private int    value;      // 牌值
	private String valueText;  // 牌值符号
	
	/**
	 * 2.创建构造方法和setter、getter方法、toString方法
	 * */
	public Apuke(int color, String colorText, int value, String valueText) {
		super();
		this.color = color;
		this.colorText = colorText;
		this.value = value;
		this.valueText = valueText;
	}
	public int getColor() {
		return color;
	}
	public void setColor(int color) {
		this.color = color;
	}
	public String getColorText() {
		return colorText;
	}
	public void setColorText(String colorText) {
		this.colorText = colorText;
	}
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	public String getValueText() {
		return valueText;
	}
	public void setValueText(String valueText) {
		this.valueText = valueText;
	}
	
	@Override
	public String toString() {
		return "Apuke [color=" + color + ", colorText=" + colorText + ", value=" + value + ", valueText=" + valueText
				+ "]\n";
	}
	
	/**
	 * 9.单张扑克牌比较大小,需要实现Comparable排序接口的compareTo方法
	 * */
	@Override
	public int compareTo(Apuke o) {
		int val=0;
		// 先根据花色比较
		val=this.color-o.color;
		if(val==0) {
			// 在根据大小比较
			val=this.value-o.value;
		}
		return val;
	}
	
	
}


3.Pukes

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

// 一副扑克
public class Pukes {
	/**
	 * 3.定义属性
	 * */
	private int         pukesCount;  // 扑克张数
	private int         colorCount;  // 花色数量
	private List<Apuke> aList;       // 扑克牌的集合
	
	/**
	 * 12.创建一个大的组,放花色组的集合
	 * */
	private List<ColorGroup> cgl;
	
	public List<ColorGroup> getCgl() {
		return cgl;
	}
	public void setCgl(List<ColorGroup> cgl) {
		this.cgl = cgl;
	}

	/**
	 * 4.创建setter、getter方法、toString方法
	 * */
	
	public int getPukesCount() {
		return pukesCount;
	}

	public void setPukesCount(int pukesCount) {
		this.pukesCount = pukesCount;
	}
	public int getColorCount() {
		return colorCount;
	}
	public void setColorCount(int colorCount) {
		this.colorCount = colorCount;
	}
	public List<Apuke> getaList() {
		return aList;
	}
	public void setaList(List<Apuke> aList) {
		this.aList = aList;
	}

	@Override
	public String toString() {
		return "Pukes [pukesCount=" + pukesCount + ", colorCount=" + colorCount + ", aList=" + aList + "]";
	}
	
	/**
	 * 5.先把业务方法定义出来,可以先搭个架子
	 * */
	// 5.1.创建一副扑克牌的方法
	public List<Apuke> createPuke(){
		
		pukesCount=54;                // 初始化扑克牌数量
		colorCount=5 ;                // 初始化花色数量(包含王)
		aList=new ArrayList<Apuke>(); // 初始化扑克牌集合
		/*王   ♡   ■    ♠   ▲
		  1  2 3  4 5
		  A  2 3  4 5 6 7 8 9 10 J  Q  K  小王     大王
		  1  2 3  4 5 6 7 8 9 10 11 12 13 14   15*/
		//先创建4种花色牌
		for(int i=2;i<=5;i++) {
			for(int j=1;j<=13;j++) {
				String colorText=null; // 定义花色符号
				String valueText=null; // 定义牌值符号
				// 给花色符号赋值
				switch (i) {
					case 2:colorText="♡";break;
					case 3:colorText="■";break;
					case 4:colorText="♠";break;
					case 5:colorText="▲";break;
				}
				// 给牌值符号赋值
				switch(j) {
					case 1  : valueText="A"; break;
					case 2  : valueText="2"; break;
					case 3  : valueText="3"; break;
					case 4  : valueText="4"; break;
					case 5  : valueText="5"; break;
					case 6  : valueText="6"; break;
					case 7  : valueText="7"; break;
					case 8  : valueText="8"; break;
					case 9  : valueText="9"; break;
					case 10 : valueText="10";break;
					case 11 : valueText="J"; break;
					case 12 : valueText="Q"; break;
					case 13 : valueText="K"; break;
				}
				// 创建一张扑克对象,让后扔到扑克盒里
				Apuke ap=new Apuke(i, colorText, j, valueText);
				aList.add(ap);
			}
		}
		//创建小王、大王扑克牌
		Apuke ap_xiaowang=new Apuke(1, "★", 14, "♂");
		aList.add(ap_xiaowang);
		Apuke ap_dawang=new Apuke(1, "★", 15, "♀");
		aList.add(ap_dawang);
		
		return aList;
	}
	
	// 5.2.洗牌的方法
	public List<Apuke> shufferPuke(){
		Collections.shuffle(aList);
		return aList;
	}
	
	// 5.3.随机抽取一张扑克
	public Apuke getRandomPuke() {
		Random r=new Random();
		int index=r.nextInt(this.pukesCount);
		System.out.println(index);
		return aList.get(index);
	}
	
	// 5.4.排序所有扑克牌(先花色,在大小),所以单张扑克牌类要实现Comparable接口
	public List<Apuke> sortPuke(){
		Collections.sort(aList);
		return aList;
	}
	
	// 5.5.分组最后做
	
}