一 模拟斗地主洗牌发牌

1.案例需求

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

 

具体规则:

  1. 组装54张扑克牌

  2. 将54张牌顺序打乱

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

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

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

2.案例分析

准备牌:

  完成数字与纸牌的映射关系:

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

洗牌:

  通过数字完成洗牌发牌

发牌:

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

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

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

看牌:

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

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

3.代码

public class DouDiZhu {
public static void main(String[] args) {
//创建扑克牌map和装有key值得集合
HashMap<Integer, String> pooker = new HashMap<Integer, String>();
ArrayList<Integer> pookerNumer = new ArrayList<Integer>();
//封装map
String[] color = {"♠","♣","♦","♥"};
String[] number = {"2","A","K","Q","J","10","9","8","7","6","5",
"4","3"};
int index=2;
for (String n : number) {
for (String c : color) {
//封装map
pooker.put(index, c+n);
//封装集合
pookerNumer.add(index);
index++;
}
}
//封装大小王
pooker.put(0, "大王");
pookerNumer.add(0);
pooker.put(1,"小王");
pookerNumer.add(1);
//洗牌
Collections.shuffle(pookerNumer);
//创建四个容器
ArrayList<Integer> player1 = new ArrayList<Integer>();
ArrayList<Integer> player2 = new ArrayList<Integer>();
ArrayList<Integer> player3 = new ArrayList<Integer>();
ArrayList<Integer> bottom = new ArrayList<Integer>();
for (int i = 0; i <pookerNumer.size(); i++) {
if(i<3){
bottom.add(pookerNumer.get(i));
}else if(i%3==0){
player1.add(pookerNumer.get(i));
}else if(i%3==1){
player2.add(pookerNumer.get(i));
}else{
player3.add(pookerNumer.get(i));
}
}
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
look("渣渣辉",pooker,player1);
look("刘嘉玲",pooker,player2);
look("古天乐",pooker,player3);
look("底牌",pooker,bottom);
}
//看牌方法
public static void look(String name, HashMap<Integer, String> pooker,ArrayList<Integer> pookerNumer){
System.out.print(name+":");
for (Integer n : pookerNumer) {
System.out.print(pooker.get(n)+" ");
}
System.out.println();
}
}

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

  1. java集合--模拟斗地主发牌洗牌

    import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...

  2. java模拟斗地主发牌看牌

    import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Dou ...

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

    规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...

  4. Java模拟斗地主发牌和洗牌

    package cn.itcast_04; import java.util.ArrayList; import java.util.Collections; import java.util.Has ...

  5. Java模拟斗地主(实现大小排序)

    import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Li ...

  6. Java实现斗地主发牌(Collections工具类的应用)

    package com.doudou_01; import java.util.ArrayList; import java.util.Collections; import java.util.Li ...

  7. java算法 蓝桥杯 洗牌

    问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...

  8. Java 模拟斗地主

    模拟斗地主 public class M1 { public static void main(String args[]) { DouDiZhu02(); } private static void ...

  9. Java程序斗地主发牌代码,List、Map集合的应用

    Java集合存储的灵活运用List集合存储 54个编号 Map <key,value> key 对应的是编号 , value 是 牌的花色(红方梅黑)+ 具体的一张牌 ,比如 黑桃2 用2 ...

随机推荐

  1. Spring Boot中Tomcat是怎么启动的

    Spring Boot一个非常突出的优点就是不需要我们额外再部署Servlet容器,它内置了多种容器的支持.我们可以通过配置来指定我们需要的容器. 本文以我们平时最常使用的容器Tomcat为列来介绍以 ...

  2. bzoj3858Number Transformation*

    bzoj3858Number Transformation 题意: 给一个数n,对其进行k次变换,第i次变换是将当前的n变成大于等于n的最小的i的倍数.求k次变换后n为多少.n≤10^10,k≤10^ ...

  3. redis的集群化方案

    关于 目前有三种 (1)Twitter开发的twemproxy (2)豌豆荚开发的codis (3)redis官方的redis-cluster Twemproxy 架构简单 就是用proxy对后端re ...

  4. Linux下一只五颜六色的「猫」

    大家好,我是良许. 有使用过 Linux 系统的小伙伴,肯定会使用过 cat 这个命令.当然,在 Linux 下,此猫非彼猫,这里的 cat 并不代表猫,而是单词 concatenate 的缩写. c ...

  5. Ethical Hacking - GAINING ACCESS(20)

    CLIENT SIDE ATTACKS - Spoofing backdoor extension Change the extension of the trojan from exe to a s ...

  6. Python Ethical Hacking - Bypass HTTPS(2)

    Injecting Code in HTTPS Pages: #!/usr/bin/env python import re from netfilterqueue import NetfilterQ ...

  7. 【Python学习笔记五】re.findall()方法中,正则的"()"效果

    在笔记四中,使用正则去筛选数据时,使用了findall()这个方法,在使用时正则表达式中使用了到了"()",最初以为只是强调执行优先级,后来发现正则表达式中的每一个(),在find ...

  8. APP自动化 -- 获取driver

    一.appium设置 1.打开appium 2.设置 appium服务器:点击  高级设置 3.启动 appium 服务器 二.查看  .apk  安装包的“包名”和“活动入口名” 1.先复制本地  ...

  9. 06 . ELK Stack + kafka集群

    简介 Filebeat用于收集本地文件的日志数据. 它作为服务器上的代理安装,Filebeat监视日志目录或特定的日志文件,尾部文件,并将它们转发到Elasticsearch或Logstash进行索引 ...

  10. python map函数、filter函数、reduce函数

    1.map函数:map(func,可迭代对象): ①func可以是自定义的函数,也可以是功能简单的匿名函数(通过lambda定义) ②处理逻辑:表示将传入的可迭代对象依次循环,将每个元素按照传入的fu ...