日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java学习笔记】斗地主规则抽牌模拟(利用LinkedList集合及Collections集合工具类实现)

發布時間:2023/12/20 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java学习笔记】斗地主规则抽牌模拟(利用LinkedList集合及Collections集合工具类实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【Java學習筆記】斗地主規則抽牌模擬(利用LinkedList集合及Collections集合工具類實現)

在這個需求下,我分別設計了3個類:PokerCard(撲克牌)類PokerCardDeck(牌堆)類Player(玩家)類

一、屬性分析

PokerCard(撲克牌)類中有兩個屬性:

//表示1副撲克牌的編號,整數類型,0-53private int id;//表示撲克牌的值,整數類型,3最小,大王最大,分別對應0-14private int cardValue;

PokerCardDeck(牌堆)類中有三個屬性:

//表示牌堆,內容為PokerCard的LinkedList//采用LinkedList集合來表示撲克牌堆,它具有查找慢,增刪快的特點,比較適合表示撲克牌堆private LinkedList<PokerCard> pokerCardDeck = new LinkedList<>();

Player(玩家)類中有三個屬性:

//姓名,字符串類型private String name;//用分表示的錢,整數類型private int money;//表示手牌,一個PokerCardDeck類的對象集合private PokerCardDeck handCards = new PokerCardDeck();

二、方法分析

(一)PokerCard(撲克牌)類

PokerCard(撲克牌)類中,除了基本的無參構造、geter、seter方法之外,著重講四個核心方法:

一是有參構造,我可以通過撲克牌的編號來唯一確定其花色和值,那么有參構造只需要傳遞撲克牌的編號即可:

public PokerCard(int id) {this.id = id;//區分大小王,設id值為52、53分別為大小王,其值高于其他的牌,分別設為13、14if(id < 52){this.cardValue = id % 13;}else if(id == 52){this.cardValue = 13;}else {this.cardValue = 14;}}

二是翻譯撲克牌的值為牌面值的方法,現實我們看到牌面值比如:“2”、“A”、“K”等等就知道哪張牌大,但計算機需要翻譯一下,反之亦然:

//將撲克牌值轉換成牌面值的字符串的方法private String translateCardValue (){String str = "";switch (this.cardValue){//大王與小王不需要翻譯case 14:break;case 13:break;case 12:str = "2";break;case 11:str = "A";break;case 10:str = "K";break;case 9:str = "Q";break;case 8:str = "J";break;//3是最小的,值為0,所以牌面值就是cardValue值+3在轉換成字符串default:str = (this.cardValue+3+"");}return str;}

三是重寫toString方法,將花色+牌面值格式化輸出:

//重寫toString方法,根據id值判斷以方便直接輸出@Overridepublic String toString() {String str = "";switch (this.id / 13){case 0:str += "方塊?";break;case 1:str += "梅花?";break;case 2:str += "紅桃?";break;case 3:str += "黑桃?";break;default :if(id == 52){str += "joker";} else {str += "JOKER";}}str += this.translateCardValue();return str;}

四是為方便手牌的排序,我們需要讓PokerCard實現Comparable接口,并重寫其中的CompareTo方法:

public class PokerCard implements Comparable<PokerCard>{...} //實現了Comparable接口,則必須重寫compareTo方法,用于比較兩個PokerCard對象的大小//撲克牌采用降序排序,故用o - this@Overridepublic int compareTo(PokerCard o) {//如果值相等,則比較id值,因為花色大的id值也大,相當于比花色if(o.getCardValue() == this.getCardValue()){return o.getId() - this.getId();}else {return o.getCardValue() - this.getCardValue();}}

(二)PokerCardDeck(牌堆)類

PokerCardDeck(牌堆)類中,除了基本的構造方法、geter、seter方法之外,也著重講四個核心方法:

一是填充牌堆方法:

//初始化填充牌堆,默認有1副牌public void fillDeck(){for (int i = 0; i < 54; i++) {this.pokerCardDeck.add(new PokerCard(i));}//執行一次洗牌方法shuffleDeck();}//fillDeck方法的重載,帶參數n,表示有n副牌,保留功能public void fillDeck(int n){for(int j = 0;j < n ;j++){for (int i = 0; i < 54; i++) {this.pokerCardDeck.add(new PokerCard(i));}}//執行一次洗牌方法shuffleDeck();}

二是洗牌方法,Collections集合工具類中有現成的亂序方法shuffle,拿來用即可:

//利用Collections類中shuffle方法來亂序牌堆public void shuffleDeck(){Collections.shuffle(this.pokerCardDeck);}

三是排序方法,之前在PokerCard(撲克牌)類中實現接口并重寫方法就為了能夠正常使用Collections集合工具類中有現成的排序方法sort:

//利用Collections類中的sort方法進行排序public void sortDeck(){Collections.sort(this.pokerCardDeck);}

四是格式化打印牌堆的方法:

//格式化打印牌堆的方法,每隔5張牌換行public void printDeck(){//LinkedList是有序的,可以通過索引來訪問數據for (int i = 0; i < pokerCardDeck.size(); i++) {if(i != 0 && i%5 == 0){System.out.println();}System.out.print(pokerCardDeck.get(i) + "\t");}System.out.println();}

(三)Player(玩家)類

Player(玩家)類中,除了基本的無參構造、geter、seter方法之外,著重講兩個核心方法:

一是有參構造,錢數屬性在這個例子中沒有實際使用到,但也保留著相應的構造方法:

public Player(String name) {this.name = name;}public Player(String name, int money) {this.name = name;this.money = money;}

二是抽牌的方法,這里返回一個布爾值,用來表示抽牌是否成功:

//抽牌方法,從牌堆頂中彈出一張牌,Player手牌增加一張牌public boolean drawCard(PokerCardDeck pokerCardDeck){//抽牌規則采用1副牌的斗地主規則,留三張底牌共地主使用if(pokerCardDeck.getPokerCardDeck().size() == 3){return false;}this.handCards.getPokerCardDeck().add(pokerCardDeck.getPokerCardDeck().pop());return true;}//抽牌方法的重載,適用于n副牌的斗地主public boolean drawCard(PokerCardDeck pokerCardDeck,int n){if(pokerCardDeck.getPokerCardDeck().size() == (3*n)){return false;}this.handCards.getPokerCardDeck().add(pokerCardDeck.getPokerCardDeck().pop());return true;}

三、程序入口main

不羅嗦了,上代碼:

public class Application {public static void main(String[] args) {PokerCardDeck deck = new PokerCardDeck();Player player1 = new Player("劉備");Player player2 = new Player("關羽");Player player3 = new Player("張飛");deck.fillDeck();//邊判斷邊執行,drawCard方法返回的是布爾值while (player1.drawCard(deck) && player2.drawCard(deck) && player3.drawCard(deck)){}System.out.println(player1.getName() + "的牌是:");player1.getHandCards().sortDeck();player1.getHandCards().printDeck();System.out.println(player2.getName() + "的牌是:");player2.getHandCards().sortDeck();player2.getHandCards().printDeck();System.out.println(player3.getName() + "的牌是:");player3.getHandCards().sortDeck();player3.getHandCards().printDeck();System.out.println("3張底牌是:");deck.printDeck();} }

程序運行的結果如下:

劉備的牌是: joker 黑桃?2 方塊?2 梅花?A 方塊?A 黑桃?K 方塊?K 黑桃?J 梅花?J 黑桃?9 梅花?9 紅桃?8 黑桃?7 梅花?7 紅桃?6 黑桃?4 黑桃?3 關羽的牌是: JOKER 紅桃?2 黑桃?A 紅桃?A 紅桃?K 梅花?K 黑桃?Q 梅花?Q 方塊?Q 紅桃?J 方塊?J 方塊?9 紅桃?7 紅桃?5 紅桃?4 方塊?4 方塊?3 張飛的牌是: 梅花?2 紅桃?Q 黑桃?10 紅桃?10 方塊?10 黑桃?8 梅花?8 方塊?8 方塊?7 黑桃?6 梅花?6 黑桃?5 梅花?5 方塊?5 梅花?4 紅桃?3 梅花?3 3張底牌是: 方塊?6 梅花?10 紅桃?9

3D這運氣,實錘黑臉了。

20200706

總結

以上是生活随笔為你收集整理的【Java学习笔记】斗地主规则抽牌模拟(利用LinkedList集合及Collections集合工具类实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久麻豆 | 国产精品无码中文 | 国产午夜电影在线观看 | 亚洲精品国产suv | 日韩在线观看 | 欧美麻豆 | 国产成人精品视频在线观看 | jizz性欧美15| 娇妻第一次尝试交换的后果 | 九九爱精品视频 | 久久久久免费视频 | 精品久久久无码中文字幕边打电话 | 欧美亚洲一级片 | 天天干夜夜操视频 | 97人妻人人澡人人爽人人精品 | 中文字幕91爱爱 | 曰韩av| 久久精品视 | 国产精品66| 亚洲成人久久精品 | 久久免费看少妇 | 欧美一级一区二区三区 | 亚洲综合色网站 | 欧美日韩有码 | av在线影音 | 另类一区二区三区 | 日韩精品中文字幕一区二区三区 | 成人影视免费观看 | 免费一区| 最近中文字幕在线中文视频 | 男人天堂2020 | 91色在线| 超碰h | 午夜你懂的 | 日韩成人av毛片 | 亚洲人成网站999久久久综合 | a天堂在线观看视频 | 成人啪啪网站 | 黄a在线观看 | 超级碰碰97 | a网址 | 中国黄色网页 | 国产精品.www | 日韩av一卡二卡 | 国产xxxxx在线观看 | 华人永久免费 | 息与子五十路翔田千里 | 成年人网站免费观看 | 按摩害羞主妇中文字幕 | 男人天堂成人 | 青青欧美| 热热热热色 | 黄色aa大片 | 午夜精品欧美 | 久色视频在线观看 | 夜夜爽www| 亚洲m码 欧洲s码sss222 | 日本一区免费电影 | aaaa黄色片 | 蜜桃视频在线观看网站 | 撸撸在线视频 | 粉色午夜视频 | 亚洲a影院 | 伊人91 | 国产一区二区网址 | 亚洲中午字幕 | 欧美在线观看视频一区 | 91av在线视频观看 | wwwav视频 | 亚洲成人黄色 | 深夜福利国产 | 亚洲大胆| 国产精品激情 | 一区二区三区在线免费观看 | 色av导航| 欧美日韩资源 | 色噜噜狠狠一区二区三区 | 成人影 | 亚洲激情一区二区 | 亚洲激情综合 | 人妖粗暴刺激videos呻吟 | 爱爱视频在线看 | 超碰人人人人人人人 | 亚洲视屏在线观看 | 日日射射 | 免费看欧美成人a片无码 | 欧美日韩精品亚洲精品 | 日韩av一区二区在线观看 | 国产区在线观看视频 | 69影院在线观看 | 一区二区三区四区在线视频 | 青娱乐国产在线视频 | 天天夜夜久久 | 亚洲最新av | 91欧美成人 | 黄色网址最新 | wwwxx在线 | 天天干夜夜欢 | 逼逼av|