Java實現鬥地主案例
阿新 • • 發佈:2020-04-23
本文例項為大家分享了Java實現鬥地主的具體程式碼,供大家參考,具體內容如下
import java.util.ArrayList; import java.util.Collections; public class DemoPoker { public static void main(String[] args) { /** *一、準備牌 普通牌:2 A K...3 花色:♥ ♠ ♣ ♦ 王牌:大王 小王 建立一個集合,把牌組裝之後存進去 */ String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; String[] colors = {"♥","♠","♣","♦"}; ArrayList<String> pokerBox = new ArrayList<>(); for (String color : colors) { for (String number : numbers) { pokerBox.add(color + number); } } pokerBox.add("大王"); pokerBox.add("小王"); /** * 二、洗牌 static void shuffle(List<?> list) 使用預設的隨機源隨機置換指定的列表。 此處為了輸出結果工整所以沒有直接輸出集合 */ Collections.shuffle(pokerBox); for (int i = 0; i < pokerBox.size(); i++) { System.out.print(pokerBox.get(i)+"\t"); if (i==26) { System.out.println(); } } System.out.println(); /** * 三、發牌 遍歷集合,用索引%3發牌,餘0給玩家1,餘1給玩家2,餘2給玩家3 索引0-50是玩家的牌,51-53是底牌 */ //玩家一 ArrayList<String> player01 = new ArrayList<>(); //玩家二 ArrayList<String> player02 = new ArrayList<>(); //玩家三 ArrayList<String> player03 = new ArrayList<>(); //底牌 ArrayList<String> diPai = new ArrayList<>(); for (int i = 0; i < pokerBox.size(); i++) { String faces = pokerBox.get(i); if (i>=51) { diPai.add(faces); } else if (i%3==0) { player01.add(faces); } else if (i%3==1) { player02.add(faces); } else if (i%3==2) { player03.add(faces); } } /** * 四、看牌 直接輸出每位玩家的集合 */ System.out.println("張無忌"+player01); System.out.println("張翠山"+player02); System.out.println("殷素素"+player03); System.out.println("底牌"+diPai); } }
帶排序版的
package com.demo_2.poker; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class Poker { /** *一共要四步。一、備牌 二、洗牌 三、發牌 四、看牌 目的:練習集合的用法 */ public static void main(String[] args) { /** * 第一步:備牌 使用List介面中的of()方法新增並分別建立numbers和colors集合 */ //numbers:儲存普通牌 2、A、K...3從大到小 List<String> numbers = List.of("2","3"); //colors:儲存四種花色 ♥、♠、♦、♣ List<String> colors = List.of("♥","♦","♣"); //建立一個Map集合儲存索引和組裝好的牌 HashMap<Integer,String> pokerBox = new HashMap<>(); //建立一個List集合儲存牌的索引 LinkedList<Integer> pokerIndex = new LinkedList<>(); //先把大王、小王和下標分別放進Map的鍵和值裡面,再向LinkedList裡面儲存下標,下標增加1 int index = 0; pokerBox.put(index,"大王"); pokerIndex.add(index); index++; pokerBox.put(index,"小王"); pokerIndex.add(index); index++; //組裝牌:遍歷兩個List集合,使用Map介面中的put()方法給pokerBox新增鍵和值,並給LinkedList傳下標 for (String number : numbers) { for (String color : colors) { pokerBox.put(index,color + number); pokerIndex.add(index); index++; } } /** * 第二步:洗牌 使用Collocations類中的shuffler方法,傳遞引數pokerIndex */ Collections.shuffle(pokerIndex); /** * 第三步:發牌 建立四個List集合,分別儲存三位玩家和底牌 使用for迴圈遍歷pokerIndex,i%3結果為0的給玩家1,1的給玩家2,2的給玩家3 */ LinkedList<Integer> player01 = new LinkedList<>(); LinkedList<Integer> player02 = new LinkedList<>(); LinkedList<Integer> player03 = new LinkedList<>(); LinkedList<Integer> diPai = new LinkedList<>(); for (int i = 0; i < pokerIndex.size(); i++) { Integer in = pokerIndex.get(i); if (i >= 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); } } //給玩家的牌排序,使用Collocations介面中的sort()方法排序 Collections.sort(player01); Collections.sort(player02); Collections.sort(player03); Collections.sort(diPai); /** *第四步:看牌 遍歷排過序的List集合作為Map集合的鍵值獲取對應的值 為提高程式碼複用性定義一個方法代替 */ print("令狐沖",player01,pokerBox); print("諸葛瑾",player02,pokerBox); print("司馬懿",player03,pokerBox); print("底牌",diPai,pokerBox); } /** *看牌的方法: 引數: String name LinkedList<Integer> list HashMap<Integer,String> map */ public static void print(String name,LinkedList<Integer> list,HashMap<Integer,String> map){ System.out.print(name+":"); for (Integer key : list) { System.out.print(map.get(key)+" "); } System.out.println(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。