java集合模拟实现斗地主洗牌和发牌

 更新时间:2021年09月26日 16:04:16   作者:upupxi  
这篇文章主要为大家详细介绍了java集合模拟实现斗地主洗牌和发牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现斗地主洗牌和发牌的具体代码,供大家参考,具体内容如下

1:用ArrayList集合实现

案例分析:

我们现在要做的是模拟斗地主小游戏来进行洗牌和发牌。

具体步骤:

A:首先,创建一个ArrayList集合来存储牌,将牌的花色和点数存储在俩个字符串数组中中,然后用for循环加强遍历将每张牌的花色点数及大王小王存储在集合中。
B:进行洗牌,调用collectionas的shuffle方法。
C:进行发牌,创建四个ArrayList集合,分别用来存储玩家一,玩家二,玩家三,和底牌对应发到手上的牌。然后用for循环遍历这幅扑克牌用If语句判断,然后发牌。
D:创建一个看牌的方法,调用即可。

具体代码:

package com.study_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
 * 模拟斗地主洗牌和发牌
 * 分析步骤:
 * 1:创建一个集合来存储牌
 * 2:洗牌
 * 3:发牌
 * 4:看牌
 * 
 */
public class Poker1 {
    public static void main(String[] args) {
        //创建一个集合来存牌
        ArrayList <String> Pokers=new ArrayList<>();
        String[] colors={"♠","♥","♦","♣"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for(String color:colors){
            for(String number:numbers){
                Pokers.add(color+number);   
            }
            Pokers.add("大王");
            Pokers.add("小王");
        }//洗牌
        Collections.shuffle(Pokers);
        //发牌
        /*创建四个集合来存储
         * 1:张三
         * 2:李四
         * 3:王麻
         * 4:底牌
         */
        ArrayList<String> Zhangsan=new ArrayList<>();
        ArrayList<String> Lisi=new ArrayList<>();
        ArrayList<String> Wangma=new ArrayList<>();
        ArrayList<String> Dipai=new ArrayList<>();
        for(int i=0;i<Pokers.size();i++){
            if(i>=Pokers.size()-3){
                Dipai.add(Pokers.get(i));
            }else if(i%3==0){
                Zhangsan.add(Pokers.get(i));
            }else if(i%3==1){
                Lisi.add(Pokers.get(i));
            }else if(i%3==2){
                Wangma.add(Pokers.get(i));
            }
        }//看牌
        lookPokers("张三",Zhangsan);
        lookPokers("李四",Lisi);
        lookPokers("王麻",Wangma);
        lookPokers("底牌",Dipai);     
    }
    private static void lookPokers(String name, ArrayList<String> Pokers){
        System.out.println(name+"的牌是:");
        for(String poker:Pokers){
            System.out.print(poker+" ");
        }System.out.println();  
    }
    }

运行结果:

2:用TreeMap集合实现

具体步骤:

A:创建TreeMap集合存储牌,并且大的键对应大的牌,小的键对应小的牌,同上创建俩个数组,一个用来存储花色,一个用来存储点数,另外创建一个ArrayList集合,用来存储没有任意一张牌对应的索引。
B:.洗牌,洗的是索引(map集合中每一张牌对应的键),我们这里用的是ArrayList来存储。
C:发牌,发的索引,并且对这个索引进行排序,这是利用了TreeSet的有序性。
D:看牌,根据发到的索引去map集合中找出对应的值。

具体代码:

package com.study_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;
/**
 * 1.创建Map集合存储牌,并且大的键对应大的牌,小的键对应小的牌
 * 2.洗牌,洗的是索引(map集合中每一张牌对应的键)
 * 3.发牌,发的索引,并且岁这个索引进行排序
 * 4.看牌,根据发到的键去map集合中找出对应的值
 */
public class Poker2 {
    public static void main(String[] args) {
        //创建一个TreeMap集合
        TreeMap<Integer,String> Pokers=new TreeMap<>();
        String[] colors={"♥","♠","♦","♣"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
        //创建一个ArrayList集合,用来存储没有一张牌对应的索引
        ArrayList<Integer> indexs=new ArrayList<>();
        int index = 0;
        for(String color:colors){
            for(String number:numbers){
                Pokers.put(index, color+number);
                indexs.add(index);
                index++;    
            }//存大王,小王
            Pokers.put(index, "大王");
            indexs.add(index);
            index++;
            Pokers.put(index, "小王");
            indexs.add(index);
            index++;
        }//洗牌,洗的是索引(map集合中每一张牌对应的键)
        Collections.shuffle(indexs);
        //发牌,发的是索引根据索引来找它对应的值
        TreeSet<Integer> zhangsan=new TreeSet<>();
        TreeSet<Integer> lisi=new TreeSet<>();
        TreeSet<Integer> wangma=new TreeSet<>();
        TreeSet<Integer> dipai=new  TreeSet<>();
        for(int i=0;i<Pokers.size();i++){
            if(i>=Pokers.size()-3){
                dipai.add(indexs.get(i));
            }else if(i%3==0){
                zhangsan.add(indexs.get(i));
            }else if(i%3==1){
                lisi.add(indexs.get(i));
            }else if(i%3==2){
                wangma.add(indexs.get(i));
            }
        }//看牌
        lookPoker("张三",zhangsan,Pokers);
        lookPoker("李四",lisi,Pokers);
        lookPoker("王麻",wangma,Pokers);
        lookPoker("底牌",dipai,Pokers);   
    }
    private static void lookPoker(String name, TreeSet<Integer> indexs,
            TreeMap<Integer, String> Pokers) {
        System.out.println(name+"的牌是:");
        for(Integer index:indexs){
            System.out.print(Pokers.get(index));
        }System.out.println();
    }
}

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java File类的详解及简单实例

