zoukankan      html  css  js  c++  java
  • 模拟斗地主发牌功能

    案例:模拟斗地主发牌功能

    需求:定义一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分别用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容

    1、一副扑克牌:将花色和数字分别进行组合,生成所有的普通牌,手动添加大小王

    2、洗牌:使用Collection工具的shuffle()方法打乱牌的顺序

    3、发牌:遍历牌堆,将?一?牌分?到三个玩家集合中,留三?作?底牌

     4、看牌:分别打印三个玩家集合的内容

    分析:

    ?牌:1、?建数字数?:String[] nums={"3","4","5","6","7","8","9","10","J","Q","K","2"};

    ?           2、?建花色数?:String[] colors={"方片","梅花","?桃","黑桃"};

    ?           3、将?个花色分?和数字?行拼接

    ?牌:1、分??建三个玩家集合?象和底牌集合?象

    ?            2、遍?牌堆的?一?牌,分?将索引?3取模的??0、1、2的牌存放到三个玩家集合中,将最后三?存放到底牌集合中

    看牌:1、将玩家集合中的牌按自然?序?行排序Collections.sort(list);

    ?            2、打印

    package com.example;

    import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
    import org.w3c.dom.ls.LSOutput;

    import java.util.*;

    public class SendPokerDemo {
    public static void main(String[] args) {
    //1、买牌
    //1.1定义一个双列集合,键表示牌的编号,值表示具体的牌 规则:编号越小,牌越小
    Map<Integer,String> pokers=new HashMap<>();
    //1.2定义一个单列集合,用来存储牌的编号
    List<Integer> list=new ArrayList<>();
    //1.3具体的买牌动作
    String[] colors={"♥","♠","♦","■"};//■表示梅花
    String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    int num=0;
    for (String number : numbers) {//外循环,获取所有点数
    for (String color : colors) {//内循环,获取所有花色
    String poker=color+number;
    //将牌的编号,具体的牌放到双列集合中,
    pokers.put(num,poker);
    //将牌的编号放到单列集合中
    list.add(num);
    //每添加一张牌,编号自增一
    num++;
    }
    }
    pokers.put(num,"小王");
    list.add(num++);
    pokers.put(num,"大王");
    list.add(num);
    //打印牌
    System.out.println("所有的牌:"+pokers);
    System.out.println("牌的编号:"+list);

    //2、洗牌
    Collections.shuffle(list);
    System.out.println("洗好牌后,编号为:"+list);

    //3、发牌
    //3.1定义四个集合,分别表示三个玩家和底牌
    List<Integer> user1=new ArrayList<>();
    List<Integer> user2=new ArrayList<>();
    List<Integer> user3=new ArrayList<>();
    List<Integer> dipai=new ArrayList<>();
    //3.2具体的发牌动作,将索引和3取模,决定发给谁
    for (int i=0;i<list.size();i++) {
    //获取编号
    Integer pokerNum=list.get(i);
    if(i>=list.size()-3){
    dipai.add(pokerNum);
    }else if(i%3==0){
    user1.add(pokerNum);
    }else if(i%3==1){
    user2.add(pokerNum);
    }else if(i%3==2){
    user3.add(pokerNum);
    }
    }
    //3.3查看玩家和底牌的编号
    System.out.println("user1:"+user1);
    System.out.println("user2:"+user2);
    System.out.println("user3:"+user3);
    System.out.println("dipai:"+dipai);
    System.out.println("====================================");

    //看牌
    System.out.println("user1:"+printPoker(user1,pokers));
    System.out.println("user2:"+printPoker(user2,pokers));
    System.out.println("user3:"+printPoker(user3,pokers));
    System.out.println("dipai:"+printPoker(dipai,pokers));
    }


    //定义一个方法用来看牌 printPoker,参数列表:List<Integer>,Map<Integer,String>
    public static String printPoker(List<Integer> nums,Map<Integer,String> pokers){
    //对牌的编号进行升序排列
    Collections.sort(nums);
    //遍历牌的编号集合,获取每一个编号,根据编号,在双列集合中查找该编号对应的具体牌
    StringBuilder sb=new StringBuilder();
    for (Integer num : nums) {
    String poker=pokers.get(num);
    //将获取到的牌进行拼接
    sb.append(poker+" ");
    }
    //将最终结果返回
    String str=sb.toString();
    return str.trim();//移除首尾空格
    }
    }
  • 相关阅读:
    Js图片利用定时器自动切换(setInterval)
    JS全选,全不选,添加,删除功能的实现
    windows 下安装memcache拓展
    Linux 踢出其他用户
    通过nginx配置php环境变量
    Mac 服务重启
    Mac PHP安装redis扩展
    高并发解决方案
    MySQL 分表
    MySQL 主从-简介
  • 原文地址:https://www.cnblogs.com/wyj96/p/11918696.html
Copyright © 2011-2022 走看看