斗地主洗牌发牌测试类

 1 package com.hxl;
 2
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.HashMap;
 6 import java.util.TreeSet;
 7
 8 /**
 9  * 这是一个斗地主洗牌发牌的测试类
10  *
11  * @author Schiller_Hu
12  * @version v1.0
13  * @since 2018.2.20
14  *
15  */
16
17 public class Test {
18     public static void main(String[] args) {
19         // 定义花色数组
20         String[] color = { "黑桃", "红桃", "梅花", "方块" };
21         // 定义点数数组
22         String[] point = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
23                 "K", "A", "2" };
24         // 定义ArrayList集合,存储卡牌对应的唯一的编号
25         ArrayList<Integer> cardNums = new ArrayList<Integer>();
26         // 实例化HashMap存储映射关系,序号与对应卡牌
27         HashMap<Integer, String> cardMaps = new HashMap<Integer, String>();
28         // 编号变量
29         int num = 0;
30         // 组合点数与花色,生成所有卡牌,存入键值对与单列集合ArrayList中
31         for (int i = 0; i < point.length; i++) {
32             for (int j = 0; j < color.length; j++) {
33                 cardMaps.put(num, color[j] + point[i]);
34                 cardNums.add(num);
35                 num++;
36             }
37         }
38         // 再加上大小王
39         cardMaps.put(num, "小王");
40         cardNums.add(num);
41         num++;
42         cardMaps.put(num, "大王");
43         cardNums.add(num);
44
45         // 洗牌,打乱ArrayList中元素的编号,在按该乱序发牌
46         Collections.shuffle(cardNums);
47
48         // 先定义存放四份牌的容器,分别是玩家1、玩家2、玩家3、底牌(发剩下的3张牌)
49         TreeSet<Integer> player1 = new TreeSet<Integer>();
50         TreeSet<Integer> player2 = new TreeSet<Integer>();
51         TreeSet<Integer> player3 = new TreeSet<Integer>();
52         TreeSet<Integer> diPai = new TreeSet<Integer>();
53
54         // 给三个人发牌,留3张做底牌,就是发编号
55         for (int i = 0; i < cardNums.size(); i++) {
56             if (i >= cardNums.size() - 3) {
57                 diPai.add(cardNums.get(i));
58             } else if (i % 3 == 0) {
59                 player1.add(cardNums.get(i));
60             } else if (i % 3 == 1) {
61                 player2.add(cardNums.get(i));
62             } else if (i % 3 == 2) {
63                 player3.add(cardNums.get(i));
64             }
65         }
66         // 看牌
67         lookCards("玩家1", player1, cardMaps);
68         lookCards("玩家2", player2, cardMaps);
69         lookCards("玩家3", player3, cardMaps);
70         lookCards("底牌", diPai, cardMaps);
71     }
72
73     /**
74      * 看牌方法,我们得到的是牌的编号,要还原为牌的花色点数本身
75      *
76      * @param name
77      *            玩家名称
78      * @param cardNums
79      *            该玩家所获得的编号集合
80      * @param cardMaps
81      *            编号与卡牌的映射集合
82      */
83     public static void lookCards(String name, TreeSet<Integer> player,
84             HashMap<Integer, String> cardMaps) {
85         System.out.print(name + ":");
86         for (Integer i : player) {
87             System.out.print(cardMaps.get(i) + ",");
88         }
89         System.out.println();
90     }
91 }

原文地址:https://www.cnblogs.com/schiller-hu/p/8455688.html

时间: 2024-08-04 02:10:46

斗地主洗牌发牌测试类的相关文章

模拟斗地主洗牌发牌

(一)案例介绍: 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1.组装54张扑克牌 2.将54张扑克牌的顺序打乱 3.三个玩家参与游戏,三人交替摸牌,没人17张牌,最后三张留作底牌. 4.查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 (二)案例需求分析 1.准备牌 完成数字与牌的映射关系 使用双列Map(HashMap)集合,完成一个数字与字符串字牌的对应关系(相当于一个字典). 2.洗牌

模拟斗地主洗牌、发牌(含有排序和不排序的)

不排序的: package cn.idcast5; import java.util.ArrayList; import java.util.Collections; //模拟斗地主洗牌发牌 //分析 //A 创建一个牌盒 //B 装牌 //C 洗牌 //D 发牌 //E 看牌 public class Shiyue31 { public static void main(String[] args) { // 创建一个牌盒 ArrayList<String> array = new Arra

Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 * B:Map接口和Collection接口的不同  * Map是双列的,Collection是单列的  * Map的键唯一,Collection的子体系Set是唯一的  * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 2.Map集合的功能概述 * A:Map集合的功能概述  *

代码实现:模拟斗地主洗牌和发牌并对牌进行排序的代码实现

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; public class Test{ /** * * A:案例演示 * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,

代码实现:模拟斗地主洗牌和发牌,牌没有排序

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; public class Test { /** * * A:案例演示 * 模拟斗地主洗牌和发牌,牌没有排序 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,发牌 * 4,看牌 */ public static void main(String[] args) { //1

ArrayList模拟斗地主的洗牌,发牌和看牌

/* * ArrayList模拟斗地主的洗牌,发牌和看牌 * * 分析: * 1.创建一个牌盒 * 2.装牌 * 3.洗牌 * 4.发牌 * 5.看牌 */ 代码: import java.util.ArrayList; import java.util.Collections; /** * ArrayList模拟斗地主的洗牌,发牌和看牌 * @author TP * */ public class Doudizhu { /* * ArrayList模拟斗地主的洗牌,发牌和看牌 * * 分析:

java 18 - 12 模拟斗地主洗牌、发牌,并对发的牌进行排序

1 /* 2 模拟斗地主的发牌功能(发牌完毕后发到手上的牌是有顺序的) 3 分析: 4 A:创建一个HashMap集合 5 B:创建一个ArrayList集合 6 C:创建两个字符串,一个是花色,一个是牌的数字 (发牌得有一盒牌) 7 为了方便以后的排序,创建这两个字符串的时候,按照大小顺序排列(斗地主中的大小顺序) 8 大小王除外 9 D:把这两个字符串放进HashMap集合中(拼接一起 花色+牌号) 同时给每个放进去牌进行编码0--52并存储 10 同时也给ArrayList集合中存储编码,

Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[] args) { // 创建Map集合,键

18.29_集合框架(模拟斗地主洗牌和发牌并对牌进行排序的代码实现)

1 package dou_di_zhu; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Collections; 6 import java.util.HashMap; 7 import java.util.TreeSet; 8 9 /** 10 * 思路: 11 * A:创建一个HashMap集合 12 * B:创建一个ArrayList集合 13 * C:创建花色数组和点数