1. 程式人生 > >創建撲克測試(二)

創建撲克測試(二)

java Collections ArrayList

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.分組最後做
	
}










創建撲克測試(二)