java實(shí)現(xiàn)簡單斗地主(看牌排序)
更新時(shí)間:2020年04月23日 15:42:33 作者:Dr_W
這篇文章主要介紹了java實(shí)現(xiàn)簡單斗地主,看牌進(jìn)行排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡單斗地主的具體代碼,供大家參考,具體內(nèi)容如下
第一種方法
/**
* @param args
*/
/**
* 項(xiàng)目編碼格式:
* 1.GBK:只支持簡體中文
* 2.GB2312:支持簡體和繁體
* 3.UTF-8:國際通用的編碼格式
*
* 模擬實(shí)現(xiàn)斗地主發(fā)牌的過程實(shí)現(xiàn)步驟
* 1.準(zhǔn)備一副撲克牌
* a.定義一個(gè)Map集合用來存放54張撲克 map的key(下標(biāo))對(duì)應(yīng)的是map的值(撲克)
* b.定義一個(gè)list集合 用來保存map集合的key(map集合的key就對(duì)應(yīng)map集合的值)
* c.定義一個(gè)String類型的數(shù)組 用來構(gòu)建牌的花色[♥,♠,♦,♣]
* d.定義一個(gè)String的數(shù)組 用來保存撲克具體的值[3,4,5,6,7,8,9,10,J,Q,K,A,2]
* e.把大王和小王添加到Map集合中
* 2.洗牌
* 通過集合的一個(gè)操作類Collections提供的一個(gè)相關(guān)方法實(shí)現(xiàn)洗牌的操作
* 3.發(fā)牌的過程
* a.定義三個(gè)玩家和一個(gè)接收底牌的集合容器
* b.遍歷ArrayList集合中 如何實(shí)現(xiàn)每個(gè)玩家輪流拿牌
* 【J,Q,9,10,2,A........Q】
* 【0,1,2,3,4,5.........53】
* 發(fā)牌思路分析:
* 如果當(dāng)前的下標(biāo)大于等于51 剩下的牌留作底牌
* 可以使用下標(biāo)對(duì)3求余數(shù) 0%3 = 0 把J給玩家1 1%3 = 1 把Q給玩家2 2%3 = 2 把9給玩家3 3%3 =0 把10給玩家1 4%3 = 1
* 4.排序
* 5.看牌
* 實(shí)現(xiàn)每個(gè)玩家的牌輸出展現(xiàn)
*
*/
/*
* 思路總結(jié):
* 根據(jù)下標(biāo)排序,所以用map,key就是下標(biāo),對(duì)應(yīng)值就是撲克(花色+數(shù))
* 洗牌的shuffle,排序的sort方法只能對(duì)list管用
* 所以用list集合盛放key,對(duì)key洗牌,然后對(duì)key排序
* 用key去map里去對(duì)應(yīng)的值
* */
public static void main(String[] args) {
Map<Integer,String> poker = new HashMap<Integer,String>();
List<Integer> keys = new ArrayList<Integer>();
String[] colors = {"♠","♥","♦","♣"};
String[] values = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int index = 0;
for(String v : values){ //外層循環(huán)數(shù),內(nèi)層循環(huán)花色
for(String c : colors){
poker.put(index,c+v); //向map里添加key和值
keys.add(index); //將key添加到list里,便于排序
index++;
}
}
poker.put(index, "小王");
keys.add(index);
index++;
poker.put(index,"大王");
keys.add(index);
//洗牌
Collections.shuffle(keys);
//分牌
List<Integer> player01 = new ArrayList<Integer>(); //創(chuàng)建玩家和底牌集合,專門盛key,根據(jù)key去map里去值
List<Integer> player02 = new ArrayList<Integer>();
List<Integer> player03 = new ArrayList<Integer>();
List<Integer> dipai = new ArrayList<Integer>();
for(int i=0; i<keys.size(); i++){ //循環(huán)遍歷盛key的list集合
if(i>=51){
dipai.add(keys.get(i));
}else if(i%3==0){
player01.add(keys.get(i));
}else if(i%3==1){
player02.add(keys.get(i));
}else if(i%3==2){
player03.add(keys.get(i));
}
}
//針對(duì)玩家和底牌排序
player01.addAll(dipai);
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
System.out.println("玩家一(地主):");
for(Integer key : player01){
System.out.print(poker.get(key)+" ");
}
System.out.println("\n玩家二:");
for(Integer key : player02){
System.out.print(poker.get(key)+" ");
}
System.out.println("\n玩家三:");
for(Integer key : player03){
System.out.print(poker.get(key)+" ");
}
System.out.println("\n底牌:");
for(Integer key : dipai){
System.out.print(poker.get(key)+" ");
}
}
第二種方法
public static void main(String[] args) {
//保存編號(hào)和撲克牌的對(duì)應(yīng)關(guān)系
HashMap<Integer,String> poker = new HashMap<Integer,String>();
//保存撲克牌的編號(hào)
List<Integer> list = new ArrayList<Integer>();
String[] colors = {"♥","♠","♦","♣"};
String[] values = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//把這兩個(gè)字符串放進(jìn)HashMap集合中(拼接一起 花色+牌號(hào))同時(shí)給每個(gè)放進(jìn)去牌進(jìn)行編碼0--52并存儲(chǔ)
int count = 0;
for(String v : values){
for(String color : colors){
//拼接
String pk = color.concat(v);
//把編碼和牌存儲(chǔ)到HashMap中
poker.put(count, pk);
//把編碼存到ArrayList中
list.add(count);
count ++;
}
}
poker.put(count, "小王");
list.add(count);
count++;
poker.put(count, "大王");
list.add(count);
// for(Integer i :list){
// System.out.print(i+" ");
// }
Collections.shuffle(list);
TreeSet<Integer> player01 = new TreeSet<Integer>();
TreeSet<Integer> player02 = new TreeSet<Integer>();
TreeSet<Integer> player03 = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
for(int i=0; i<list.size(); i++){
if(i>=51){
dipai.add(list.get(i));
}
else if(i%3 == 0){
player01.add(list.get(i));
}
else if(i%3 == 1){
player02.add(list.get(i));
}
else if(i%3 == 2){
player03.add(list.get(i));
}
}
mingpai("玩家一",player01,poker);
mingpai("玩家二",player02,poker);
mingpai("玩家三",player03,poker);
mingpai("底牌",dipai,poker);
}
//參數(shù)列表:String name(玩家名字) ; TreeSet<Integer> i(牌的編號(hào)) ; HashMap<Integer,String> pai(牌)
public static void mingpai(String name,TreeSet<Integer> i,HashMap<Integer,String> pai){
List<Integer> li = new ArrayList<Integer>();
System.out.println(name+"的牌是:");
for(Integer key : i){
//TreeSet的值就是HashMap的鍵,所以可以得到對(duì)應(yīng)的值,也就是牌
String result = pai.get(key);
//輸出看到的牌
System.out.print(result+" ");
}
System.out.println(" ");
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Java將DOCX文檔解析為Markdown文檔的代碼實(shí)現(xiàn)
在現(xiàn)代文檔處理中,Markdown(MD)因其簡潔的語法和良好的可讀性,逐漸成為開發(fā)者、技術(shù)寫作者和內(nèi)容創(chuàng)作者的首選格式,然而,許多文檔仍然以Microsoft Word的DOCX格式保存,本文將介紹如何使用Java和相關(guān)庫將DOCX文檔解析為Markdown文檔,需要的朋友可以參考下2025-04-04
Java日期工具類操作字符串Date和LocalDate互轉(zhuǎn)
這篇文章主要介紹了Java日期工具類操作字符串Date和LocalDate互轉(zhuǎn),文章首先通過需要先引入坐標(biāo)展開主題的相關(guān)內(nèi)容介紹,需要的朋友可以參一下2022-06-06
SpringBoot利用自定義注解實(shí)現(xiàn)多數(shù)據(jù)源
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何利用自定義注解實(shí)現(xiàn)多數(shù)據(jù)源效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下2022-10-10
idea統(tǒng)計(jì)代碼行數(shù)Statistic的步驟詳解
這篇文章主要介紹了idea統(tǒng)計(jì)代碼行數(shù)Statistic的步驟詳解,本文通過使用Statistic插件操作的,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
java計(jì)算工作時(shí)間除去節(jié)假日以及雙休日
這篇文章主要為大家詳細(xì)介紹了java計(jì)算工作時(shí)間除去節(jié)假日以及雙休日的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06

