国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何用Java實(shí)現(xiàn)撲克牌(附源碼)

這篇具有很好參考價值的文章主要介紹了如何用Java實(shí)現(xiàn)撲克牌(附源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享


目錄

一.撲克牌的數(shù)據(jù)結(jié)構(gòu)?

二.買牌(撲克牌的初始化)

三.洗牌

四.發(fā)牌

五.完整代碼

Card.java

CardList.java

六.測試

輸出結(jié)果?


一.撲克牌的數(shù)據(jù)結(jié)構(gòu)?

首先,撲克牌是一幅一幅的,除去大小王以外一共有52張,我們可以考慮用數(shù)組來存儲,數(shù)組的每一個元素都是一張牌,這是牌庫的牌;除了要考慮牌庫的牌以外,還需要考慮玩家手上的牌,玩家的手牌是牌庫的一部分,我們使用順序表來存儲撲克牌,對于一張牌來說,我們有倆個參數(shù):花色點(diǎn)數(shù)

public class Card {
    private int rank;//點(diǎn)數(shù)
    private String suit;//花色
    
    public int getRank() {
        return rank;
    }
    
    public void setRank(int rank) {
        this.rank = rank;
    }
    
    public String getSuit() {
        return suit;
    }
    
    public void setSuit(String suit) {
        this.suit = suit;
    }
    
    @Override
    public String toString() {
        return suit+rank+" ";
    }
}

我們將花色存放在總的撲克牌組中,使用字符串?dāng)?shù)組進(jìn)行存放

public class CardList {
    public static final String[] suits = {"?","?","?","?"};
}

二.買牌(撲克牌的初始化)

我們要在買牌的過程中具體的抽象化出一組牌,我們使用數(shù)組來存儲,數(shù)組的每一個元素都是一張牌,我們使用泛型方便我們定義牌組。

撲克牌除了大小王一共是52張,所以我們定義一個撲克牌數(shù)組大小為52,并且通過倆個for循環(huán)來實(shí)現(xiàn)牌的具體信息,外邊的for循環(huán)用來實(shí)現(xiàn)牌的花色,里面的for循環(huán)用來實(shí)現(xiàn)牌的點(diǎn)數(shù),在循環(huán)最中間,使用零時的變量生成一張零時的撲克牌,在我們得到一張完整的牌之后,就使用ArrayList的插入方法add將我們新生成的牌放入牌組中,最后將生成的52張牌組成的牌組返回,我們就完成了撲克牌的初始化

    //買一副牌,也就是對牌進(jìn)行初始化
    public static final List<Card> buyCard(){
        List<Card> cards = new ArrayList<Card>(52);
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j <= 13; j++) {
                String tempSuit = suits[i];
                int tempRank = j;
                Card newCard = new Card();
                newCard.setSuit(suits[i]);
                newCard.setRank(j);
                cards.add(newCard);
            }
        }
        return cards;
    }

三.洗牌

所謂的洗牌就是隨機(jī)的打亂牌與牌之間的順序,回想我們現(xiàn)實(shí)生活中,我們洗牌的動作,其實(shí)就是不停的將部分牌插入到另一部分中,然后交換牌與牌之間的順序。

因此我們這里封裝一個方法swap用來對牌與牌實(shí)現(xiàn)交換,然后我們在洗牌方法shuffle中使用隨機(jī)數(shù)來確保我們交換的位置是隨機(jī)的,并且使用for循環(huán)可以保證我們對每一個位置都至少進(jìn)行一次洗牌

    //洗牌
    public void swap(List<Card> cards,int i,int j){
        Card tempCard = cards.get(i);
        cards.set(j,tempCard);
        cards.set(i,cards.get(j));
    }
    
    //洗牌
    public void shuffle(List<Card> cards){
        Random random = new Random();
        for (int i = cards.size()-1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(cards,index,i);
        }
    }

四.發(fā)牌

發(fā)牌實(shí)際上就是將一部分牌等量的分給玩家,我們這里定義出三個玩家的手牌組,用三個數(shù)組分別來實(shí)現(xiàn),然后我們將這三個數(shù)組放入一個大數(shù)組來記錄要發(fā)給玩家的所有牌,我們用倆個for循環(huán)嵌套來保證我們對3名玩家各發(fā)5張牌,發(fā)牌的過程我們可以這樣理解:hands.get(j)用來拿到3個人的手牌組,add(tempCard)用來將牌放入這三個數(shù)組中

    //發(fā)牌
    public List<List<Card>> dealCard(List<Card> cardList){
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();
        
        List<List<Card>> hands = new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);
        
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card tempCard = cardList.remove(0);
                hands.get(j).add(tempCard);
            }
        }
        return hands;
    }

五.完整代碼

Card.java

public class Card {
    private int rank;
    private String suit;
    
