Java模擬實(shí)現(xiàn)斗地主的洗牌和發(fā)牌
本文實(shí)例為大家分享了Java實(shí)現(xiàn)斗地主的洗牌和發(fā)牌的具體代碼,供大家參考,具體內(nèi)容如下
案例分析:
我們需要模擬斗地主過(guò)程中的洗牌、發(fā)牌和看牌。而且要求牌是排好序的。
1.每張撲克牌都有花色和點(diǎn)數(shù),所以我們可以先把花色和點(diǎn)數(shù)存進(jìn)兩個(gè)字符串?dāng)?shù)組,然后再存進(jìn)集合里,而因?yàn)槲覀兒竺嫔婕暗綄?duì)牌進(jìn)行洗牌還有排序等等,所以我們選擇TreeMap集合來(lái)存儲(chǔ),鍵是撲克牌的編號(hào),值是撲克牌的花色和點(diǎn)數(shù)(把花色和點(diǎn)數(shù)拼接成一個(gè)字符串)。
2.洗牌洗的是編號(hào),我們?cè)儆肁rrayList集合來(lái)存儲(chǔ)牌的編號(hào),調(diào)用Collections集合工具類的shuffle()方法來(lái)進(jìn)行洗牌操作。
3.發(fā)牌,我們發(fā)到每個(gè)人手里的牌是排好序的,所以我們選擇TreeSet集合來(lái)接收牌。
4.看牌,我們寫(xiě)個(gè)lookPoker()方法就行了,這個(gè)方法通過(guò)TreeSet集合來(lái)獲取每個(gè)人牌對(duì)應(yīng)的編號(hào),再去TreeMap集合中的找編號(hào)對(duì)應(yīng)的撲克牌。
具體步驟:
1.創(chuàng)建一個(gè)TreeMap集合來(lái)存儲(chǔ)撲克牌編號(hào)和撲克牌花色及點(diǎn)數(shù)
2.定義兩個(gè)數(shù)組分別用來(lái)存儲(chǔ)花色和點(diǎn)數(shù)
3.創(chuàng)建一個(gè)ArrayList集合來(lái)存儲(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集合來(lái)接收)
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集合來(lái)存儲(chǔ)撲克牌編號(hào)和撲克牌花色及點(diǎn)數(shù)
? ? ? ? TreeMap<Integer, String> pokers = new TreeMap<Integer,String>();
? ? ? ? //2.定義兩個(gè)數(shù)組分別用來(lái)存儲(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集合來(lái)存儲(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集合來(lái)接收)
? ? ? ? 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í)有所幫助,也希望大家多多支持腳本之家。
- JAVA ArrayList詳細(xì)介紹(示例)
- Java中ArrayList類的使用方法
- java的arraylist排序示例(arraylist用法)
- Java實(shí)現(xiàn)洗牌發(fā)牌的方法
- Java ArrayList 數(shù)組之間相互轉(zhuǎn)換
- Java實(shí)現(xiàn)撲克牌洗牌和發(fā)牌
- Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌
- Java超詳細(xì)教你寫(xiě)一個(gè)斗地主洗牌發(fā)牌系統(tǒng)
- Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的示例代碼
- Java中ArrayList具體實(shí)現(xiàn)之簡(jiǎn)單的洗牌算法
相關(guān)文章
idea中斷點(diǎn)類型之All和Thread的區(qū)別介紹
使用all模式對(duì)于程序中含有多個(gè)線程來(lái)說(shuō),會(huì)將多個(gè)線程都阻塞在斷點(diǎn),此時(shí)所有的線程都執(zhí)行到此處,在最后一個(gè)線程執(zhí)行到此處是會(huì)發(fā)生暫停,在這之前的線程會(huì)繼續(xù)執(zhí)行到任意位置,本文給大家詳細(xì)介紹下idea中斷點(diǎn)類型之All和Thread的區(qū)別,感興趣的朋友一起看看吧2022-03-03
Java多線程 兩階段終止模式Two-Phase Termination Patter
這篇文章主要介紹了Java多線程 兩階段終止模式Two-Phase Termination Patter,該模式有兩個(gè)角色,分別是Terminator,終止者,負(fù)責(zé)接收終止請(qǐng)求,執(zhí)行終止處理,處理完成后再終止自己。TerminationRequester終止請(qǐng)求發(fā)出者,用來(lái)向Terminator發(fā)出終止請(qǐng)求,需要的朋友可以參考一下2021-10-10
springboot+mybatis-plus+oracle實(shí)現(xiàn)邏輯刪除
最近在做一個(gè)前后端分離的小項(xiàng)目,需要?jiǎng)h除用戶表的用戶,本文主要實(shí)現(xiàn)了springboot+mybatis-plus+oracle邏輯刪除,具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
IDEA?2020.3最新永久激活碼(免費(fèi)激活到?2099?年,親測(cè)有效)
分享一下?IntelliJ?IDEA?2020.3.1?最新激活注冊(cè)碼,破解教程如下,可免費(fèi)激活至?2099?年,親測(cè)有效,本文給大家分享兩種方法,感興趣的朋友參考下吧2021-01-01
使用maven的profile構(gòu)建不同環(huán)境配置的方法
這篇文章主要介紹了使用maven的profile構(gòu)建不同環(huán)境配置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼的相關(guān)資料,最近需要一個(gè)密碼強(qiáng)度正則表達(dá)式在用戶注冊(cè)時(shí)校驗(yàn)用戶密碼強(qiáng)度,需要的朋友可以參考下2023-08-08

