Java模擬實(shí)現(xiàn)斗地主的洗牌和發(fā)牌
本文實(shí)例為大家分享了Java實(shí)現(xiàn)斗地主的洗牌和發(fā)牌的具體代碼,供大家參考,具體內(nèi)容如下
案例分析:
我們需要模擬斗地主過程中的洗牌、發(fā)牌和看牌。而且要求牌是排好序的。
1.每張撲克牌都有花色和點(diǎn)數(shù),所以我們可以先把花色和點(diǎn)數(shù)存進(jìn)兩個(gè)字符串?dāng)?shù)組,然后再存進(jìn)集合里,而因?yàn)槲覀兒竺嫔婕暗綄?duì)牌進(jìn)行洗牌還有排序等等,所以我們選擇TreeMap集合來存儲(chǔ),鍵是撲克牌的編號(hào),值是撲克牌的花色和點(diǎn)數(shù)(把花色和點(diǎn)數(shù)拼接成一個(gè)字符串)。
2.洗牌洗的是編號(hào),我們?cè)儆肁rrayList集合來存儲(chǔ)牌的編號(hào),調(diào)用Collections集合工具類的shuffle()方法來進(jìn)行洗牌操作。
3.發(fā)牌,我們發(fā)到每個(gè)人手里的牌是排好序的,所以我們選擇TreeSet集合來接收牌。
4.看牌,我們寫個(gè)lookPoker()方法就行了,這個(gè)方法通過TreeSet集合來獲取每個(gè)人牌對(duì)應(yīng)的編號(hào),再去TreeMap集合中的找編號(hào)對(duì)應(yīng)的撲克牌。
具體步驟:
1.創(chuàng)建一個(gè)TreeMap集合來存儲(chǔ)撲克牌編號(hào)和撲克牌花色及點(diǎn)數(shù)
2.定義兩個(gè)數(shù)組分別用來存儲(chǔ)花色和點(diǎn)數(shù)
3.創(chuàng)建一個(gè)ArrayList集合來存儲(chǔ)編號(hào)
4.往HashMap集合中存儲(chǔ)編號(hào)以及對(duì)應(yīng)的撲克牌,同時(shí)往ArrayList集合中存儲(chǔ)編號(hào)
5.洗牌(洗的是編號(hào))
6.發(fā)牌(發(fā)的也是編號(hào),為了保證撲克牌排好序,創(chuàng)建TreeSet集合來接收)
7.看牌(遍歷TreeSet集合,獲取編號(hào),到HashMap集合中找對(duì)應(yīng)的牌)
具體代碼實(shí)現(xiàn)如下:
package com.edu_01; import java.util.ArrayList; import java.util.Collections; import java.util.TreeMap; import java.util.TreeSet; public class Poker { ? ? public static void main(String[] args) { ? ? ? ? //1.創(chuàng)建一個(gè)TreeMap集合來存儲(chǔ)撲克牌編號(hào)和撲克牌花色及點(diǎn)數(shù) ? ? ? ? TreeMap<Integer, String> pokers = new TreeMap<Integer,String>(); ? ? ? ? //2.定義兩個(gè)數(shù)組分別用來存儲(chǔ)花色和點(diǎn)數(shù) ? ? ? ? String[] colors={"?","?","?","?"}; ? ? ? ? String[] numbers={"3","4","5","6","7","8","9","10","J","O","K","A","2"}; ? ? ? ? //3.創(chuàng)建一個(gè)ArrayList集合來存儲(chǔ)編號(hào) ? ? ? ? ArrayList<Integer> indexs = new ArrayList<Integer>(); ? ? ? ? //4.往HashMap集合中存儲(chǔ)編號(hào)以及對(duì)應(yīng)的撲克牌,同時(shí)往ArrayList集合中存儲(chǔ)編號(hào) ? ? ? ? int index=0; ? ? ? ? for (String number : numbers) { ? ? ? ? ? ? for (String color : colors) { ? ? ? ? ? ? ? ? pokers.put(index,color+number); ? ? ? ? ? ? ? ? indexs.add(index); ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? pokers.put(index,"小王"); ? ? ? ? indexs.add(index); ? ? ? ? index++; ? ? ? ? pokers.put(index,"大王"); ? ? ? ? indexs.add(index); ? ? ? ? //5.洗牌(洗的是編號(hào)) ? ? ? ? Collections.shuffle(indexs); ? ? ? ? //6.發(fā)牌(發(fā)的也是編號(hào),為了保證撲克牌排好序,創(chuàng)建TreeSet集合來接收) ? ? ? ? TreeSet<Integer> zhangsan = new TreeSet<Integer>(); ? ? ? ? TreeSet<Integer> lisi = new TreeSet<Integer>(); ? ? ? ? TreeSet<Integer> wangwu = new TreeSet<Integer>(); ? ? ? ? TreeSet<Integer> dipai = new TreeSet<Integer>(); ? ? ? ? for (int i = 0; i < indexs.size(); i++) { ? ? ? ? ? ? if(i>=indexs.size()-3){ ? ? ? ? ? ? ? ? dipai.add(indexs.get(i)); ? ? ? ? ? ? }else if(i%3==0){ ? ? ? ? ? ? ? ? zhangsan.add(indexs.get(i)); ? ? ? ? ? ? }else if(i%3==1){ ? ? ? ? ? ? ? ? lisi.add(indexs.get(i)); ? ? ? ? ? ? }else if(i%3==2){ ? ? ? ? ? ? ? ? wangwu.add(indexs.get(i)); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //7.看牌(遍歷TreeSet集合,獲取編號(hào),到HashMap集合中找對(duì)應(yīng)的牌) ? ? ? ? lookPoker("張三",zhangsan,pokers); ? ? ? ? lookPoker("李四",lisi,pokers); ? ? ? ? lookPoker("王五",wangwu,pokers); ? ? ? ? lookPoker("底牌",dipai,pokers); ? ? } ? ? private static void lookPoker(String name, TreeSet<Integer> indexs, ? ? ? ? ? ? TreeMap<Integer, String> pokers) { ? ? ? ? System.out.print(name+"的牌為:"); ? ? ? ? for (Integer index : indexs) { ? ? ? ? ? ? System.out.print(pokers.get(index)+" ?"); ? ? ? ? } ? ? ? ? System.out.println(); ? ? } }
運(yùn)行結(jié)果:
注意:因?yàn)槲业幕ㄉ怯昧?rdquo;♥”,”♠”,”♦”,”♣”這這幾個(gè)符號(hào),所以保存程序的時(shí)候一定要選擇Save as UTF-8,不能選擇OK,否則會(huì)出現(xiàn)亂碼。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解SpringBoot 解決攔截器注入Service為空問題
這篇文章主要介紹了詳解SpringBoot 解決攔截器注入Service為空問題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用
這篇文章主要介紹了詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10JAVA使用ElasticSearch查詢in和not in的實(shí)現(xiàn)方式
今天小編就為大家分享一篇關(guān)于JAVA使用Elasticsearch查詢in和not in的實(shí)現(xiàn)方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12MybatisPlus分頁(yè)查詢與多條件查詢介紹及查詢過程中空值問題的解決
mybatisplus是個(gè)很好用的插件,相信小伙伴們都知道,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus實(shí)現(xiàn)分頁(yè)查詢與多條件查詢介紹及查詢過程中空值問題的相關(guān)資料,需要的朋友可以參考下2022-10-10