集合案例扑克牌

欢迎打开这篇文章

你好! 这是你了解 集合 所展示的欢迎页。如果你想学习如何使用集合, 可以仔细阅读这篇文章,了解一下基本语法知识。

1,案例

** 需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。**

1-1 思路分析

  • 1,创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
  • 2,往牌盒里塞牌
  • 3,洗牌,把牌打散,用collections的shuffle()方法实现
  • 4,发牌,也就是遍历集合给三个玩家发牌
  • 5,看牌,也就是三个玩家分别遍历自己的牌

2,开始编写代码

2-1 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

 //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ArrayList<String> array = new ArrayList<String>();

2-2 往牌盒里塞牌

//往牌盒里塞牌
        String colors[] = {"♠","♥","♣","♦"}; //花色
        String numbers[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //数字
        for (String color:colors){
            for (String number:numbers){
                array.add(color+number);
            }
        }
        array.add("小王");
        array.add("大王");

2-3 洗牌,把牌打散,用collections的shuffle()方法实现

//洗牌,把牌打散,用collections的shuffle()方法实现
        Collections.shuffle(array);

2-4 定义三名玩家与底牌集合,还有发牌操作,也就是遍历集合给三个玩家发牌

  ArrayList<String> demo1 = new ArrayList<String>();//玩家1
        ArrayList<String> demo2 = new ArrayList<String>();//玩家2
        ArrayList<String> demo3 = new ArrayList<String>();//玩家3
        ArrayList<String> dipai = new ArrayList<String>();//底牌
//        发牌,也就是遍历集合给三个玩家发牌
        for (int i = 0;i<array.size();i++){
            String pai = array.get(i);//获取牌牌
            if (i>array.size()-3){
                dipai.add(pai);
            }else if(i%3==0){
                demo1.add(pai);
            }else if (i%3==1){
                demo2.add(pai);
            }else if(i%3==2){
                demo3.add(pai);
            }

2-5 看牌,也就是三个玩家分别遍历自己的牌

//看牌,也就是三个玩家分别遍历自己的牌
    public static void show(String name,ArrayList<String> array){
        System.out.print(name+"牌是:");
        for (String arrayList:array){
            System.out.print(arrayList+"");
        }
        System.out.println("");
    }

2-6 方法调用执行,查看结果

        show("demo1",demo1);
        show("demo2",demo2);
        show("demo3",demo3);
        show("dipai",dipai);

在这里插入图片描述

2-7 整体代码

public class demo {
    public static void main(String[] args) {
        //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ArrayList<String> array = new ArrayList<String>();
        //往牌盒里塞牌
        String colors[] = {"♠","♥","♣","♦"}; //花色
        String numbers[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //数字
        for (String color:colors){
            for (String number:numbers){
                array.add(color+number);
            }
        }
        array.add("小王");
        array.add("大王");
        //洗牌,把牌打散,用collections的shuffle()方法实现
        Collections.shuffle(array);
//        System.out.println(array);
        ArrayList<String> demo1 = new ArrayList<String>();//玩家1
        ArrayList<String> demo2 = new ArrayList<String>();//玩家2
        ArrayList<String> demo3 = new ArrayList<String>();//玩家3
        ArrayList<String> dipai = new ArrayList<String>();//底牌
//        发牌,也就是遍历集合给三个玩家发牌
        for (int i = 0;i<array.size();i++){
            String pai = array.get(i);//获取牌牌
            if (i>array.size()-3){
                dipai.add(pai);
            }else if(i%3==0){
                demo1.add(pai);
            }else if (i%3==1){
                demo2.add(pai);
            }else if(i%3==2){
                demo3.add(pai);
            }
        }
        show("demo1",demo1);
        show("demo2",demo2);
        show("demo3",demo3);
        show("dipai",dipai);
    }
    //看牌,也就是三个玩家分别遍历自己的牌
    public static void show(String name,ArrayList<String> array){
        System.out.print(name+"牌是:");
        for (String arrayList:array){
            System.out.print(arrayList+"");
        }
        System.out.println("");
    }

}


3,进行优化

3-1 创建hashmap,键是编号,值是牌与arrayList存储编号

        //创建hashmap,键是编号,值是牌
        HashMap<Integer,String> hm = new HashMap<Integer, String>();
        //创建arraylist,存储编号
        ArrayList<Integer> arrayList = new ArrayList<Integer>();

3-2 定义花色点数

//定义花色
        String colors[] = {"♦","♥","♠","♣"};
        //定义点数
        String numbers[] = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

3-3 从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号

 //从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
        int index = 0;
        for (String number:numbers){
            for (String color:colors){
                hm.put(index,color+number);
                arrayList.add(index);
                index++;
            }
        }
        hm.put(index,"小王");
        arrayList.add(index);
        index++;
        hm.put(index,"大王");
        arrayList.add(index);

3-4 洗牌

//洗牌(洗的编号),用collections的shuffle()方法实现
        Collections.shuffle(arrayList);

3-5 发牌 (发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)

TreeSet<Integer> demoSet = new TreeSet<Integer>();
        TreeSet<Integer> demo1Set = new TreeSet<Integer>();
        TreeSet<Integer> demo2Set = new TreeSet<Integer>();
        TreeSet<Integer> dpSet = new TreeSet<Integer>();
        for (int i = 0; i < arrayList.size(); i++) {
            int x = arrayList.get(i);
            if (i>=arrayList.size()-3){
                dpSet.add(x);
            }else if(i%3==0){
                demoSet.add(x);
            }else if(i%3==1){
                demo1Set.add(x);
            }else if (i%3==2){
                demo2Set.add(x);
            }
        }

3-6 定义看牌(遍历TreeSet集合,获取编号,到Hashmap集合找到对应的牌)

   public static void showPai(String name,TreeSet<Integer> treeSet,HashMap<Integer,String> hashMap){
        System.out.print(name+"的牌是:");
        for (Integer key:treeSet){
            String poker = hashMap.get(key);
            System.out.print(poker+"");
        }
        System.out.println("");
    }

3-7 方法调用和执行

showPai("demoSet",demoSet,hm);
        showPai("demo1Set",demo1Set,hm);
        showPai("demo2Set",demo2Set,hm);
        showPai("dpSet",dpSet,hm);

在这里插入图片描述

3-8 改进代码如下

package test1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerDemoPlus {
    public static void main(String[] args) {
        //创建hashmap,键是编号,值是牌
        HashMap<Integer,String> hm = new HashMap<Integer, String>();
        //创建arraylist,存储编号
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        //定义花色
        String colors[] = {"♦","♥","♠","♣"};
        //定义点数
        String numbers[] = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
        int index = 0;
        for (String number:numbers){
            for (String color:colors){
                hm.put(index,color+number);
                arrayList.add(index);
                index++;
            }
        }
        hm.put(index,"小王");
        arrayList.add(index);
        index++;
        hm.put(index,"大王");
        arrayList.add(index);

        //洗牌(洗的编号),用collections的shuffle()方法实现
        Collections.shuffle(arrayList);
        //发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
        TreeSet<Integer> demoSet = new TreeSet<Integer>();
        TreeSet<Integer> demo1Set = new TreeSet<Integer>();
        TreeSet<Integer> demo2Set = new TreeSet<Integer>();
        TreeSet<Integer> dpSet = new TreeSet<Integer>();
        for (int i = 0; i < arrayList.size(); i++) {
            int x = arrayList.get(i);
            if (i>=arrayList.size()-3){
                dpSet.add(x);
            }else if(i%3==0){
                demoSet.add(x);
            }else if(i%3==1){
                demo1Set.add(x);
            }else if (i%3==2){
                demo2Set.add(x);
            }
        }
        showPai("demoSet",demoSet,hm);
        showPai("demo1Set",demo1Set,hm);
        showPai("demo2Set",demo2Set,hm);
        showPai("dpSet",dpSet,hm);

    }
    //定义看牌(遍历TreeSet集合,获取编号,到Hashmap集合找到对应的牌)
    public static void showPai(String name,TreeSet<Integer> treeSet,HashMap<Integer,String> hashMap){
        System.out.print(name+"的牌是:");
        for (Integer key:treeSet){
            String poker = hashMap.get(key);
            System.out.print(poker+"");
        }
        System.out.println("");
    }
}


5,总结

好好学好Java基础,冲冲冲

* Game 类 * 功能:整个游戏:开始游戏 -> 初始牌 -> 洗牌 -> 发牌 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌集合 * 3.洗牌,将之前创建的扑克牌顺序打乱 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克牌 * public void showCard() //显示单支牌的花色和点数 * public void refreshCard() //洗牌 从第一支牌开始从所有牌中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发牌 从开始分别给A B发牌 每人两支 * public void showPeopleCard() //显示两个角色自己获得的牌 * public void sortCard() //将每个角色自己的牌按从小到大排序 * public void comparePeopleCard() //比较角色的牌 * * SingleCard类 实现Comparable接口 * 功能:产生单支牌 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前牌与SingleCard o的牌的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、和、存储牌的List集合。 * 方法: public People() //初始化存储牌的List集合; *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值