一 模拟斗地主洗牌发牌

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. PowerShell创建参考窗口

    背景 平常我们经常遇到这样一个问题,在使用一个窗口工作时常常需要参考其他窗口的文字或图片,此时就需要频繁切换窗口:或者是看视频时需要参考前面进度的画面:或者是阅读或写文档时需要参考其他位置的文字,这时 ...

  2. Go Pentester - HTTP CLIENTS(5)

    Parsing Document Metadata with Bing Scaping Set up the environment - install goquery package. https: ...

  3. GPO - Windows Server Update Services

    Windows Server Update Services Configuration Wizard: Approve procedure of these updates is very tiri ...

  4. javascript算法 最短路径问题

    var obj = { 1: [2, 3], 2: [1, 4, 5], 3: [1, 7, 8], 4: [2, 7], 7: [4, 8], } var 起点 = 1 var 终点 = 8 var ...

  5. var 的一个坑,以及 let

    选自 Typescript 中文教程. 快速的猜一下下面的代码会返回什么: for (var i = 0; i < 10; i++) { setTimeout(function() { cons ...

  6. python怎么自学?今日头条技术大佬的真实经历分享

    大家好,我是武州,27岁,目前在字节跳动担任Python后端工程师一职. (摆拍一下,假装是保安) 在开始今天的文章之前,不知道你们有没有遇到过这样的问题: 大学没学到什么实质技术,毕业后找不到高薪的 ...

  7. p40_数据交换方式

    一.为什么要数据交换 数据链路发展史: 二.数据交换方式 电路交换 报文交换 分组交换[数据报方式,虚电路方式] 三.电路交换 eg:电话网络(特点:**独占资源,**即使两个人不说话,链接也不会被别 ...

  8. 题解 洛谷 P3734 【[HAOI2017]方案数】

    可以先考虑没有障碍物的情况,设计状态\(f_{i,j,k}\),表示到达坐标 \((x,y,z)\)二进制下,\(x\)有\(i\)位,\(y\)有\(j\)位,\(z\)有\(k\)位的方案数. 得 ...

  9. Netty 学习笔记(2) ------ 数据传输载体ByteBuf

    Netty中读写以ByteBuf为载体进行交互 ByteBuf的结构 ByteBuf以readerIndex和writerIndex划分为三块区域,废弃字节,可读字节,可写字节.每次从ByteBuf读 ...

  10. leetcode题库练习_左旋转字符串

    题目:左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返 ...