    public int getRank() {
        return rank;
    }
    
    public void setRank(int rank) {
        this.rank = rank;
    }
    
    public String getSuit() {
        return suit;
    }
    
    public void setSuit(String suit) {
        this.suit = suit;
    }
    
    @Override
    public String toString() {
        return suit+rank+" ";
    }
}

CardList.java

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class CardList {
    public static final String[] suits = {"?","?","?","?"};
    
    //買一副牌,也就是對牌進(jìn)行初始化
    public static final List<Card> buyCard(){
        List<Card> cards = new ArrayList<Card>(52);
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j <= 13; j++) {
                String tempSuit = suits[i];
                int tempRank = j;
                Card newCard = new Card();
                newCard.setSuit(suits[i]);
                newCard.setRank(j);
                cards.add(newCard);
            }
        }
        return cards;
    }
    
    //洗牌
    public void swap(List<Card> cards,int i,int j){
        Card tempCard = cards.get(i);
        cards.set(j,tempCard);
        cards.set(i,cards.get(j));
    }
    
    //洗牌
    public void shuffle(List<Card> cards){
        Random random = new Random();
        for (int i = cards.size()-1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(cards,index,i);
        }
    }
    
    //發(fā)牌
    public List<List<Card>> dealCard(List<Card> cardList){
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();
        
        List<List<Card>> hands = new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);
        
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card tempCard = cardList.remove(0);
                hands.get(j).add(tempCard);
            }
        }
        return hands;
    }
}

六.測試

我們可以寫個測試案例:

    public static void main(String[] args) {
        CardList cardGame = new CardList();
        List<Card> ret =  cardGame.buyCard();
        System.out.println("買牌:");
        System.out.println(ret);
        
        System.out.println("洗牌:");
        cardGame.shuffle(ret);
        System.out.println(ret);
        
        System.out.println("揭牌:");
        List<List<Card>> hand = cardGame.dealCard(ret);
        for (int i = 0; i < hand.size(); i++) {
            System.out.println("第 "+(i+1)+" 個人的牌:"+hand.get(i));
        }
        
        System.out.println("剩下的牌:");
        System.out.println(ret);
    }

輸出結(jié)果?

如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享

可以發(fā)現(xiàn)是完全可以正常運(yùn)行的




?如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享?本次的分享就到此為止了,希望我的分享能給您帶來幫助,也歡迎大家三連支持,你們的點(diǎn)贊就是博主更新最大的動力!如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享如有不同意見,歡迎評論區(qū)積極討論交流,讓我們一起學(xué)習(xí)進(jìn)步!如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享有相關(guān)問題也可以私信博主,評論區(qū)和私信都會認(rèn)真查看的,我們下次再見如何用Java實(shí)現(xiàn)撲克牌(附源碼),Java_SE,java,開發(fā)語言,游戲程序,數(shù)據(jù)結(jié)構(gòu),經(jīng)驗(yàn)分享?文章來源地址http://www.zghlxwxcb.cn/news/detail-756228.html

