如何用Java的HashMap实现有序版的斗地主游戏,并处理长尾词查询?

2026-04-19 15:042阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1112个文字,预计阅读时间需要5分钟。

如何用Java的HashMap实现有序版的斗地主游戏,并处理长尾词查询?

本文以Java使用HashMap实现战斗主公的具体代码为例,供大家参考。内容包含案例介绍、按照战斗主公规则完成洗牌动作,以及整体规则。

案例介绍:本例展示如何使用HashMap实现一个简单的洗牌功能,模拟战斗主公的随机分配。

代码示例:

javaimport java.util.HashMap;import java.util.Map;import java.util.Random;

public class ShuffleCards { public static void main(String[] args) { // 创建牌组 Map deck=new HashMap(); for (int i=1; i <=54; i++) { deck.put(i, 牌 + i); }

// 打乱牌组 shuffleDeck(deck);

// 打印洗好的牌组 for (Map.Entry entry : deck.entrySet()) { System.out.println(牌号: + entry.getKey() + ,牌面: + entry.getValue()); } }

// 洗牌方法 public static void shuffleDeck(Map deck) { Random random=new Random(); for (int i=deck.size(); i > 1; i--) { int index=random.nextInt(i); Map.Entry entry=deck.entrySet().iterator().next(); deck.remove(entry.getKey()); deck.put(index, entry.getValue()); } }}

规则说明:

1. 使用54张牌,包括大小王。

2.使用3个玩家。

3.按照以下规则洗牌:

- 随机打乱牌组顺序。 - 玩家轮流抽牌,每次抽一张,直到抽完为止。

洗牌动作:- 在洗牌方法中,使用随机数生成器随机选择一个牌的位置,然后将该牌与当前位置的牌交换,直到所有牌都洗完。

通过以上代码和规则,可以实现一个简单的洗牌功能,模拟战斗主公的随机分配。

本文实例为大家分享了java使用HashMap实现斗地主的具体代码,供大家参考,具体内容如下

案例介绍

按照斗地主的规则,完成洗牌发牌的动作。 具体规则:

如何用Java的HashMap实现有序版的斗地主游戏,并处理长尾词查询?

使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

案例分析

1、准备牌:

每张扑克牌牌由花色和数字两部分组成。可以使用花色集合与数字集合嵌套迭代完成扑克牌的组装。

2、发牌

扑克牌组转完毕后由Collections类的shuffle方法打乱重排,最后3张当作底牌,剩余牌通过对3取模依次发牌。

3、看牌

打印集合。

代码演示

import java.util.*; /** * @author layman */ public class Poker2 { // 牌堆 private static Map<Integer, String> pokerMap = new HashMap<>(); // 花色 private static ArrayList<String> colors = new ArrayList<>(); // 数字 private static ArrayList<String> numbers = new ArrayList<>(); // 扑克牌的编号集合 private static ArrayList<Integer> numberList = new ArrayList<>(); // 玩家编号集合 private static ArrayList<Integer> noP1 = new ArrayList<>(); private static ArrayList<Integer> noP2 = new ArrayList<>(); private static ArrayList<Integer> noP3 = new ArrayList<>(); // 底牌编号集合 private static ArrayList<Integer> diPaiNo = new ArrayList<>(); // 三个玩家 private static ArrayList<String> playerOne = new ArrayList<String>(); private static ArrayList<String> playerTwo = new ArrayList<String>(); private static ArrayList<String> playerThree = new ArrayList<String>(); // 底牌 private static ArrayList<String> diPai = new ArrayList<String>(); /** * 创建扑克牌并洗牌 */ public static void createPoker(){ Collections.addAll(colors, "♦", "♣", "♥", "♠"); Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"); // 设置存储编号 int count = 1; pokerMap.put(count++, "大王"); pokerMap.put(count++, "小王"); // 创建扑克牌 for (String number : numbers) { for (String color : colors) { String card = color + number; pokerMap.put(count++, card); } } // 先取编号 Set<Integer> numberSet = pokerMap.keySet(); numberList.addAll(numberSet); // 然后随机洗牌 Collections.shuffle(numberList); } /** * 发牌 */ public static void faPai(){ for (int i = 0; i < numberList.size(); i++) { Integer no = numberList.get(i); // 留出底牌 if (i >= 51) { diPaiNo.add(no); } else { if (i % 3 == 0) { noP1.add(no); } else if (i % 3 == 1) { noP2.add(no); } else { noP3.add(no); } } } } /** * 发牌并排序 */ public static void sortCards(){ // 对编号进行排序 Collections.sort(noP1); Collections.sort(noP2); Collections.sort(noP3); Collections.sort(diPaiNo); // 进行牌面的转换 for (Integer i : noP1) { // 根据编号获取牌面,并发给对应的玩家 String card = pokerMap.get(i); playerOne.add(card); } for (Integer i : noP2) { String card = pokerMap.get(i); playerTwo.add(card); } for (Integer i : noP3) { String card = pokerMap.get(i); playerThree.add(card); } for (Integer i : diPaiNo) { String card = pokerMap.get(i); diPai.add(card); } } /** * 看牌 */ public static void showCards(){ System.out.println("赌圣:" + playerOne); System.out.println("赌侠:" + playerTwo); System.out.println("赌王:" + playerThree); System.out.println("底牌:" + diPai); } public static void main(String[] args) { createPoker(); faPai(); sortCards(); showCards(); } }

补充:

使用ArrayList实现斗地主案例(无序版):传送门

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计1112个文字,预计阅读时间需要5分钟。

如何用Java的HashMap实现有序版的斗地主游戏,并处理长尾词查询?

本文以Java使用HashMap实现战斗主公的具体代码为例,供大家参考。内容包含案例介绍、按照战斗主公规则完成洗牌动作,以及整体规则。

案例介绍:本例展示如何使用HashMap实现一个简单的洗牌功能,模拟战斗主公的随机分配。

代码示例:

javaimport java.util.HashMap;import java.util.Map;import java.util.Random;

public class ShuffleCards { public static void main(String[] args) { // 创建牌组 Map deck=new HashMap(); for (int i=1; i <=54; i++) { deck.put(i, 牌 + i); }

// 打乱牌组 shuffleDeck(deck);

// 打印洗好的牌组 for (Map.Entry entry : deck.entrySet()) { System.out.println(牌号: + entry.getKey() + ,牌面: + entry.getValue()); } }

// 洗牌方法 public static void shuffleDeck(Map deck) { Random random=new Random(); for (int i=deck.size(); i > 1; i--) { int index=random.nextInt(i); Map.Entry entry=deck.entrySet().iterator().next(); deck.remove(entry.getKey()); deck.put(index, entry.getValue()); } }}

规则说明:

1. 使用54张牌,包括大小王。

2.使用3个玩家。

3.按照以下规则洗牌:

- 随机打乱牌组顺序。 - 玩家轮流抽牌,每次抽一张,直到抽完为止。

洗牌动作:- 在洗牌方法中,使用随机数生成器随机选择一个牌的位置,然后将该牌与当前位置的牌交换,直到所有牌都洗完。

通过以上代码和规则,可以实现一个简单的洗牌功能,模拟战斗主公的随机分配。

本文实例为大家分享了java使用HashMap实现斗地主的具体代码,供大家参考,具体内容如下

案例介绍

按照斗地主的规则,完成洗牌发牌的动作。 具体规则:

如何用Java的HashMap实现有序版的斗地主游戏,并处理长尾词查询?

使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

案例分析

1、准备牌:

每张扑克牌牌由花色和数字两部分组成。可以使用花色集合与数字集合嵌套迭代完成扑克牌的组装。

2、发牌

扑克牌组转完毕后由Collections类的shuffle方法打乱重排,最后3张当作底牌,剩余牌通过对3取模依次发牌。

3、看牌

打印集合。

代码演示

import java.util.*; /** * @author layman */ public class Poker2 { // 牌堆 private static Map<Integer, String> pokerMap = new HashMap<>(); // 花色 private static ArrayList<String> colors = new ArrayList<>(); // 数字 private static ArrayList<String> numbers = new ArrayList<>(); // 扑克牌的编号集合 private static ArrayList<Integer> numberList = new ArrayList<>(); // 玩家编号集合 private static ArrayList<Integer> noP1 = new ArrayList<>(); private static ArrayList<Integer> noP2 = new ArrayList<>(); private static ArrayList<Integer> noP3 = new ArrayList<>(); // 底牌编号集合 private static ArrayList<Integer> diPaiNo = new ArrayList<>(); // 三个玩家 private static ArrayList<String> playerOne = new ArrayList<String>(); private static ArrayList<String> playerTwo = new ArrayList<String>(); private static ArrayList<String> playerThree = new ArrayList<String>(); // 底牌 private static ArrayList<String> diPai = new ArrayList<String>(); /** * 创建扑克牌并洗牌 */ public static void createPoker(){ Collections.addAll(colors, "♦", "♣", "♥", "♠"); Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"); // 设置存储编号 int count = 1; pokerMap.put(count++, "大王"); pokerMap.put(count++, "小王"); // 创建扑克牌 for (String number : numbers) { for (String color : colors) { String card = color + number; pokerMap.put(count++, card); } } // 先取编号 Set<Integer> numberSet = pokerMap.keySet(); numberList.addAll(numberSet); // 然后随机洗牌 Collections.shuffle(numberList); } /** * 发牌 */ public static void faPai(){ for (int i = 0; i < numberList.size(); i++) { Integer no = numberList.get(i); // 留出底牌 if (i >= 51) { diPaiNo.add(no); } else { if (i % 3 == 0) { noP1.add(no); } else if (i % 3 == 1) { noP2.add(no); } else { noP3.add(no); } } } } /** * 发牌并排序 */ public static void sortCards(){ // 对编号进行排序 Collections.sort(noP1); Collections.sort(noP2); Collections.sort(noP3); Collections.sort(diPaiNo); // 进行牌面的转换 for (Integer i : noP1) { // 根据编号获取牌面,并发给对应的玩家 String card = pokerMap.get(i); playerOne.add(card); } for (Integer i : noP2) { String card = pokerMap.get(i); playerTwo.add(card); } for (Integer i : noP3) { String card = pokerMap.get(i); playerThree.add(card); } for (Integer i : diPaiNo) { String card = pokerMap.get(i); diPai.add(card); } } /** * 看牌 */ public static void showCards(){ System.out.println("赌圣:" + playerOne); System.out.println("赌侠:" + playerTwo); System.out.println("赌王:" + playerThree); System.out.println("底牌:" + diPai); } public static void main(String[] args) { createPoker(); faPai(); sortCards(); showCards(); } }

补充:

使用ArrayList实现斗地主案例(无序版):传送门

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。