Java高級(jí)應(yīng)用之斗地主游戲
斗地主綜合案例,供大家參考,具體內(nèi)容如下
運(yùn)用HashMap、ArrayList、List類實(shí)現(xiàn)斗地主綜合案例,模擬斗地主游戲的隨機(jī)發(fā)牌,并按照牌的大小和花色進(jìn)行排列。
斗地主玩家每輪都有三個(gè)玩家,運(yùn)用Collections類中的shuffle()方法打亂一整幅撲克牌,利用取余原理將湊亂的牌發(fā)放給三個(gè)玩家,整副牌發(fā)完后的最后三張永一個(gè)ArrayList存儲(chǔ)作為底牌。具體代碼實(shí)現(xiàn)如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/**
*斗地主綜合案例:有序版本
*1.準(zhǔn)備牌
*2.洗牌
*3.發(fā)牌
*4.排序
*5.看牌
**/
public class DouDizhu02 {
public static void main(String[] args) {
//1。準(zhǔn)備牌
//創(chuàng)建一個(gè)Map集合,存儲(chǔ)牌的索引和組裝好的牌
HashMap<Integer, String> poker = new HashMap<>();
//List集合,存儲(chǔ)牌的索引
ArrayList<Integer> pokerIndex = new ArrayList<>();
//定義兩個(gè)集合,存儲(chǔ)花色和序號(hào)
List<String> colors = List.of("♥", "♦", "♠", "♣");
List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4","3");
//把大王和小王存儲(chǔ)到集合中
int index = 0;
poker.put(index, "大王");
pokerIndex.add(index);
index++;
poker.put(index, "小王");
pokerIndex.add(index);
index++;
//循環(huán)嵌套52張牌
for(String number: numbers){
for(String color : colors){
poker.put(index, color + number);
pokerIndex.add(index);
index++;
}
}
// System.out.println(poker);
// System.out.println(pokerIndex);
/*
2.洗牌
使用Collections中的方法shuffle(list)
*/
Collections.shuffle(pokerIndex);
/*
3.發(fā)牌
*/
//定義四個(gè)集合,存儲(chǔ)玩家牌的索引,和底牌的索引
ArrayList<Integer> player01 = new ArrayList<>();
ArrayList<Integer> player02 = new ArrayList<>();
ArrayList<Integer> player03 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
//遍歷存儲(chǔ)牌索引的list集合,獲取每一個(gè)牌的索引
for (int i = 0; i < pokerIndex.size(); i++) {
Integer in = pokerIndex.get(i);
if(in >= 51){
dipai.add(in);
}else if(i % 3 == 0){
player01.add(in);
}else if(i % 3 == 1){
player02.add(in);
}else if(i % 3 == 2){
player03.add(in);
}
}
/*
4.排序
使用Collections中的方法sort(List)
*/
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
/*
5.看牌
調(diào)用看牌的方法
*/
lookPoker("劉德華", poker, player01);
lookPoker("周星馳", poker, player02);
lookPoker("周潤(rùn)發(fā)", poker, player03);
lookPoker("底牌", poker, dipai);
}
/*
定義一個(gè)看牌的方法,提高代碼的復(fù)用性
參數(shù):
String name:玩家名稱
HashMap<Integer, String> poker:存儲(chǔ)牌的poker集合
ArrayList<Integer> list:存儲(chǔ)玩家和底牌的list集合
查表法:
遍歷玩家或者底牌集合,獲取牌的索引
使用牌的索引,去Map集合中找到對(duì)應(yīng)的牌
*/
public static void lookPoker(String name, HashMap<Integer, String> poker, ArrayList<Integer> list){
//輸出玩家名稱,不換行
System.out.print(name + " :");
for(int key : list){
String value = poker.get(key);
System.out.print(value + " ");
}
System.out.println();
}
}
運(yùn)行結(jié)果如下
牌為隨機(jī)打亂,每次運(yùn)行結(jié)果都不一樣。
劉德華 :♥2 ♦2 ♠A ♦K ♠Q ♣Q ♥9 ♣9 ♥8 ♣8 ♦7 ♠7 ♣7 ♦6 ♣6 ♥5 ♠5 ♥3 周星馳 :♠2 ♥A ♦A ♣K ♦Q ♥J ♦J ♣J ♥10 ♦10 ♠10 ♦9 ♠9 ♦8 ♥7 ♠4 ♣4 周潤(rùn)發(fā) :大王 小王 ♣2 ♣A ♥K ♠K ♥Q ♠J ♣10 ♠8 ♥6 ♠6 ♦5 ♣5 ♥4 ♦4 底牌 :♦3 ♠3 ♣3
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作
這篇文章主要介紹了IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Spring Boot 集成 Mybatis Plus 自動(dòng)填充字段的實(shí)例詳解
這篇文章主要介紹了Spring Boot 集成 Mybatis Plus 自動(dòng)填充字段,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
SpringBoot快速過(guò)濾出一次請(qǐng)求的所有日志的示例代碼
在現(xiàn)網(wǎng)出現(xiàn)故障時(shí),我們經(jīng)常需要獲取一次請(qǐng)求流程里的所有日志進(jìn)行定位,本文給大家介紹了SpringBoot如何快速過(guò)濾出一次請(qǐng)求的所有日志,文中有相關(guān)的代碼和示例供大家參考,需要的朋友可以參考下2024-03-03
Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例
這篇文章主要介紹了Java使用JDBC連接postgresql數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式分析了jdbc連接postgresql數(shù)據(jù)庫(kù)及數(shù)值插入、更新、查詢等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
Mybatis如何使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系
這篇文章主要介紹了Mybatis使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
教你一步到位部署運(yùn)行MyBatis3源碼(保姆級(jí))
一個(gè)框架的運(yùn)行流程從最簡(jiǎn)單的一個(gè)helloworld來(lái)看其源碼就能了解到框架的原理是什么,這篇文章主要給大家介紹了關(guān)于如何一步到位部署運(yùn)行MyBatis3源碼的相關(guān)資料,需要的朋友可以參考下2022-06-06
Java實(shí)現(xiàn)ftp上傳下載、刪除文件及在ftp服務(wù)器上傳文件夾的方法
這篇文章主要介紹了Java實(shí)現(xiàn)ftp上傳下載、刪除文件及在ftp服務(wù)器上傳文件夾的方法,需要的朋友可以參考下2015-11-11