到了這里,關(guān)于如何用Java實(shí)現(xiàn)撲克牌(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 劍指 Offer ! 61. 撲克牌中的順子

    參考資料:力扣K神的講解 劍指 Offer 61. 撲克牌中的順子 簡單 351 相關(guān)企業(yè) 從若干副撲克牌中隨機(jī)抽 5 張牌,判斷是不是一個順子,即這5張牌是不是連續(xù)的。2~10為數(shù)字本身,A為1,J為11,Q為12,K為13,而大、小王為 0 ,可以看成任意數(shù)字。A 不能視為 14。 示例 1: 輸入: [1,2

    2024年02月13日
    瀏覽(28)
  • 劍指 Offer 61. 撲克牌中的順子

    劍指 Offer 61. 撲克牌中的順子 排序,計算0的個數(shù),看其他的數(shù)字是不是連續(xù)的,不連續(xù)的話用0補(bǔ),如果0的個數(shù)不夠補(bǔ)了,就無法構(gòu)成順子。

    2024年02月11日
    瀏覽(25)
  • 數(shù)據(jù)庫編程大賽:一條SQL計算撲克牌24點(diǎn)

    數(shù)據(jù)庫編程大賽:一條SQL計算撲克牌24點(diǎn)

    你是否在尋找一個平臺,能讓你展示你的SQL技能,與同行們一較高下?你是否渴望在實(shí)戰(zhàn)中提升你的SQL水平,開闊你的技術(shù)視野?如果你對這些都感興趣,那么本次由NineData主辦的《數(shù)據(jù)庫編程大賽》,將是你的最佳選擇! 本次數(shù)據(jù)庫編程大賽的獎項(xiàng)安排:一等獎(1人)、二

    2024年02月03日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】楊輝三角,相同字符的截取以及撲克牌

    【數(shù)據(jù)結(jié)構(gòu)與算法】楊輝三角,相同字符的截取以及撲克牌

    ?個人主頁:bit me ?當(dāng)前專欄:數(shù)據(jù)結(jié)構(gòu) ?每日一語:不要等到了你的人生垂暮,才想起俯拾朝花,且行且珍惜。 給定一個非負(fù)整數(shù) numRows,生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中,每個數(shù)是它左上方和右上方的數(shù)的和。 示例 1: 輸入: numRows = 5 輸出: [[1],[1,1

    2024年02月03日
    瀏覽(28)
  • 張澤鵬:用PostgreSQL征服24點(diǎn)撲克牌算法的數(shù)據(jù)庫高手

    張澤鵬:用PostgreSQL征服24點(diǎn)撲克牌算法的數(shù)據(jù)庫高手

    參賽選手 :張澤鵬 個人簡介 :杭州隱函科技有限公司聯(lián)創(chuàng),技術(shù)負(fù)責(zé)人 參賽數(shù)據(jù)庫 :PostgreSQL 性能評測 :百萬級數(shù)據(jù)代碼性能評測 2.46秒 綜合得分 :82.2 以下是張澤鵬選手的代碼說明思路簡介: 本算法用了取巧的方法:提前計算好4個1~10數(shù)值求24的結(jié)果,執(zhí)行查詢時,直

    2024年02月02日
    瀏覽(25)
  • python123輸出N以內(nèi)的所有素數(shù)&哥德巴赫猜想&撲克牌游戲

    描述 ???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 編程找出N(即小

    2023年04月18日
    瀏覽(34)
  • 小啊嗚產(chǎn)品讀書筆記001:《邱岳的產(chǎn)品手記-16》第30講產(chǎn)品案例分析:Primer的撲克牌交互 & 第31講 產(chǎn)品分析的套路(下):如何出解決方案?

    小啊嗚產(chǎn)品讀書筆記001:《邱岳的產(chǎn)品手記-16》第30講產(chǎn)品案例分析:Primer的撲克牌交互 & 第31講 產(chǎn)品分析的套路(下):如何出解決方案?

    叮嘟!這里是小啊嗚的產(chǎn)品進(jìn)階讀書筆記整理。好記性不如爛筆頭,今天也是努力進(jìn)步的一天。一起加油進(jìn)階吧! Google 出品的 Primer,讓你 5 分鐘學(xué)市場營銷 (1)這種交互方式看起來很像在玩兒撲克牌,所以我們就姑且管它叫 撲克牌交互 ,這其實(shí)也是 卡片設(shè)計 的一種。

    2024年02月07日
    瀏覽(22)
  • 【LinkedHashMap】| 深度剝析Java SE 源碼合集Ⅴ

    【LinkedHashMap】| 深度剝析Java SE 源碼合集Ⅴ

    眾所周知,HashMap 提供的訪問,是 無序 的。而在一些業(yè)務(wù)場景下,我們希望能夠提供 有序 訪問的 HashMap 。那么此時,我們就有兩種選擇: TreeMap :按照 key 的順序。 LinkedHashMap :按照 key 的插入和訪問的順序。 LinkedHashMap ,在 HashMap 的基礎(chǔ)之上,提供了 順序 訪問的特性。而

    2023年04月19日
    瀏覽(22)
  • 【ArrayList】| 深度剝析Java SE 源碼合集Ⅵ

    【ArrayList】| 深度剝析Java SE 源碼合集Ⅵ

    ArrayList ,基于 [] 數(shù)組實(shí)現(xiàn)的,支持 自動擴(kuò)容 的動態(tài)數(shù)組。相比數(shù)組來說,因?yàn)槠渲С?自動擴(kuò)容 的特性,成為我們?nèi)粘i_發(fā)中,最常用的集合類,沒有之一。 ArrayList 實(shí)現(xiàn)的接口、繼承的抽象類,如下圖所示: 實(shí)現(xiàn)了 4 個接口,分別是: java.util.List 接口,提供數(shù)組的添加、

    2024年02月04日
    瀏覽(22)
  • 【TreeSet】| 深度剝析Java SE 源碼合集Ⅳ

    【TreeSet】| 深度剝析Java SE 源碼合集Ⅳ

    TreeSet是基于紅黑樹實(shí)現(xiàn)的Set集合,它具有以下特點(diǎn): 有序性:TreeSet是有序的,它按照元素的自然排序進(jìn)行排序,或者按照指定的Comparator進(jìn)行排序。 不允許重復(fù)元素:與HashSet一樣,TreeSet也不允許重復(fù)元素,如果試圖將一個已經(jīng)存在的元素添加到TreeSet中,那么添加操作將會

    2023年04月17日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包