用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學習。每個星期定時更新部落格。