天天看點

用Java寫一副撲克牌(不含遊戲規則)

用Java寫一副撲克牌(不含遊戲規則)

我是一枚新人,第一次寫部落格,寫的不好請幫我指出,謝謝各位大牛!!!

思路

一,首先面向對象語言,我們的牌組分為兩部分。

1,單張牌

單張牌會具有花色和點數兩個屬性。

2,牌組

由單張牌組成,可分為52張和54張(差別于大家需要的牌是否有大小王)

二如何去實作一副牌?

用定義兩個常量數組,分别包含花色和數值。利用雙層循環來實作52張牌

如果需要54張則再添加大王和小王這兩張牌。

當然,用于遊戲的牌肯定要是随機的,是以我在這裡添加了洗牌,發牌功能。

(如果你想要美女荷官線上發牌洗牌也可以定義個PrettyWomen的類來完成

洗牌和發牌)

代碼如下:

一.定義單張牌的屬性

public class Poke {
//不重複,定義Hashset 集合來儲存(無序且不重複)
//定義兩個循環來輸出 撲克牌的兩種屬性  數值 和 花色 ;
	private String number;
	private String color;
	private int colorCount;
	private int numberCount;public Poke(String color, String number, int colorCount, int numberCount) {
    this.color = color;
    this.number = number;
    this.numberCount = numberCount;
    this.colorCount = colorCount;
}	
public String getNumber() {
	return number;
}
public void setNumber(String number) {
	this.number = number;
}public String getColor() {
	return color;
}public void setColor(String color) {
    this.color = color;
}public int getColorCount() {
    return colorCount;
}public void setColorCount(int colorCount) {
    this.colorCount = colorCount;
}public int getNumberCount() {
    return numberCount;
}public void setNumberCount(int numberCount) {
    this.numberCount = numberCount;
}@Override
public String toString() {
    return "[" + color + number + "]";
}}
           

二.定義牌組(包含洗牌,發牌)

import java.util.ArrayList;
import java.util.Random;public class PokesFunction {
	//定義兩個常量數組,COLOR(包含花色)和NUMBER(包含牌數值的大小)
	private final String[] COLOR = { "♦", "♣", "♥", "♠" };
	private final String[] NUMBER = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
	//定義一個List數組來儲存牌,記得資料類型要改成 Poke
	private ArrayList<Poke> pokess = new ArrayList<Poke>(54);
	//定義一個随機數來用于洗牌。
	private Random random;
	//定義的下标來決定發牌時從牌組的哪一張開始
	private int index;
	//這裡加boolean是為了判斷一副牌是否要為54張     PS:有的牌的玩法不需要大小王是以為 52張
	public PokesFunction(boolean isALl) {
		//用雙層循環來定義一副牌組,外層為花色,内層嵌套牌的數值;
		for (int i = 0; i < COLOR.length; i++) {
			for (int j = 0; j < NUMBER.length; j++) {
				pokess.add(new Poke(COLOR[i], NUMBER[j], i, j));
			}
		}//如果需要54張牌,這裡判定後會添加大小王;
		if (isALl) {
			pokess.add(new Poke("大", "王", 5, 15));
			pokess.add(new Poke("小", "王", 4, 14));
		}
		this.random = new Random();
	}
//重寫toString方法
	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		for (int i = 1; i < pokess.size(); i++) {
			sb = sb.append(pokess.get(i - 1).toString());
		}
		return sb.toString();
	}
//洗牌
//原理是從牌組中随機抽取一張牌再添加到這組牌的第一張
//我這裡循環了1000次,大家可以自己定義循環次數
	public void shuffle() {
		this.index = 0;
		int r = 0;
		for (int i = 0; i < 1000; i++) {
			r = random.nextInt(pokess.size());
			pokess.add(pokess.remove(r));
		}
	}
//發牌
//從牌組的第一張開始發牌,因為我們前面定義了index為0。如果想換玩法的可以修改index的值
	public Poke dealPoke() {
		if (index >= pokess.size()) {
			throw new IndexOutOfBoundsException();
		}
		return pokess.get(index++);
	}
}
           

總結

1.運用了雙重循環和List數組

2.定義了final的常量

3.更清楚的知道了什麼是面向對象

最後

謝謝大牛們的浏覽,我會根據自己的Java學習。每個星期定時更新部落格。

繼續閱讀