斗地主随机发牌实现
2022/2/7 6:14:11
本文主要是介绍斗地主随机发牌实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
斗地主随机发牌实现
需求:
通过程序实现斗地主过程中的洗牌,发牌和看牌
思路:
- 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
- 往牌盒里面装牌
- 洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
- 发牌,也就是遍历集合,给三个玩家发牌
- 看牌,也就是三个玩家分别遍历自己的牌
代码:
import java.util.ArrayList; import java.util.Collections; public class Demo1 { public static void main(String[] args) { // 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 ArrayList<String> pokers = new ArrayList<>(); // 因为牌是由花色和字符组成 // 定义一个花色数组 String[] colors = {"♦", "♠", "♣", "♥"}; // 定义一个点数数组 String[] nums = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; // 使用循环进行拼接 // 往牌盒里面装牌 for (String color : colors) { for (String num : nums) { // 拼接并装入ArrayList pokers.add((color + num)); } } // 装入大小王 pokers.add("大王"); pokers.add("小王"); // 洗牌,用Collections的shuffle()方法实现 Collections.shuffle(pokers); // 发牌,也就是遍历集合,给三个玩家发牌 // 也用ArrayList存起来 ArrayList<String> player1 = new ArrayList<String>(); ArrayList<String> player2 = new ArrayList<String>(); ArrayList<String> player3 = new ArrayList<String>(); // 地主底牌 ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < pokers.size(); i++) { // 将牌遍历出来 String poker = pokers.get(i); // 最后三张给底牌 if (i >= pokers.size() - 3) { list.add(poker); } else if ((i % 3) == 0) { // 第一个玩家的牌 player1.add(poker); } else if ((i % 3) == 1) { // 第二个玩家的牌 player2.add(poker); } else { // 第三个玩家的牌 player3.add(poker); } } // 看牌,也就是三个玩家分别遍历自己的牌 lookPokers("玩家1", player1); lookPokers("玩家2", player2); lookPokers("玩家3", player3); lookPokers("地主底牌", list); } // 定义一个看牌的方法 public static void lookPokers(String name, ArrayList<String> player) { System.out.println(name + "的牌是:"); // 遍历 for (String poker : player) { System.out.print(poker + "\t"); } System.out.println(); System.out.println("---------------------------------------------------------------------"); } }
升级版:
看牌时进行排序
思路:
- 创建HashMap,键是编号,值是牌
- 创建ArrayList,存储编号
- 创建花色数组和点数数组
- 从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
- 洗牌(洗的是编号),用Collections的shuffle()方法实现
- 发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收
- 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
代码:
import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; public class Demo2 { public static void main(String[] args) { // 创建HashMap,键是编号,值是牌 HashMap<Integer, String> pokers = new HashMap<>(); // 创建Arraylist,存储编号 ArrayList<Integer> arrayList = new ArrayList<>(); // 创建花色数组和点数数组 // 定义一个花色数组 String[] colors = {"♦", "♠", "♣", "♥"}; // 定义一个点数数组 String[] nums = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; // 使用循环进行拼接 // 定义一个index int index = 0; for (String color : colors) { for (String num : nums) { String poker = (color + num); // 从0开始往HashMap里面存储编号,并存储对应的牌。 pokers.put(index, (color + num)); // 同时往ArrayList里面存储编号 arrayList.add(index); ++index; } } // 大小王 pokers.put(index, "大王"); arrayList.add(index); ++index; pokers.put(index, "小王"); arrayList.add(index); // 洗牌(洗的是编号),用Collections的shuffle(方法实现 Collections.shuffle(arrayList); // 发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收) TreeSet<Integer> p1 = new TreeSet<>(); TreeSet<Integer> p2 = new TreeSet<>(); TreeSet<Integer> p3 = new TreeSet<>(); TreeSet<Integer> dp = new TreeSet<>(); for (int i = 0; i < arrayList.size(); i++) { int x = arrayList.get(i); if (i >= arrayList.size() - 3) { dp.add(x); } else if (i % 3 == 0) { p1.add(x); } else if (i % 3 == 1) { p2.add(x); } else { p3.add(x); } } // 调用自定义看牌方法 lookPokers("玩家1", p1, pokers); lookPokers("玩家2", p2, pokers); lookPokers("玩家3", p3, pokers); lookPokers("地主底牌", dp, pokers); } // 定义方法看牌(遍历TreeSet集合,获取编号,到HashNap集合找对应的牌) public static void lookPokers(String name, TreeSet<Integer> player, HashMap<Integer, String> pokers) { System.out.println(name + "的牌是:"); // 遍历TreeSet获取编号 for (int key : player) { // 到HashNap集合找对应的牌 String poker = pokers.get(key); System.out.print(poker + "\t"); } System.out.println(); } }
这篇关于斗地主随机发牌实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南