??簡單的撲克牌游戲 梭哈:
??梭哈用的是撲克牌共52張牌,因為不容易出好牌,也有去掉 234567 的簡易玩法,規則玩法花樣很多,
??在這里我們采用:52 張牌,3 個人,一人 5 張牌,按規則對牌面大小進行比較 ,這樣的方式進行游戲,
牌型比較:
同花順>四條>滿堂紅>同花>順子>三條>二對>單對>散牌,
數字比較:
A>K>Q>J>10>9>8 >7>6>5>4>3>2
花式比較:
黑桃>紅桃>草花>方塊
1 創建一張牌
將具體的撲克牌抽象,使用主要的資訊就可以了,主要依據花色和點數就可以進行游戲,注意,花色和點數用 String 來設定,
public class Card {
// 花色
public String suit;
// 點數
public String rank;
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
}
@Override
public String toString() {
return "[" + this.suit + this.rank + "]";
}
}
2 創建一副牌
4 種花色( ? , ? , ? , ? ) * 13個點數( 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , J , Q , K , A ),以及大鬼小鬼,
// 給定撲克牌的花色
public static final String[] suits = {"?","?","?","?"};
// 給定撲克牌的點數
public static final String[] rank = {
"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
// 創建一副牌
private static List<Card> buyPoker() {
List<Card> poker = new ArrayList<>();
for (int i = 0; i < suits.length; i++) {
for (int j = 0; j < rank.length; j++) {
poker.add(new Card(suits[i],rank[j]));
}
}
poker.add(new Card("","big Joker"));
poker.add(new Card("","small Joker"));
return poker;
}
3 洗牌
洗牌思路:
從最后開始回圈,每取到一個元素,就將這個元素與它之前的、隨機的一個元素進行交換,直到回圈到第一個元素,
// 因為是可變物件,所以不用回傳值,就可以修改到 List
private static void shuffle(List<Card> poker) {
Random random = new Random();
for (int i = poker.size() - 1; i > 0 ; i--) {
// 獲取 0 ~ i 的亂數作為位置
int pos = random.nextInt(i);
swap(poker,i,pos);
}
}
private static void swap(List<Card> poker, int i, int pos) {
Card tmp = poker.get(i);
poker.set(i,poker.get(pos));
poker.set(pos,tmp);
}
4 發牌 / 展示手牌
因為梭哈中不用大小鬼,我們在發牌時,去掉大小鬼,然后三個玩家一人發 5 張撲克牌,按規則比大小,
public static void main(String[] args) {
// 1.創建一副牌
List<Card> poker = buyPoker();
// 2.洗牌
shuffle(poker);
// System.out.println(poker);
// 3.發牌
// 三個玩家,每個人手中發五張牌
// List<Card> player1 = new ArrayList<>();
// List<Card> player2 = new ArrayList<>();
// List<Card> player3 = new ArrayList<>();
// 可以把上面三個人放到一個 List 中
// plays 型別仍然是 List, 泛型引數是 List<Card>
// 每個元素就是一個 List<Card>
List<List<Card>> players = new ArrayList<>();
// 每次 add 的元素都是一個 ArrayList<Card> 型別
players.add(new ArrayList<>());
players.add(new ArrayList<>());
players.add(new ArrayList<>());
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
// 獲得要發的牌:
// remove 移除第一張牌,就像發牌時從最上面開始發
// 該方法會回傳要移除的元素的值
Card top = poker.remove(0);
if (top.rank.equals("big Joker") || top.rank.equals("small Joker")) {
top = poker.remove(0);
}
// 找到人:
// 發給第 j 個人
List<Card> player = players.get(j);
// 把牌給到人
player.add(top);
}
}
// 4. 展示手牌,按照一定規則比較大小
for (int i = 0; i < players.size(); i++) {
List<Card> player = players.get(i);
System.out.println("玩家" + i + "的手牌是:" + player);
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259025.html
標籤:其他
上一篇:[學習日記] 關于鹿鳴CG及其仿真人工智能的一些學習和思考 ~2021.02.11[另外新年快樂?]
下一篇:洛谷P1319 壓縮技術
