Java實(shí)現(xiàn)撲克牌程序
本文實(shí)例為大家分享了Java實(shí)現(xiàn)撲克牌程序的具體代碼,供大家參考,具體內(nèi)容如下
思路:
在實(shí)現(xiàn)之前,先要想好步驟,思路清晰才不會(huì)出錯(cuò)。
要實(shí)現(xiàn)一副撲克牌,首先要?jiǎng)?chuàng)建這個(gè)類,然后有一副撲克牌,之后進(jìn)行洗牌,抓牌。
1.定義一個(gè)Card類
2.實(shí)現(xiàn)這個(gè)游戲:
①構(gòu)造一副撲克牌(52張)這里不包含大小王
②洗牌
③三個(gè)人每個(gè)人抓五張牌
代碼實(shí)現(xiàn)及其細(xì)節(jié):
1.定義一個(gè)Card類
一張牌中包括兩個(gè)屬性:花色和牌面值
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)這個(gè)游戲
寫一個(gè)CardGame來實(shí)現(xiàn)這個(gè)撲克牌游戲,其中分為很多細(xì)小的分支。
1.買一副牌
前面寫了Card來表示一張牌,這里我們買一副牌,就是52個(gè)Card放在一起,就組成一個(gè)List,所以這里一副牌的類型為L(zhǎng)ist<Card>。
public List<MyCard> buyDeck(){
//首先將花色和牌面值陳列出來
//因?yàn)榕泼嬷涤蠥,J,Q,K,這里采用的是字符串?dāng)?shù)組
//也可以將A,J,Q,K單獨(dú)處理,剩下的寫作一個(gè)整型數(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ù)
//寫一個(gè)交換函數(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í)例化一個(gè)Random類
for(int j=deck.size()-1;j>0;j--){
int i=r.nextInt(j); //隨機(jī)產(chǎn)生一個(gè)大于等于0小于51的整數(shù)
swap(deck,i,j); //將生成的0-51的隨機(jī)數(shù)與與最后一個(gè)數(shù)交換實(shí)現(xiàn)洗牌
}
}
3.主函數(shù):
在這里實(shí)現(xiàn)發(fā)牌,每人五張牌,三個(gè)人輪流抓,將三個(gè)人放在一個(gè)List當(dāng)中,三個(gè)人中的牌信息為L(zhǎng)ist<Card>,所以hands的類型為L(zhǎng)ist<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);
//三人輪流抓牌,一人抓五張
//將三個(gè)玩家放到一個(gè)List當(dāng)中
List<List<MyCard>> hands=new ArrayList<>(3);
//三個(gè)人手中每個(gè)人五張牌
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
//ABC三個(gè)人抓牌
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
//從deck里面抓走的
//抓的時(shí)候把最頂上的抓走
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é)果:
后面的沒顯示全

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot 請(qǐng)求參數(shù)忽略大小寫的實(shí)例
這篇文章主要介紹了SpringBoot 請(qǐng)求參數(shù)忽略大小寫的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Apache commons fileupload文件上傳實(shí)例講解
這篇文章主要為大家詳細(xì)介紹了Apache commons fileupload文件上傳實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
springcloud 服務(wù)降級(jí)的實(shí)現(xiàn)方法
這篇文章主要介紹了springcloud 服務(wù)降級(jí)的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
springboot?maven?plugin報(bào)紅的解決辦法
本文主要介紹了springboot?maven?plugin報(bào)紅的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringBoot框架實(shí)現(xiàn)支付和轉(zhuǎn)賬功能
在 Spring Boot 框架中實(shí)現(xiàn)支付和轉(zhuǎn)賬功能時(shí),涉及到多個(gè)細(xì)節(jié)和注意點(diǎn),這些功能通常需要高度的安全性、穩(wěn)定性和可擴(kuò)展性,本文介紹了實(shí)現(xiàn)支付和轉(zhuǎn)賬功能的一些關(guān)鍵點(diǎn),需要的朋友可以參考下2024-08-08

