java集合模擬實(shí)現(xiàn)斗地主洗牌和發(fā)牌
本文實(shí)例為大家分享了java實(shí)現(xiàn)斗地主洗牌和發(fā)牌的具體代碼,供大家參考,具體內(nèi)容如下
1:用ArrayList集合實(shí)現(xiàn)
案例分析:
我們現(xiàn)在要做的是模擬斗地主小游戲來(lái)進(jìn)行洗牌和發(fā)牌。
具體步驟:
A:首先,創(chuàng)建一個(gè)ArrayList集合來(lái)存儲(chǔ)牌,將牌的花色和點(diǎn)數(shù)存儲(chǔ)在倆個(gè)字符串?dāng)?shù)組中中,然后用for循環(huán)加強(qiáng)遍歷將每張牌的花色點(diǎn)數(shù)及大王小王存儲(chǔ)在集合中。
B:進(jìn)行洗牌,調(diào)用collectionas的shuffle方法。
C:進(jìn)行發(fā)牌,創(chuàng)建四個(gè)ArrayList集合,分別用來(lái)存儲(chǔ)玩家一,玩家二,玩家三,和底牌對(duì)應(yīng)發(fā)到手上的牌。然后用for循環(huán)遍歷這幅撲克牌用If語(yǔ)句判斷,然后發(fā)牌。
D:創(chuàng)建一個(gè)看牌的方法,調(diào)用即可。
具體代碼:
package com.study_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
* 模擬斗地主洗牌和發(fā)牌
* 分析步驟:
* 1:創(chuàng)建一個(gè)集合來(lái)存儲(chǔ)牌
* 2:洗牌
* 3:發(fā)牌
* 4:看牌
*
*/
public class Poker1 {
public static void main(String[] args) {
//創(chuàng)建一個(gè)集合來(lái)存牌
ArrayList <String> Pokers=new ArrayList<>();
String[] colors={"♠","♥","♦","♣"};
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
for(String color:colors){
for(String number:numbers){
Pokers.add(color+number);
}
Pokers.add("大王");
Pokers.add("小王");
}//洗牌
Collections.shuffle(Pokers);
//發(fā)牌
/*創(chuàng)建四個(gè)集合來(lái)存儲(chǔ)
* 1:張三
* 2:李四
* 3:王麻
* 4:底牌
*/
ArrayList<String> Zhangsan=new ArrayList<>();
ArrayList<String> Lisi=new ArrayList<>();
ArrayList<String> Wangma=new ArrayList<>();
ArrayList<String> Dipai=new ArrayList<>();
for(int i=0;i<Pokers.size();i++){
if(i>=Pokers.size()-3){
Dipai.add(Pokers.get(i));
}else if(i%3==0){
Zhangsan.add(Pokers.get(i));
}else if(i%3==1){
Lisi.add(Pokers.get(i));
}else if(i%3==2){
Wangma.add(Pokers.get(i));
}
}//看牌
lookPokers("張三",Zhangsan);
lookPokers("李四",Lisi);
lookPokers("王麻",Wangma);
lookPokers("底牌",Dipai);
}
private static void lookPokers(String name, ArrayList<String> Pokers){
System.out.println(name+"的牌是:");
for(String poker:Pokers){
System.out.print(poker+" ");
}System.out.println();
}
}
運(yùn)行結(jié)果:

