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();
    }
}

运行结果:

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

(0)

相关推荐

  • java实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 代码如下: 牌类 import java.util.Objects; /** * 3-10 J Q K A 2 King Queen 牌类 * * @author Administrator * */ public class Card { /** 牌面值 */ private String name; /**

  • Java实现斗地主的发牌功能

    斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能. 首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下: 首先是Poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个Comparable接口,方便之后进行排序: public class Poker implements Comparable

  • java实现斗地主发牌系统

    本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayList; import java.util.List; /** * 玩家类 * */ public class Player { private String name; //名字 private boolean landowner; //是否地主 private List<Card> cards =

  • Java模拟实现斗地主发牌

    本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下 题目: 模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红心,黑桃,方块,梅花),牌的点数(3,4,5,6,7,8,9,10,J,Q,K,A,2,King,Queen),另有三名玩家,要求(使用面向对象的方式实现): 1.随机产生一名地主 2.随机向三名玩家发牌,最后的底牌自动发给地主 3.显示出每名玩家手中的牌 4.要求根据点数自动对玩家手中的牌排序实现(*) 提示:玩家类,牌类,游戏类(算法) 步骤分析:

  • 用java实现斗地主发牌过程

    本文实例为大家分享了java实现斗地主发牌过程的具体代码,供大家参考,具体内容如下 一.牌类实现 定义牌的相关属性,点数.花色.大小 package com.softeem.lesson18.doudizhu; import java.util.Objects; public class Card { //牌面值 private String name; //花色 private String flower; //点数 private int num; public Card() { // TO

  • java代码实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法. 为了模拟每个玩家的牌都是随机的,我是这样想的: 1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号. 2) 利用随机数,将每个序号打乱存到一个新数组里. 3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内. 附一个在老师指导下写的:斗地主发牌功能,

  • java模拟斗地主发牌功能

    本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下 1.案例介绍 规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌 查看三人各自手中的牌(按照牌的大小排序).底牌 2. 分析 1).准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典). 2).洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为ArrayList,将后3张牌直接存

  • java简单实现斗地主发牌功能

    本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下 问题: 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 要求实现以下功能: 1.洗牌 2.发牌(发牌按照常规方式A-B-C-A-B-C-A-,不允许一次性随机17张给某个玩家) 3.玩家手中牌的展示(要求按点数实现排序) 分析 运用面向对象的程序设计思维分为扑克.玩家和游戏三部分,扑克类属性有花色,点数,次序:玩家类属性有玩家id,昵称,是否地主,牌的集

  • Java实现斗地主之洗牌发牌

    本文通过实例为大家分享了Java实现斗地主之洗牌发牌的具体代码,供大家参考,具体内容如下 案例分析 需求: 实现斗地主过程中的洗牌,发牌和看牌. 并且确保每一位玩家手上拿到的牌是随机并且按照大小排序好的 思路 1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 2.往牌盒里面装牌 3.洗牌,也就是把牌打散,用Collections的shuffle()方法实现 4.发牌,也就是遍历结合,给三个玩家发牌 5.看牌,也就是三个玩家分别遍历自己的牌 代码实现 1.创建牌盒,存放所有牌

  • Java斗地主发牌课程设计

    本文实例为大家分享了Java斗地主发牌的具体代码,供大家参考,具体内容如下 Player类 public class Player { // 玩家姓名 private String name1; private String name2; private String name3; //玩家积分 private int grade; // 玩家类型:农民/地主 private String type1="农民"; private String type2="农民";

随机推荐