Java-->簡單的鬥地主發牌流程

来源:http://www.cnblogs.com/xmcx1995/archive/2016/08/13/5767511.html
-Advertisement-
Play Games

--> Poker類用於存入54張撲克牌 --> Player類對玩家進行發牌和顯示處理(寫完我就後悔了,J,Q,K,A,2的排序太low了..package com.dragon.java.hwddz; --> 寫完發現邏輯是不是有問題啊... ...


package com.dragon.java.hwddz;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*1. 寫一個可以給鬥地主三家隨機發牌的程式。   
 a:牌可以隨機發給三個玩家   
 b:在控制台列印每個玩家的牌。   
 c:對每個玩家手中的牌按照大寫排序。
 ```
 牌的花色:"♠", "♥", "♣", "♦" 
 *思路:創建一個容器存儲所有的牌,再創建三個容器分別表示三個用戶的牌,三個用戶輪流從第一個容器中取牌,
 *剩下三張為底牌。把大王和小王也算進去**/
public class Test {
    public static void main(String args[]) {
        Map<Integer, String> mapPoker = new HashMap<>();
        List<Integer> listIndex = new ArrayList<>();

        Poker.setPoker(mapPoker, listIndex);

        Poker.washPoker(listIndex);

     
// 定義用戶 Player[] players = new Player[3]; players[0] = new Player("躺之徳"); players[1] = new Player("小剪"); players[2] = new Player("呆立叫");      
     // 用戶容器 List
<Integer> tzd = new ArrayList<>(); List<Integer> xj = new ArrayList<>(); List<Integer> dlj = new ArrayList<>(); List<Integer> dp = new ArrayList<>(); Player.getPoker(tzd, xj, dlj, dp, listIndex); // int index = Player.getMaxNumber(players); // System.out.println(players[index].getName() + "搶到了地主!"); players[0].showPoker(tzd, mapPoker); players[1].showPoker(xj, mapPoker); players[2].showPoker(dlj, mapPoker); // players[index].showDp(dp, mapPoker); System.out.println("\n" + "底牌:"); for (Integer integer : dp) { System.out.print(mapPoker.get(integer) + " "); } } }

--> Poker類用於存入54張撲克牌

package com.dragon.java.hwddz;

import java.util.Collections;
import java.util.List;
import java.util.Map;

public class Poker {
    private static String[] pokerColor = { "♠", "♥", "♣", "♦" };
    private static String[] pokerNum = { "3", "4", "5", "6", "7", "8", "9",
            "10", "J", "Q", "K", "A", "2" };
  
   // 存入54張不同的牌,並給每張牌一個標號
public static void setPoker(Map<Integer, String> mapPoker, List<Integer> listIndex) { int index = 0; for (String nums : pokerNum) { for (String colors : pokerColor) { String poker = colors.concat(nums); mapPoker.put(index, poker); listIndex.add(index); index++; } } mapPoker.put(index, "大☝王"); listIndex.add(index); index++; mapPoker.put(index, "小☟王"); listIndex.add(index); }
   // 洗牌 --> 即洗標號
public static void washPoker(List<Integer> listIndex) { Collections.shuffle(listIndex); } }

--> Player類對玩家進行發牌和顯示處理(寫完我就後悔了,J,Q,K,A,2的排序太low了..package com.dragon.java.hwddz;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Player {
    private String name;

    Player() {
        super();
    }

    Player(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
   // 發牌流程
public static void getPoker(List<Integer> player1, List<Integer> player2, List<Integer> player3, List<Integer> dp, List<Integer> list) { for (int i = 0; i < list.size(); i++) { if (i >= list.size() - 3) { dp.add(list.get(i)); } else if (i % 3 == 1) { player1.add(list.get(i)); } else if (i % 3 == 2) { player2.add(list.get(i)); } else if (i % 3 == 0) { player3.add(list.get(i)); } } }
   // 顯示牌面
public void showPoker(List<Integer> list, Map<Integer, String> mapPoker) { System.out.println("\n" + name + "的手牌是:"); List<String> listPoker = new ArrayList<>(); for (Integer key : list) { listPoker.add(mapPoker.get(key)); } Collections.sort(listPoker, new MyComparator()); for (String string : listPoker) { System.out.print(string + " "); } } // public void showDp(List<Integer> dp, Map<Integer, String> mapPoker) { // List<String> listPoker = new ArrayList<>(); // for (Integer key : dp) { // listPoker.add(mapPoker.get(key)); // } // Collections.sort(listPoker, new MyComparator()); // for (String string : listPoker) { // System.out.print(string + " "); // } // } public int throwsElbows() { Random random = new Random(); int num = random.nextInt(6) + 1; System.out.println(name + "搖了" + num + "點"); return num; } // 請忽略下麵註釋... // public static int getMaxNumber(Player[] players) { // List<Integer> numbers = new ArrayList<>(); // for (int i = 0; i < players.length; i++) { // numbers.add(players[i].throwsElbows()); // } // Collections.sort(numbers); // for (int i = 0; i < numbers.size() - 1; i++) { // if (numbers.get(numbers.size() - 1) == numbers.get(i)) { // System.out.println(players[numbers.size() - 1].name + "和" // + players[i].name + "搖的點數相同"); // System.out.println("他們打了一架! --> " + players[i].name + "贏了!"); // return i; // } // } // return numbers.size() - 1; // }

  
// 牌面的比較排序 --> 看得就煩... public static class MyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { String m1 = o1.substring(1, 2); String m2 = o2.substring(1, 2); if (m1.equals("1")) { m1 = "a"; } else if (m1.equals("J")) { m1 = "b"; } else if (m1.equals("Q")) { m1 = "c"; } else if (m1.equals("K")) { m1 = "d"; } else if (m1.equals("A")) { m1 = "e"; } else if (m1.equals("2")) { m1 = "f"; } if (m2.equals("1")) { m2 = "a"; } else if (m2.equals("J")) { m2 = "b"; } else if (m2.equals("Q")) { m2 = "c"; } else if (m2.equals("K")) { m2 = "d"; } else if (m2.equals("A")) { m2 = "e"; } else if (m2.equals("2")) { m2 = "f"; } return m1.compareTo(m2); } } }

--> 寫完發現邏輯是不是有問題啊...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們談到關聯映射的多對多配置呢,有一種挺不好配置的,所以呢,就放到了這裡給大家參考 第一種:建立多對多雙向關聯 拆成兩個一對多 三個實體類 Employee Project 中間表 ProEmp 映射文件 Employee.hbm.xml Project.hbm.xml ProEmp.hbm.xml ...
  • 數據不完整在數據分析的過程中很常見。 pandas使用浮點值NaN表示浮點和非浮點數組裡的缺失數據。 pandas使用isnull()和notnull()函數來判斷缺失情況。 對於缺失數據一般處理方法為濾掉或者填充。 濾除缺失數據 對於一個Series,dropna()函數返回一個包含非空數據和索引 ...
  • 線程的優先順序用數字來表示,預設範圍是1到10,即Thread.MIN_PRIORITY到Thread.MAX_PRIORTY.一個線程的預設優先順序是5,即Thread.NORM_PRIORTY 對優先順序操作的方法: int getPriority():得到線程的優先順序 void setPriorit ...
  • 1.tomcat7-maven-plugin插件 1. 不通過外部的tomcat 直接將tomcat核心內嵌在項目中,tomcat7:run 命令就可以啟動項目,可以直接訪問 localhost:8080/Demo 2. 熱部署(tomcat是活的) tomcat7:deploy 命令就可以將項目發 ...
  • 設計一個小型的記憶體池以及鏈表 上一節擼到萬事俱備只欠真正的 , 但是 的作用是將源代碼轉化為 流, 用什麼保存 ? 這就涉及到我們要接觸的第一個數據結構—鏈表, 雖然標準庫中很多容器都可以承擔鏈表的任務, 但是我說過 出於鍛煉原因, 我會儘量不使用stl中的容器 , 所以我決定自己擼一個鏈表出來, ...
  • 今天來說說圖片壓縮技術,為什麼要使用圖片壓縮,圖片上傳不就完事了嗎?對的,這在幾年前可以這麼說,因為幾年前還沒有現在這麼大的併發,也沒有現在這麼關註性能。 如今手機很多,很多人都是通過手機訪問網路或者app,再調用介面的時候肯定會多多少少的瀏覽圖片,尤其是脫離wifi的情況下,可以看到很多軟體展示都 ...
  • 一、轉向(Forward) 1.要點說明 轉向是通過RequestDispatcher對象的forward()方法來實現的。RequestDispatcher可以通過HttpServletRequest的getRequestDispatcher()方法獲得。getRequestDispatcher( ...
  • Go語言是Google內部主推的語言,它作為一門全新的靜態類型開發語言,與當前的開發語言相比具有許多令人興奮不已的新特性。專門針對多處理器系統的應用程式編程進行了優化,使用go語言完全可以媲美c、c++的速度,而且更加安全、簡潔,支持並行進程。 以下是go語言的主要特性: 1、自動垃圾回收 2、更豐 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...