欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)撲克牌的創(chuàng)建以及發(fā)放

 更新時間:2023年03月07日 11:36:20   作者:曉星航  
在java當中生成一副牌有很多種方法,有簡單易于理解的面向過程編程,也有面向對象模塊化編程,下面這篇文章主要給大家介紹了關于Java實現(xiàn)撲克牌的創(chuàng)建以及發(fā)放的相關資料,需要的朋友可以參考下

題目:

創(chuàng)建一個撲克牌(不需要包含大小王),分別分發(fā)給3個人,一個人發(fā)5張牌,輸出結果要求包含全套牌(52張牌),以及3個人各自的牌的花色以及數字。

1.撲克牌的源代碼

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 曉星航
 * Date: 2023-02-27
 * Time: 18:09
 */
class Card {
    private int rank;//數字
    private String suit;//花色

    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "[ 花色:"+this.suit+" "+this.rank+" ]";
    }
}
//沒有大小王:1,2,3,4,5,6,7,8,9,10,11,12,13
public class TestDemo {
    private static final String[] suits = {"?","?","?","?"};
    public static List<Card> buyCard() {
        ArrayList<Card> cards = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {/*
                int rank = j;
                String suit = suits[i];
                Card card = new Card(j,suits[i]);
                cards.add(card);*/
                cards.add(new Card(j,suits[i]));
            }
        }
        return cards;
    }
    private static void swap(List<Card> cards,int i,int j) {
//      Card tmp = cards[i];
        Card tmp = cards.get(i);
//      cards[i] = cards[j];
        cards.set(i,cards.get(j));
//      cards[j] = tmp;
        cards.set(j,tmp);
    }
    public static void shuffle(List<Card> cards) {
        int size = cards.size();
        for (int i = size-1; i > 0; i--) {
            Random random = new Random();
            int rand = random.nextInt(i);
            swap(cards,i,rand);
        }
    }
    //撲克牌:
    public static void main(String[] args) {
        List<Card> cards = buyCard();
        System.out.println("買牌:"+cards);
        shuffle(cards);
        System.out.println("洗牌:"+cards);

        System.out.println("接牌:3個人每個人輪流接5張牌");
        ArrayList<List<Card>> hand = new ArrayList<>();
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cards.remove(0);
                hand.get(j).add(card);
            }
        }
        System.out.println("第1個人的牌: "+hand1);
        System.out.println("第2個人的牌: "+hand2);
        System.out.println("第3個人的牌: "+hand3);
        System.out.println("剩下的牌: "+cards);

    }

2.撲克牌運行結果

3.撲克牌代碼創(chuàng)建原理講解

3.1創(chuàng)建撲克牌前的準備工作

class Card {
    private int rank;//數字
    private String suit;//花色

    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "[ 花色:"+this.suit+" "+this.rank+" ]";
    }
}

這為后續(xù)撲克牌的花色以及數字大小創(chuàng)建了類。

    public static void main(String[] args) {
        List<Card> cards = buyCard();
        System.out.println("買牌:"+cards);
        shuffle(cards);
        System.out.println("洗牌:"+cards);

        System.out.println("接牌:3個人每個人輪流接5張牌");
        
        System.out.println("第1個人的牌: "+hand1);
        System.out.println("第2個人的牌: "+hand2);
        System.out.println("第3個人的牌: "+hand3);
        System.out.println("剩下的牌: "+cards);

    }
}

這里我們寫好了我們撲克牌的基本菜單邏輯,即買牌(52張),再洗牌(打亂牌),最后將所有牌分發(fā)給玩游戲的三個人(每人五張)。

3.2 52張撲克牌的創(chuàng)建(除去大小王)

    public static List<Card> buyCard() {
        ArrayList<Card> cards = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {/*
                int rank = j;
                String suit = suits[i];
                Card card = new Card(j,suits[i]);
                cards.add(card);*/
                cards.add(new Card(j,suits[i]));
            }
        }
        return cards;
    }

這里我們定義了buyCard方法來創(chuàng)建我們的52張牌,cards是我們存放卡牌的位置(包含數字以及花色),通過雙循環(huán)來創(chuàng)建我們梅花♣、方片♦、紅桃♥和黑桃♠這四種牌。

3.3洗牌

    private static void swap(List<Card> cards,int i,int j) {
//      Card tmp = cards[i];
        Card tmp = cards.get(i);
//      cards[i] = cards[j];
        cards.set(i,cards.get(j));
//      cards[j] = tmp;
        cards.set(j,tmp);
    }
    public static void shuffle(List<Card> cards) {
        int size = cards.size();
        for (int i = size-1; i > 0; i--) {
            Random random = new Random();
            int rand = random.nextInt(i);
            swap(cards,i,rand);
        }
    }

在寫我們的shuffle洗牌方法前我們寫了swap交換方法,其中swap使用的是空瓶交換原理通過List中get方法來交換數值以及相對應的花色。

而shuffle方法我們則用了size來代表我們卡牌的數量,通過random隨機方法來生成隨機數傳給我們swap交換方法當作形參從而完成我們撲克牌的洗牌。

3.4發(fā)牌

System.out.println("接牌:3個人每個人輪流接5張牌");
ArrayList<List<Card>> hand = new ArrayList<>();
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) {
        Card card = cards.remove(0);
        hand.get(j).add(card);
    }
}
System.out.println("第1個人的牌: "+hand1);
System.out.println("第2個人的牌: "+hand2);
System.out.println("第3個人的牌: "+hand3);
System.out.println("剩下的牌: "+cards);

在創(chuàng)建好牌和洗完牌之后當然就是我們的發(fā)牌了,我們發(fā)牌采取了創(chuàng)建hand的動態(tài)數組來儲存我們的牌,然后我們創(chuàng)建了hand1、hand2以及hand3的三個動態(tài)數組來分別表示我們的三個人,通過兩次循環(huán)達到3個人每個人輪流接5張牌的目的。

最后完成的效果圖如下:

總結

到此這篇關于Java實現(xiàn)撲克牌的創(chuàng)建以及發(fā)放的文章就介紹到這了,更多相關Java撲克牌創(chuàng)建及發(fā)放內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論