思路:
在實作之前,先要想好步驟,思路清晰才不會出錯,
要實作一副撲克牌,首先要創建這個類,然后有一副撲克牌,之后進行洗牌,抓牌,
1.定義一個Card類
2.實作這個游戲:
①構造一副撲克牌(52張)這里不包含大小王
②洗牌
③三個人每個人抓五張牌
代碼實作及其細節:
1.定義一個Card類
一張牌中包括兩個屬性:花色和牌面值
public class MyCard {
public char suit; //花色
public String rank; //牌面值
public MyCard(String rank, char suit) {
this.suit = suit;
this.rank = rank;
}
public String toString(){
return String.format("[%s %c]",rank,suit);
}
}
2.實作這個游戲
寫一個CardGame來實作這個撲克牌游戲,其中分為很多細小的分支,
1.買一副牌
前面寫了Card來表示一張牌,這里我們買一副牌,就是52個Card放在一起,就組成一個List,所以這里一副牌的型別為List<Card>,
public List<MyCard> buyDeck(){
//首先將花色和牌面值陳列出來
//因為牌面值有A,J,Q,K,這里采用的是字串陣列
//也可以將A,J,Q,K單獨處理,剩下的寫作一個整型陣列
char[] suits={'?','?','?','?'};
String[] ranks={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//創建52張牌
List<MyCard> deck=new ArrayList<>(52);
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
deck.add(new MyCard(ranks[j],suits[i]));
}
}
return deck;
}
2.洗牌:
使用亂數
//寫一個交換函式方便洗牌方法實作
public void swap(List<MyCard> deck,int i,int j){
MyCard temp=deck.get(i);
deck.set(i,deck.get(j));
deck.set(j,temp);
}
public void shuffle(List<MyCard> deck){
//設定亂數
Random r=new Random();//實體化一個Random類
for(int j=deck.size()-1;j>0;j--){
int i=r.nextInt(j); //隨機產生一個大于等于0小于51的整數
swap(deck,i,j); //將生成的0-51的亂數與與最后一個數交換實作洗牌
}
}
3.主函式:
在這里實作發牌,每人五張牌,三個人輪流抓,將三個人放在一個List當中,三個人中的牌資訊為List<Card>,所以hands的型別為List<List<Card>>.
public static void main(String[] args){
CardGame cg=new CardGame();
List<MyCard> deck=cg.buyDeck();
System.out.println("剛買回來的牌:");
System.out.println(deck);
cg.shuffle(deck);
System.out.println("洗完的牌:");
System.out.println(deck);
//三人輪流抓牌,一人抓五張
//將三個玩家放到一個List當中
List<List<MyCard>> hands=new ArrayList<>(3);
//三個人手中每個人五張牌
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
//ABC三個人抓牌
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
//從deck里面抓走的
//抓的時候把最頂上的抓走
hands.get(j).add(deck.remove(0));;
}
}
System.out.println("剩下的牌:");
System.out.println("A手中的牌:");
System.out.println(hands.get(0));
System.out.println("B手中的牌:");
System.out.println(hands.get(1));
System.out.println("C手中的牌:");
System.out.println(hands.get(2));
}
輸出結果:
后面的沒顯示全
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321468.html
標籤:其他
上一篇:開始之結束與結束之開始
