1. 程式人生 > 程式設計 >Java實現鬥地主案例

Java實現鬥地主案例

本文例項為大家分享了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();
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。