java實(shí)現(xiàn)撲克牌分發(fā)功能
本文實(shí)例為大家分享了java實(shí)現(xiàn)撲克牌分發(fā)的具體代碼,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)一個(gè)三人斗地主的撲克牌分發(fā)功能
思路:
1、準(zhǔn)備一組54張的撲克牌
2、洗牌
3、將撲克牌分發(fā)到玩家手中
4、查看每個(gè)選手中的撲克牌和地主的底牌
思路補(bǔ)充:先創(chuàng)建兩個(gè)花色和數(shù)字的數(shù)組,再創(chuàng)建一個(gè)List集合,和Map集合,運(yùn)用雙層for循環(huán)將花色和數(shù)字依次組合成52張撲克牌,之后分別在加添加進(jìn)Map集合中的value值中,Map中的key值依次用0-51表示,雙層for循環(huán)的同時(shí)將0-51的值依次賦值給List集合中,循環(huán)結(jié)束后在依次將大王、小王加入Map集合中的value中相對(duì)應(yīng)的key值用52和53表示,還要講52和53賦值到List集合中,此時(shí)所有牌組準(zhǔn)備完畢。
分別創(chuàng)建四個(gè)新List集合,將存放序號(hào)的List集合中的序號(hào)打亂后分發(fā)到玩家手中,最后留三張底牌,添加到他們對(duì)應(yīng)的List集合中
分別將三位玩家和底牌中的序號(hào)集合遍歷,遍歷出的數(shù)值帶入到Map中的get方法的key值中,得到相對(duì)應(yīng)得value值(也就是對(duì)應(yīng)的牌),再將value值賦值給玩家手中對(duì)應(yīng)的序號(hào)值處。
最后將三位玩家和底牌所對(duì)應(yīng)的List集合輸出打印出來即可看到他們被分到的牌。
具體代碼如下:
import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; public class TestPokerPlus { public static void main(String[] args) { //1.創(chuàng)建撲克牌集合 //創(chuàng)建map集合,類似于字典 和 list序號(hào)集合 List list = new ArrayList(); HashMap<Integer,String> map = new HashMap<Integer,String>(); //將花色和數(shù)字及JQK組合添加進(jìn)撲克牌集合map中 String[] color = {"♥","♦","♠","♣"}; String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; int num = 0;//計(jì)數(shù)器思想 for(int i = 0 ;i< number.length;i++){ for(int j = 0 ;j< color.length;j++){ map.put(num,color[j]+number[i]); list.add(num); num++; } } //將序號(hào)集合中加入52,53兩位序列,為之后map集合中加入“大王”、“小王”做準(zhǔn)備 list.add(list.size()); list.add(list.size()); //在加上大王、小王兩張牌 map.put(list.size()-2,"小王"); map.put(list.size()-1,"大王"); //2.打亂 //將序號(hào)集合打亂 Collections.shuffle(list); //3.分牌 //創(chuàng)建三名玩家和底牌集合 List player1 = new ArrayList(); List player2 = new ArrayList(); List player3 = new ArrayList(); List cards = new ArrayList(); //循環(huán)分發(fā)序號(hào) for(int i = 0 ;i<list.size();i++){ if(i<list.size()-3){ if(i % 3 == 1){ player1.add(list.get(i)); }else if(i % 3 == 2){ player2.add(list.get(i)); }else{ player3.add(list.get(i)); } }else{ cards.add(list.get(i)); } } //將分的的序號(hào)升序排列 Collections.sort(player1); Collections.sort(player2); Collections.sort(player3); Collections.sort(cards); //遍歷將3個(gè)玩家和底牌分得的序號(hào)集合 對(duì)照map集合重新將對(duì)應(yīng)的牌賦值給對(duì)應(yīng)的序號(hào) boardAssignment(map, player1); boardAssignment(map, player2); boardAssignment(map, player3); boardAssignment(map, cards); //4.看牌 //打印輸出三名玩家的牌的底牌 System.out.println(player1); System.out.println(player2); System.out.println(player3); System.out.println(cards); } private static void boardAssignment(HashMap<Integer, String> map,List list) { for(int i = 0;i < list.size();i++){ list.set(i, map.get(list.get(i))); } } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisX無法自動(dòng)生成entity實(shí)體類的解決方法
本文主要介紹了MybatisX無法自動(dòng)生成entity實(shí)體類的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06深入學(xué)習(xí)JAVA GC日志的相關(guān)知識(shí)
JVM 在Java應(yīng)用程序優(yōu)化中是不可缺少的一大重項(xiàng),如何合理配置Java參數(shù),如何驗(yàn)證配置參數(shù)的有效性,從GC日志中可以獲得很重要的提示。下面小編就帶大家來一起學(xué)習(xí)一下吧2019-06-06java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法
在我們使用進(jìn)行系統(tǒng)開發(fā)時(shí),為了提高系統(tǒng)的安全性,在登錄的時(shí)候多數(shù)人都會(huì)要求輸入驗(yàn)證,本文介紹了java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法,感興趣的一起來了解一下2021-05-05java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy
這篇文章主要為大家介紹了java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Java實(shí)現(xiàn)List轉(zhuǎn)換為Map的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)List轉(zhuǎn)換為Map的一些常見的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì))
這篇文章主要介紹了Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì))的相關(guān)資料,需要的朋友可以參考下2016-08-08javaWeb連接數(shù)據(jù)庫實(shí)現(xiàn)簡單登陸注冊(cè)功能的全過程
初學(xué)javaWeb,老師留下一小作業(yè),用JAVA實(shí)現(xiàn)與服務(wù)器端交互,實(shí)現(xiàn)登錄和注冊(cè)功能,下面這篇文章主要給大家介紹了關(guān)于javaWeb連接數(shù)據(jù)庫實(shí)現(xiàn)簡單登陸注冊(cè)功能的相關(guān)資料,需要的朋友可以參考下2022-06-06