java模擬斗地主發(fā)牌功能
本文實(shí)例為大家分享了java模擬斗地主發(fā)牌的具體代碼,供大家參考,具體內(nèi)容如下
1.案例介紹
規(guī)則:
- 組裝54張撲克牌
- 54張牌順序打亂
- 三個(gè)玩家參與游戲,三人交替摸牌,每人17張牌,后三張留作底牌
- 查看三人各自手中的牌(按照牌的大小排序)、底牌
2. 分析
1)、準(zhǔn)備牌:
完成數(shù)字與紙牌的映射關(guān)系:
使用雙列Map(HashMap)集合,完成一個(gè)數(shù)字與字符串紙牌的對(duì)應(yīng)關(guān)系(相當(dāng)于一個(gè)字典)。
2)、洗牌:
通過數(shù)字完成洗牌發(fā)牌
發(fā)牌: 將每個(gè)人以及底牌設(shè)計(jì)為ArrayList,將后3張牌直接存放于底牌,剩余牌通過對(duì)3取模依次發(fā)牌。
存放的過程中要求數(shù)字大小與斗地主規(guī)則的大小對(duì)應(yīng)。
將代表不同紙牌的數(shù)字分配給不同的玩家與底牌。
3)、看牌:
通過Map集合找到對(duì)應(yīng)字符展示。
通過查詢紙牌與數(shù)字的對(duì)應(yīng)關(guān)系,由數(shù)字轉(zhuǎn)成紙牌字符串再進(jìn)行展示。
3.代碼
public class Test7 { public static void main(String[] args) { //定義一個(gè)Map集合和List集合來存取牌號(hào)和索引 Map<Integer, String> map = new HashMap(); List<Integer> pokerindex = new ArrayList<>(); //定義牌 String[] num = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; String[] color = {"♥", "♠", "♣", "♦"}; //存牌號(hào)和與之對(duì)應(yīng)的索引 int index = 0; for (String s : num) { for (String c : color) { map.put(index, c + s); pokerindex.add(index); index++; } } //存大小王 map.put(index, "大王"); pokerindex.add(index); index++; map.put(index, "小王"); pokerindex.add(index); //打亂牌組; Collections.shuffle(pokerindex); //創(chuàng)建四個(gè)集合 List<Integer> dipai = new ArrayList<>(); List<Integer> player1 = new ArrayList<>(); List<Integer> player2 = new ArrayList<>(); List<Integer> player3 = new ArrayList<>(); //將打亂的索引數(shù)組分配給三個(gè)人 for (int i = 0; i < pokerindex.size(); i++) { if (i > 50) { dipai.add(pokerindex.get(i)); } else if (i % 3 == 0) { player1.add(pokerindex.get(i)); } else if (i % 3 == 2) { player2.add(pokerindex.get(i)); } else if (i % 3 == 1) { player3.add(pokerindex.get(i)); } } //給每個(gè)人的牌組排序 Collections.sort(player1); Collections.sort(player2); Collections.sort(player3); Collections.sort(dipai); //顯示每個(gè)人的牌組 show("張三", map, player1); show("李四", map, player2); show("王五", map, player3); show("底牌", map, dipai); } //定義一個(gè)方法用來顯示牌組 public static void show(String name, Map<Integer, String> map, List<Integer> player) { System.out.print(name); for (int i = 0; i < player.size(); i++) { Integer ii = player.get(i); System.out.print(map.get(ii) + " "); } System.out.println(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java模擬實(shí)現(xiàn)斗地主發(fā)牌
- java簡(jiǎn)單實(shí)現(xiàn)斗地主發(fā)牌功能
- Java實(shí)現(xiàn)斗地主的發(fā)牌功能
- Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌
- Java斗地主發(fā)牌課程設(shè)計(jì)
- java代碼實(shí)現(xiàn)斗地主發(fā)牌功能
- java實(shí)現(xiàn)斗地主發(fā)牌功能
- 用java實(shí)現(xiàn)斗地主發(fā)牌過程
- java實(shí)現(xiàn)斗地主發(fā)牌系統(tǒng)
- java集合模擬實(shí)現(xiàn)斗地主洗牌和發(fā)牌
相關(guān)文章
mybatis-plus自動(dòng)填充插入更新時(shí)間有8小時(shí)時(shí)差
本文主要介紹了mybatis-plus自動(dòng)填充插入更新時(shí)間有8小時(shí)時(shí)差,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解
這篇文章主要介紹了java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解,一種使用tomcat的websocket實(shí)現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07基于Java Socket實(shí)現(xiàn)一個(gè)簡(jiǎn)易在線聊天功能(一)
這篇文章主要給大家介紹基于Java Socket實(shí)現(xiàn)一個(gè)簡(jiǎn)易在線聊天功能(一),分為客戶端和服務(wù)端兩段代碼,非常具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java
這篇文章主要為大家介紹了解決IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08GateWay動(dòng)態(tài)路由與負(fù)載均衡詳細(xì)介紹
這篇文章主要介紹了GateWay動(dòng)態(tài)路由與負(fù)載均衡,GateWay支持自動(dòng)從注冊(cè)中心中獲取服務(wù)列表并訪問,即所謂的動(dòng)態(tài)路由2022-11-11java發(fā)送email一般步驟(實(shí)例講解)
下面小編就為大家?guī)硪黄猨ava發(fā)送email一般步驟(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09MyBatis-plus數(shù)據(jù)庫(kù)字段排序不準(zhǔn)確的解決
這篇文章主要介紹了MyBatis-plus數(shù)據(jù)庫(kù)字段排序不準(zhǔn)確的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02詳解Java Proxy動(dòng)態(tài)代理機(jī)制
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Java動(dòng)態(tài)代理機(jī)制展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06