本文實例為大家分享了Java實現撲克牌程序的具體代碼,供大家參考,具體內容如下
思路:
在實現之前,先要想好步驟,思路清晰才不會出錯。
要實現一副撲克牌,首先要創建這個類,然后有一副撲克牌,之后進行洗牌,抓牌。
1.定義一個Card類
2.實現這個游戲:
①構造一副撲克牌(52張)這里不包含大小王
②洗牌
③三個人每個人抓五張牌
代碼實現及其細節:
1.定義一個Card類
一張牌中包括兩個屬性:花色和牌面值
1
2
3
4
5
6
7
8
9
10
11
12
|
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>。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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.洗牌:
使用隨機數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//寫一個交換函數方便洗牌方法實現 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>>.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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://blog.csdn.net/m0_51405559/article/details/120808011