基于Java的斗地主游戲案例開發(做牌、洗牌、發牌、看牌

package Game;import java.util.ArrayList;
import java.util.Collections;public class PokerGame01 {//牌盒//?3 ?3static ArrayList<String> list = new ArrayList<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一個牌的花色for (String n : number) {//n表示每一種牌號list.add(c + n);}}list.add("大王");list.add("小王");}public PokerGame01() {// 洗牌Collections.shuffle(list);// 發牌//定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根據索引找到牌號,本質是要把前三張牌給地主String poke = list.get(i);//得到了第i張牌if (i <= 2) {dizhu.add(poke);//前三張給地主//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//看牌lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循環遍歷得到每一張牌System.out.print(poke + " ");}System.out.println();}
}

排序的

package Game;import java.util.*;public class PokerGame02 {//牌盒//?3 ?3//鍵是序號,牌是值//此時只要把牌跟序號產生對應關系即可,不需要按照序號進行排序,所以只需HashMap即可static HashMap<Integer, String> hm = new HashMap<>();//用來存儲序號的單列集合static ArrayList<Integer> list = new ArrayList<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
/*{1=?3, 2=?4, 3=?5, 4=?6, 5=?7, 6=?8, 7=?9, 8=?10, 9=?J, 10=?Q, 11=?K, 12=?A, 13=?2, 14=?3,15=?4, 16=?5, 17=?6, 18=?7, 19=?8, 20=?9, 21=?10, 22=?J, 23=?Q, 24=?K, 25=?A, 26=?2, 27=?3,28=?4, 29=?5, 30=?6, 31=?7, 32=?8, 33=?9, 34=?10, 35=?J, 36=?Q, 37=?K, 38=?A, 39=?2, 40=?3,41=?4, 42=?5, 43=?6, 44=?7, 45=?8, 46=?9, 47=?10, 48=?J, 49=?Q, 50=?K, 51=?A, 52=?2}很明顯可以看出沒有按照順序起好牌 應該先把數字一樣的放在一起,而不是把花色一樣的放在一起解決: 交換color和number即可
*///定義一個序號int num = 1;for (String n : number) {//n表示每一種牌號for (String c : color) {//c表示每一個牌的花色hm.put(num, c + n);list.add(num);num++;}}hm.put(num, "小王");list.add(num);num++;hm.put(num, "大王");list.add(num);}public PokerGame02() {// 洗牌Collections.shuffle(list);// 發牌/*
[39, 35, 7]
[28, 31, 15, 54, 14, 24, 3, 46, 43, 22, 37, 41, 29, 45, 16, 30, 48]
[33, 49, 11, 13, 38, 27, 25, 50, 20, 9, 1, 32, 19, 10, 44, 21, 40]
[53, 8, 34, 36, 17, 42, 5, 18, 2, 23, 12, 26, 4, 47, 6, 51, 52]
用ArrayList集合存儲的索引是亂序的,我們本質是要根據序號也就是索引去到map集合里面找到牌,所以序號要有序*//*[5, 10, 34][2, 4, 7, 8, 13, 17, 18, 19, 20, 22, 27, 35, 37, 38, 39, 40, 42][1, 9, 14, 16, 23, 24, 28, 29, 30, 31, 32, 36, 41, 43, 46, 51, 52][3, 6, 11, 12, 15, 21, 25, 26, 33, 44, 45, 47, 48, 49, 50, 53, 54]*///定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌TreeSet<Integer> dizhu = new TreeSet<>();TreeSet<Integer> player1 = new TreeSet<>();TreeSet<Integer> player2 = new TreeSet<>();TreeSet<Integer> player3 = new TreeSet<>();//獲取所有的鍵,把這些鍵放入單列集合當中// Set<Integer> integers1 = hm.keySet();for (int i = 0; i < list.size(); i++) {//根據索引找到牌的序號,本質是要把前三張牌的序號給地主int number = list.get(i);  //得到了第i張牌的序號if (i <= 2) {dizhu.add(number); //前三張牌的序號給地主// integers1.add(poke);//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(number);} else if (i % 3 == 1) {player2.add(number);} else {player3.add(number);}}//看牌lookpoke("底牌",dizhu);lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);// look("趙六",integers1);}/** 參數一:玩家的名字* 參數二:牌的序號* */public void lookpoke(String name, TreeSet<Integer> ts) {System.out.print(name + ": ");for (int num : ts) {//num就是代表的是序號,遍歷方法1 通過鍵找值的方式遍歷map集合//遍歷TreeSet集合得到每一個序號,再拿著序號到Map集合中去找真正的牌String poke = hm.get(num);//通過鍵(序號)拿到了每一張牌(值)System.out.print(poke + " ");}System.out.println();}//遍歷單列集合,得到每一個鍵;/* public void look(String name, Set<Integer> key) {System.out.print(name+": ");//遍歷單列集合,得到每一個鍵for (int num : key) {//num代表就是序號//通過序號(鍵)去找到map集合里面的值String value = hm.get(num);System.out.print(value+" ");}System.out.println();}*/
}

package Game;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;public class PokerGame03 {//牌盒//?3 ?3static ArrayList<String> list = new ArrayList<>();//創建一個集合,用來添加牌的價值,牌號是鍵,價值是值static HashMap<String, Integer> hm = new HashMap<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一個牌的花色for (String n : number) {//n表示每一種牌號list.add(c + n);}}list.add(" 大王");list.add(" 小王");//指定牌的價值//牌上的數字到Map集合中判斷是否存在//存在,獲取價值//不存在,本身的數字就是價值hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);}public PokerGame03() {// 洗牌Collections.shuffle(list);// 發牌//定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根據索引找到牌號,本質是要把前三張牌給地主String poke = list.get(i);//得到了第i張牌if (i <= 2) {dizhu.add(poke);//前三張給地主//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//排序order(dizhu);order(player1);order(player2);order(player3);//看牌lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);lookpoke("底牌",dizhu);}//利用牌的價值進行排序//參數:集合//?5 ?3 ?6 ?7 ?9private void order(ArrayList<String> list) {Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//o1:表示當前要插入到有序序列中的牌//o2:表示已經在有序序列中存在的牌//負數:o1小 插入到前面//正數:o1大 插入到后面//0:o1的數字跟o2的數字是一樣的,需要按照花色再次排序//1.計算o1的花色和價值  String color1 = o1.substring(0, 1);;//?3中的?//價值int value1 = getValue(o1);//2.計算o2的花色和價值String color2= o1.substring(0, 1);//?3中的?//價值int value2 = getValue(o2);//3.比較o1和o2的價值    ?3  ?3int i = value1 - value2;return i == 0 ? color1.compareTo(color2) : i;}});}//計算牌的價值//參數:牌//返回值:價值public int getValue(String poker) {  //?3//獲取牌上的數字String number = poker.substring(1);//比如?3中的3//把這里截取出來的結果,讓這個結果再Map集合中存在/*hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);*///如果不存在類型轉換 如"3"的價值就值3//如果存在在map集合里面拿出對應的價值即可//拿著數字到map集合中判斷是否存在if (hm.containsKey(number)) {//存在,獲取價值return hm.get(number);} else {//不存在,類型轉換return Integer.parseInt(number);}}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循環遍歷得到每一張牌System.out.print(poke + " ");}System.out.println();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45548.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

底軟驅動 | C++內存相關

文章目錄 C內存相關C內存分區C對象的成員函數存放在內存哪里 堆和棧的區別堆和棧的訪問效率“野指針”有了malloc/free為什么還要new/deletealloca內存崩潰C內存泄漏的幾種情況內存對齊柔性數組參考推薦閱讀 C內存相關 本篇介紹了 C 內存相關的知識。 C內存分區 在C中&#…

力扣第八題——字符串轉換整數

題目介紹 請你來實現一個 myAtoi(string s) 函數&#xff0c;使其能將字符串轉換成一個 32 位有符號整數。 函數 myAtoi(string s) 的算法如下&#xff1a; 空格&#xff1a;讀入字符串并丟棄無用的前導空格&#xff08;" "&#xff09;符號&#xff1a;檢查下一個字…

TCP重傳、滑動窗口、流量控制、擁塞控制機制

目錄 1、TCP重傳機制超時重傳快速重傳 2、滑動窗口3、流量控制4、擁塞控制1、慢啟動2、擁塞避免3、擁塞發生 1、TCP重傳機制 TCP 針對數據包丟失的情況&#xff0c;會用重傳機制解決。 超時重傳 就是在發送數據時&#xff0c;設定一個定時器&#xff0c;當超過指定的時間還沒…

Ctrl+C、Ctrl+V、Ctrl+X 和 Ctrl+Z 的起源

注&#xff1a;機翻&#xff0c;未校對。 The Origins of CtrlC, CtrlV, CtrlX, and CtrlZ Explained We use them dozens of times a day: The CtrlZ, CtrlX, CtrlC, and CtrlV shortcuts that trigger Undo, Cut, Copy, and Paste. But where did they come from, and why do…

文件上傳接口

文章目錄 開發前端接口 開發前端接口 首先這個前端的文件上傳組件使用了,前端組件 首先這個接口不是一般的接口,這個接口可以提取出來,之后那里使用了,就直接放到哪里 所以這是一個萬能文件上傳接口 寫完之后選擇 頭像組件 在圖庫中添加組件 寫前端組件之后,寫了前端的組件…

Bootstrap 5 加載效果

Bootstrap 5 加載效果 Bootstrap 5 是一個流行的前端框架,它提供了豐富的組件和工具,用于快速開發響應式和移動優先的網頁。在本文中,我們將探討 Bootstrap 5 中的加載效果,包括如何實現它們以及它們在網頁設計中的作用。 什么是加載效果? 加載效果是在網頁或應用程序中…

k8s集群創建devops項目一直等待狀態,沒有發現host

問題分析&#xff1a; kubesphere在幫我們自動化創建一些智能自動化的額時候難免會發生一些小錯誤&#xff0c;devops-jenkins是一個部署也會生成一個容器組即pod&#xff0c;容器組的容器服務端口是 targetPort&#xff0c;容器組對外暴露的端口是port&#xff0c;拿devops-c…

[深度學習]基于yolov10+streamlit目標檢測演示系統設計

YOLOv10結合Streamlit構建的目標檢測系統&#xff0c;不僅極大地增強了實時目標識別的能力&#xff0c;還通過其直觀的用戶界面實現了對圖片、視頻乃至攝像頭輸入的無縫支持。該系統利用YOLOv10的高效檢測算法&#xff0c;能夠快速準確地識別圖像中的多個對象&#xff0c;并標注…

Billu_b0x靶機

信息收集 使用arp-scan 生成網絡接口地址來查看ip 輸入命令&#xff1a; arp-scan -l 可以查看到我們的目標ip為192.168.187.153 nmap掃描端口開放 輸入命令&#xff1a; nmap -min-rate 10000 -p- 192.168.187.153 可以看到開放2個端口 nmap掃描端口信息 輸入命令&…

配置PYTHONPATH環境變量

配置PYTHONPATH環境變量 前言Win系統臨時配置永久配置 Linux系統臨時配置永久配置 前言 在運行py腳本時不僅需要import官方庫&#xff0c;經常會import自己編寫的腳本&#xff0c;但此時會出現模塊找不到的如下報錯。解決方法是配置PYTHONPATH&#xff0c;下文介紹Win系統和Li…

禹神:一小時快速上手Electron,前端Electron開發教程,筆記。一篇文章入門Electron

一、Electron是什么 簡單的一句話&#xff0c;就是用htmlcssjsnodejs&#xff08;Native Api&#xff09;做兼容多個系統&#xff08;Windows、Linux、Mac&#xff09;的軟件。 官網解釋如下(有點像繞口令)&#xff1a; Electron是一個使用 JavaScript、HTML 和 CSS 構建桌面…

Resources.Load返回null

Resources.Load返回null 在unity中Resources.Load從Assets下的任意Resources目錄下讀取資源&#xff0c;比如從Assets\Resources下讀取Cube&#xff08;預制體&#xff09;&#xff0c;當然也可以讀取其他資源 代碼為 GameObject prefab Resources.Load<GameObject>(…

微軟Edge瀏覽器深度解析:性能、安全性與特色功能全面評測

一、引言 自Windows 10操作系統推出以來&#xff0c;微軟Edge瀏覽器作為默認的網頁瀏覽器&#xff0c;憑借其現代化的設計和出色的性能表現&#xff0c;逐漸獲得了用戶的認可。本文旨在對Edge瀏覽器進行深入分析&#xff0c;探討其在多個方面的表現。 二、界面與操作體驗 界面…

在 PostgreSQL 里如何處理數據的存儲優化和數據庫備份的效率平衡?

&#x1f345;關注博主&#x1f397;? 帶你暢游技術世界&#xff0c;不錯過每一次成長機會&#xff01;&#x1f4da;領書&#xff1a;PostgreSQL 入門到精通.pdf 文章目錄 在 PostgreSQL 里如何處理數據的存儲優化和數據庫備份的效率平衡&#xff1f;一、數據存儲優化&#x…

HTML表格表單及框架標簽

一.表格標簽 1.<table></table> 創建表格 2.<caption></caption> 表格的標題 3.<tr></tr>Table Row&#xff08;表格行&#xff09; 4.<td></td>Table Data&#xff08;表格數據&#xff09;其中有屬性rowspan"2&quo…

Linux操作系統——數據庫

數據庫 sun solaris gnu 1、分類&#xff1a; 大型 中型 小型 ORACLE MYSQL/MSSQL SQLITE DBII powdb 關系型數據庫 2、名詞&#xff1a; DB 數據庫 select update database DBMS 數據…

Go中的defer看似很簡單,實則一點都不難

Golang 中的 Defer 在Go語言中&#xff0c;defer語句用于將一個函數調用推遲到外圍函數返回之后執行。它常用于確保某些操作在函數結束時一定會執行&#xff0c;例如資源釋放、文件關閉等。 基本語法 defer語句的基本使用方法如下&#xff1a; func main() {defer fmt.Prin…

距離變換 Distance Transformation

以下為該學習地址的學習筆記&#xff1a;Distance transformation in image - Python OpenCV - GeeksforGeeks 其他學習資料&#xff1a;Morphology - Distance Transform 簡介 距離變換是一種用于計算圖像中每個像素與最近的非零像素之間距離的技術。它通常用于圖像分割和物體…

51單片機5(GPIO簡介)

一、序言&#xff1a;不論學習什么單片機&#xff0c;最簡單的外設莫過于I口的高低電平的操作&#xff0c;接下來&#xff0c;我們將給大家介紹一下如何在創建好的工程模板上面&#xff0c;通過控制51單片機的GPIO來使我們的開發板上的LED來點亮。 二、51單片機GPIO介紹&#…

第三節SHELL腳本中的變量與運算(1.1-1.5)

一,腳本中的變量 1,1什么是變量 在編寫程序是,通常會遇到被操作對象不固定的情況我們需要用一串固定的字符來的表示不固定的值,這就是變量存在的根本意義變量的實現原理就是內存存儲單元的一個符合名稱 1,2 變量的命名規則 變量的名稱中只能包含數字,大小寫字母以及下劃線 …