    Java File类的详解及简单实例

    这篇文章主要介绍了Java File类的详解及简单实例的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • springBoot跨域注解@CrossOrigin用法

    springBoot跨域注解@CrossOrigin用法

    SpringFramework 4.2GA为CORS提供了支持,Spring MVC版本必须在4.2或以上才能使用@CrossOrigin注解,如果在Controller中使用@CrossOrigin后仍遇到跨域问题,可能是因为@RequestMapping中未指定HTTP方法,指定具体的Get或Post方法后,可以解决这一问题
    2024-10-10
  • java全角、半角字符的关系以及转换详解

    java全角、半角字符的关系以及转换详解

    这篇文章主要介绍了
    2013-11-11
  • netty中pipeline异常事件分析

    netty中pipeline异常事件分析

    这篇文章主要为大家介绍了netty中pipeline异常事件分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • MyBatis-Plus详解(环境搭建、关联操作)

    MyBatis-Plus详解(环境搭建、关联操作)

    MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生,今天通过本文给大家介绍MyBatis-Plus环境搭建及关联操作,需要的朋友参考下吧
    2022-09-09
  • iReport简单使用方法图文教程

    iReport简单使用方法图文教程

    iReport是一个能够创建复杂报表的开源项目,它100%使用Java语言编写,是目前全球最为流行的开源报表设计器,由于它丰富的图形界面,你能够很快的创建出任何一种你想要的报表
    2021-10-10
  • Java equals()方法使用详解及总结

    Java equals()方法使用详解及总结

    这篇文章主要介绍了Java equals()方法使用详解及总结的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java编程实现逆波兰表达式代码示例

    Java编程实现逆波兰表达式代码示例

    本文主要对Java算法逆波兰表达式的相关内容作了介绍,涉及逆波兰表达式的定义已经在Java中的实现,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java8的Optional如何干掉空指针(示例详解)

    Java8的Optional如何干掉空指针(示例详解)

    这篇文章主要介绍了Java8的Optional如何干掉空指针,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 详解利用Spring加载Properties配置文件

    详解利用Spring加载Properties配置文件

    本篇文章主要介绍了详解利用Spring加载Properties配置文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论