2:用TreeMap集合實(shí)現(xiàn)
具體步驟:
A:創(chuàng)建TreeMap集合存儲(chǔ)牌,并且大的鍵對(duì)應(yīng)大的牌,小的鍵對(duì)應(yīng)小的牌,同上創(chuàng)建倆個(gè)數(shù)組,一個(gè)用來(lái)存儲(chǔ)花色,一個(gè)用來(lái)存儲(chǔ)點(diǎn)數(shù),另外創(chuàng)建一個(gè)ArrayList集合,用來(lái)存儲(chǔ)沒有任意一張牌對(duì)應(yīng)的索引。
B:.洗牌,洗的是索引(map集合中每一張牌對(duì)應(yīng)的鍵),我們這里用的是ArrayList來(lái)存儲(chǔ)。
C:發(fā)牌,發(fā)的索引,并且對(duì)這個(gè)索引進(jìn)行排序,這是利用了TreeSet的有序性。
D:看牌,根據(jù)發(fā)到的索引去map集合中找出對(duì)應(yīng)的值。
具體代碼:
package com.study_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;
/**
* 1.創(chuàng)建Map集合存儲(chǔ)牌,并且大的鍵對(duì)應(yīng)大的牌,小的鍵對(duì)應(yīng)小的牌
* 2.洗牌,洗的是索引(map集合中每一張牌對(duì)應(yīng)的鍵)
* 3.發(fā)牌,發(fā)的索引,并且歲這個(gè)索引進(jìn)行排序
* 4.看牌,根據(jù)發(fā)到的鍵去map集合中找出對(duì)應(yīng)的值
*/
public class Poker2 {
public static void main(String[] args) {
//創(chuàng)建一個(gè)TreeMap集合
TreeMap<Integer,String> Pokers=new TreeMap<>();
String[] colors={"♥","♠","♦","♣"};
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
//創(chuàng)建一個(gè)ArrayList集合,用來(lái)存儲(chǔ)沒有一張牌對(duì)應(yīng)的索引
ArrayList<Integer> indexs=new ArrayList<>();
int index = 0;
for(String color:colors){
for(String number:numbers){
Pokers.put(index, color+number);
indexs.add(index);
index++;
}//存大王,小王
Pokers.put(index, "大王");
indexs.add(index);
index++;
Pokers.put(index, "小王");
indexs.add(index);
index++;
}//洗牌,洗的是索引(map集合中每一張牌對(duì)應(yīng)的鍵)
Collections.shuffle(indexs);
//發(fā)牌,發(fā)的是索引根據(jù)索引來(lái)找它對(duì)應(yīng)的值
TreeSet<Integer> zhangsan=new TreeSet<>();
TreeSet<Integer> lisi=new TreeSet<>();
TreeSet<Integer> wangma=new TreeSet<>();
TreeSet<Integer> dipai=new TreeSet<>();
for(int i=0;i<Pokers.size();i++){
if(i>=Pokers.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){
wangma.add(indexs.get(i));
}
}//看牌
lookPoker("張三",zhangsan,Pokers);
lookPoker("李四",lisi,Pokers);
lookPoker("王麻",wangma,Pokers);
lookPoker("底牌",dipai,Pokers);
}
private static void lookPoker(String name, TreeSet<Integer> indexs,
TreeMap<Integer, String> Pokers) {
System.out.println(name+"的牌是:");
for(Integer index:indexs){
System.out.print(Pokers.get(index));
}System.out.println();
}
}
運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
配置了jdk的環(huán)境idea卻提示找不到j(luò)dk解決辦法
在使用Java編程語(yǔ)言進(jìn)行開發(fā)時(shí),IDEA是一個(gè)非常流行和強(qiáng)大的集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關(guān)于配置了jdk的環(huán)境idea卻提示找不到j(luò)dk的解決辦法,需要的朋友可以參考下2023-12-12
Java中 ? extends T 和 ? super&nb
本文主要介紹了Java中 ? extends T 和 ? super T的理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇使用bitset實(shí)現(xiàn)毫秒級(jí)查詢(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10
基于Calendar獲取當(dāng)前時(shí)間的性能比較
這篇文章主要介紹了Calendar獲取當(dāng)前時(shí)間的性能比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Spring-AOP 靜態(tài)正則表達(dá)式方法如何匹配切面
這篇文章主要介紹了Spring-AOP 靜態(tài)正則表達(dá)式方法如何匹配切面的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

