模拟斗地主洗牌发牌

(一)案例介绍:

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

具体规则:

1.组装54张扑克牌

2.将54张扑克牌的顺序打乱

3.三个玩家参与游戏,三人交替摸牌,没人17张牌,最后三张留作底牌。

4.查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

(二)案例需求分析

1.准备牌

完成数字与牌的映射关系

使用双列Map(HashMap)集合,完成一个数字与字符串字牌的对应关系(相当于一个字典)。

2.洗牌

通过数字完成洗牌发牌

3.发牌

将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同字牌的数字分配给不同的玩家与底牌。

4.看牌

通过Map集合找打对应字符展示。

通过查询字牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

 1 import java.util.ArrayList;
 2 import java.util.Collections;
 3 import java.util.HashMap;
 4 import java.util.TreeSet;
 5
 6 public class Porker {
 7
 8     public static void main(String[] args) {
 9         //声明一个索引用于存储牌
10         int index = 0;
11         //声明花色集合
12         String [] color = {"方块","红桃","梅花","黑桃"};
13         //声明牌数字集合
14         String [] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
15         //创建一个集合用于存储54张牌
16         HashMap<Integer, String> SumPorker = new HashMap<Integer, String>();
17         for (String c : num) {
18             for (String n : color) {
19                 String value = n + c;
20                 SumPorker.put(index, value);
21                 index++;
22             }
23         }
24         //添加大小王
25         SumPorker.put(index++, "Lk");
26         SumPorker.put(index, "BK");
27         printporker(SumPorker);
28         //创建一个集合,存储54张牌的序号
29         ArrayList<Integer> SPindex = new ArrayList<Integer>();
30         for (int i = 0; i < 54; i++) {
31             SPindex.add(i);
32         }
33         //打乱牌--洗牌
34         Collections.shuffle(SPindex);
35         //新建3个玩家和一个底牌,即TreeSet集合
36         TreeSet<Integer> play_1 = new TreeSet<Integer>();
37         TreeSet<Integer> play_2 = new TreeSet<Integer>();
38         TreeSet<Integer> play_3 = new TreeSet<Integer>();
39         TreeSet<Integer> endPorker = new TreeSet<Integer>();
40         for (int i = 0; i < SPindex.size(); i++) {
41             if (i>=SPindex.size()-3)
42                 endPorker.add(SPindex.get(i));
43             else if(i%3 == 1)
44                 play_3.add(SPindex.get(i));
45             else if(i%3 ==0)
46                 play_2.add(SPindex.get(i));
47             else
48                 play_1.add(SPindex.get(i));
49         }
50         System.out.println("玩家1:");
51         END_1(play_1,SumPorker);
52         System.out.println("玩家2:");
53         END_1(play_2,SumPorker);
54         System.out.println("玩家3:");
55         END_1(play_3,SumPorker);
56         System.out.println("底牌:");
57         END_1(endPorker,SumPorker);
58     }
59     //获取洗牌后的牌
60     public static void END_1(TreeSet<Integer> gamer,HashMap<Integer,String> sumHashMap){
61         for (int i : gamer) {
62             System.out.print(sumHashMap.get(i)+"\t");
63         }
64         System.out.println();
65     }
66     //输出扑克牌
67     public static void printporker(HashMap<Integer, String> SumPorker){
68         System.out.println("扑克牌:");
69         for (int i = 0; i < SumPorker.size(); i++) {
70             if (i % 4 == 0) {
71                 System.out.println();
72             }
73             System.out.print(SumPorker.get(i)+"\t");
74         }
75         System.out.println();
76     }
77
78 }

运行结果:

 1 扑克牌:
 2
 3 方块3    红桃3    梅花3    黑桃3
 4 方块4    红桃4    梅花4    黑桃4
 5 方块5    红桃5    梅花5    黑桃5
 6 方块6    红桃6    梅花6    黑桃6
 7 方块7    红桃7    梅花7    黑桃7
 8 方块8    红桃8    梅花8    黑桃8
 9 方块9    红桃9    梅花9    黑桃9
10 方块10    红桃10    梅花10    黑桃10
11 方块J    红桃J    梅花J    黑桃J
12 方块Q    红桃Q    梅花Q    黑桃Q
13 方块K    红桃K    梅花K    黑桃K
14 方块A    红桃A    梅花A    黑桃A
15 方块2    红桃2    梅花2    黑桃2
16 Lk    BK
17 玩家1:
18 红桃4    方块5    红桃5    梅花5    方块6    红桃7    梅花9    黑桃9    方块10    方块Q    红桃Q    梅花K    方块A    红桃A    梅花A    红桃2    BK
19 玩家2:
20 黑桃3    黑桃4    梅花7    黑桃7    方块8    梅花8    方块9    红桃9    红桃10    梅花10    黑桃10    黑桃J    黑桃Q    方块K    黑桃K    梅花2    黑桃2
21 玩家3:
22 方块3    红桃3    梅花3    方块4    梅花4    红桃6    梅花6    黑桃6    方块7    红桃8    黑桃8    红桃J    梅花J    红桃K    黑桃A    方块2    Lk
23 底牌:
24 黑桃5    方块J    梅花Q    

原文地址:https://www.cnblogs.com/snoopy-GJT/p/9621762.html

时间: 2024-08-24 00:58:32

模拟斗地主洗牌发牌的相关文章

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

不排序的: 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

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

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

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

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

斗地主洗牌发牌测试类

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 */ 1

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

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

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:创建花色数组和点数

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

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

模拟斗地主真人在线发牌

模拟斗地主真人在线发牌 前言 要斗地主先得有牌吧,没牌斗个鸡毛,所以先让厂家生产一副扑克牌.然后呢,哥们三个今天想斗地主了,你得去超市买一副 崭新 的扑克牌吧.这样就可以进入玩耍阶段了,先得洗牌,后摸牌,在把最后三张牌压箱底,好了这样就开始展现技艺了..... 我们现在用java集合的知识模拟斗地主的发牌,和上述流程是一模一样的. 设计过程 造一副扑克 一副扑克有54张牌,有四种花色,从A到K,还有大小王.先定义一个nums集合来装扑克牌的数字,然后定义一个color集合装四种花色,保证它们的添