Java實(shí)現(xiàn)撲克牌程序
本文實(shí)例為大家分享了Java實(shí)現(xiàn)撲克牌程序的具體代碼,供大家參考,具體內(nèi)容如下
思路:
在實(shí)現(xiàn)之前,先要想好步驟,思路清晰才不會出錯。
要實(shí)現(xiàn)一副撲克牌,首先要創(chuàng)建這個類,然后有一副撲克牌,之后進(jìn)行洗牌,抓牌。
1.定義一個Card類
2.實(shí)現(xiàn)這個游戲:
①構(gòu)造一副撲克牌(52張)這里不包含大小王
②洗牌
③三個人每個人抓五張牌
代碼實(shí)現(xiàn)及其細(xì)節(jié):
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.實(shí)現(xiàn)這個游戲
寫一個CardGame來實(shí)現(xiàn)這個撲克牌游戲,其中分為很多細(xì)小的分支。
1.買一副牌
前面寫了Card來表示一張牌,這里我們買一副牌,就是52個Card放在一起,就組成一個List,所以這里一副牌的類型為List<Card>。
public List<MyCard> buyDeck(){ //首先將花色和牌面值陳列出來 //因?yàn)榕泼嬷涤蠥,J,Q,K,這里采用的是字符串?dāng)?shù)組 //也可以將A,J,Q,K單獨(dú)處理,剩下的寫作一個整型數(shù)組 char[] suits={'♦','♥','♠','♣'}; String[] ranks={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; //創(chuàng)建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.洗牌:
使用隨機(jī)數(shù)
//寫一個交換函數(shù)方便洗牌方法實(shí)現(xiàn) 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){ //設(shè)置隨機(jī)數(shù) Random r=new Random();//實(shí)例化一個Random類 for(int j=deck.size()-1;j>0;j--){ int i=r.nextInt(j); //隨機(jī)產(chǎn)生一個大于等于0小于51的整數(shù) swap(deck,i,j); //將生成的0-51的隨機(jī)數(shù)與與最后一個數(shù)交換實(shí)現(xiàn)洗牌 } }
3.主函數(shù):
在這里實(shí)現(xiàn)發(fā)牌,每人五張牌,三個人輪流抓,將三個人放在一個List當(dāng)中,三個人中的牌信息為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當(dāng)中 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)); }
輸出結(jié)果:
后面的沒顯示全
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄
這篇文章主要介紹了詳解Java使用Jsch與sftp服務(wù)器實(shí)現(xiàn)ssh免密登錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10SpringBoot實(shí)現(xiàn)根據(jù)手機(jī)號獲取歸屬地
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)根據(jù)手機(jī)號獲取歸屬地,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決
這篇文章主要介紹了SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Spring Boot中使用Redis做緩存的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Spring Boot中使用Redis做緩存的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06SpringMVC中Invalid bound statement (not f
本文主要介紹了SpringMVC中Invalid bound statement (not found)常見報(bào)錯問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05