list集合练习----斗地主

要求:

1、自定义洗牌方式,不能使用Collections.shuffle(pokers);方法

2、发完牌后对扑克牌进行排序

一、初始化扑克牌

分析:

把扑克牌一一存进list集合

分析:定义并静态初始化两个数组,一个存储花色colors[],一个存储数值numbers[]

两个for循环遍历把扑克牌存进list,然后加上”大王“ ”小王“。

public static void  initPorkers(ArrayList<String> list){
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        String[] colors = {"♦", "♥", "♣", "♠"};
        for (String color: colors){
            for (String number: numbers) {
                String poker = color+number;
                list.add(poker);
            }
        }
        list.add("大🃏");
        list.add("小🃏");
        System.out.print("发牌前:");
        for (String p:list) {
            System.out.print(p);
        }
    }

二、洗牌(打乱排序)

//        Collections.shuffle(list);
//        System.out.println("打乱牌后:"+list);

也可以直接使用上述方法打乱顺序。

分析

根据 set 的不可重复性定义一个Set集合,把随机生成的数存进Set集合

然后把Set转为list集合,遍历List结合,根据Set集合的下标获取到原来List的牌值,然后存进新List集合。

 public static ArrayList  daluanPokers(ArrayList<String> list){
        ArrayList<String> list1 = new ArrayList<>();//洗完牌的集合
        Set<Integer> pokers =new LinkedHashSet<>();
         Random r = new Random();
        while(pokers.size()<list.size()){
            int randonNum = r.nextInt(54);
            pokers.add(randonNum);
        }
        ArrayList<Integer> arrayList = new ArrayList<>(pokers);
        for (int i=0;i<arrayList.size();i++){
            list1.add(list.get(arrayList.get(i)));
        }
        return list1;
//        Collections.shuffle(list);
//        System.out.println("打乱牌后:"+list);
    }

三、发牌

分析

共有54张牌,3张底牌

ublic static void  faPokers(ArrayList<String> list,ArrayList<String> play01,ArrayList<String> play02,
                                 ArrayList<String> play03,ArrayList<String> dipai){
        
        for (int i=0;i<list.size();i++){
            String poker = list.get(i);
            if (i>50){
                dipai.add(poker);
            }else if (i%3==0){
                play01.add(poker);
            }else if (i%3==1){
                play02.add(poker);
            }else {
                play03.add(poker);
            }
        }
        System.out.print("玩家1排序前的牌:");
        for (String poker : play01) {
            System.out.print(poker + " ");
        }
        System.out.println();
        System.out.print("玩家2排序前的牌:");
        for (String poker : play02) {
            System.out.print(poker + " ");
        }
        System.out.println();
        System.out.print("玩家3排序前的牌:");
        for (String poker : play03) {
            System.out.print(poker + " ");
        }
        System.out.println();
        System.out.print("底牌排序前的牌:");
        for (String poker : dipai) {
            System.out.print(poker + " ");
        }
        System.out.println();

    }

四、排序

这个排序方法是参考网上的,以下是我的分析

将每个牌按照牌的大小进行赋值,“大王” “小王”为最大,所以分别赋值为162,161;

‘2’,‘A’,‘K’,‘Q’,‘J ’,依次为150,140,130,120,110

由于我前面初始化扑克牌时的拼接是 花色加数字 ,所以我只需截取花色后面的字符 即 数字

3--10的牌,然后乘以10,就为 10,20,30......等数字了,最后再加上花色1,2,3,4,便可以把扑克牌字符转为数字了,之后便是简单的排序

private static ArrayList<String> paixu(ArrayList<String> list){
        ArrayList<Integer> movecard=new ArrayList<>();
        int f=0;
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).equals("大🃏"))
                f=162;
            else if(list.get(i).equals("小🃏"))
                f=161;
            else {
                if (list.get(i).substring(1).equals("A"))
                    f = 140;
                else if (list.get(i).substring(1).equals("2"))
                    f = 150;
                else if (list.get(i).substring(1).equals("J"))
                    f = 110;
                else if (list.get(i).substring(1).equals("Q"))
                    f = 120;
                else if (list.get(i).substring(1).equals("K"))
                    f = 130;
                else f= Integer.parseInt(list.get(i).substring(1)) * 10;

                if(list.get(i).substring(0,1).equals("♠")){
                    f+=4;
                }else if(list.get(i).substring(0,1).equals("♥")){
                    f+=3;
                }else if(list.get(i).substring(0,1).equals("♣")){
                    f+=2;
                }else if(list.get(i).substring(0,1).equals("♦")){
                    f+=1;
                }
            }
            movecard.add(f);
        }
        //System.out.print(movecard+" ");
        //正式排序
        for (int i = list.size(); i > 1; i--) {
            for (int j = 0; j < i-1; j++) {
                if(movecard.get(j) < movecard.get(j+1)){
                    swap(movecard,j,j+1);
                    swap(list,j,j+1);
                }
            }
        }
      // System.out.print("movecare:"+movecard);
        return list;
    }

swap方法如下:

private static <E> void swap(List<E> list, int index1, int index2) {
        E e=list.get(index1);
        //使用两个set方法将j 和 j+1的值交换
        list.set(index1, list.get(index2));

        list.set(index2, e);//将index2位置上的元素用e替代,并返回原来的zhi
    }

注意:

最后还要将数字转为扑克牌,

swap(list,j,j+1);便是此方法的关键

五、结果

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: list-style-image是CSS中用来设置列表项标记图片的属性。通过设置list-style-image属性,可以将自定义的图片作为列表项标记,从而实现更加个性化的列表样式。 具体使用方法如下: 1. 首先,需要准备好自定义的图片,可以是PNG、JPEG等格式的图片文件。 2. 在CSS中,使用list-style-image属性来设置列表项标记图片,例如: ul { list-style-image: url('image.png'); } 上述代码中,ul表示要设置的列表元素,list-style-image属性指定了要使用的图片文件路径。 3. 可以通过调整list-style-image属性的值,来调整图片的位置、大小等属性。例如: ul { list-style-image: url('image.png'); list-style-position: inside; list-style-size: 20px; } 上述代码中,list-style-position属性设置了图片在列表项内部显示,list-style-size属性设置了图片的大小为20px。 总之,通过使用list-style-image属性,可以轻松实现自定义的列表项标记图片,从而达到更加个性化的列表样式。 ### 回答2: 在 HTML 和 CSS 中,列表是一个非常常见的元素类型,用于显示一系列相关的项目或选项。默认情况下,列表项的符号是圆点、数字或字母,但是我们可以利用 CSS 的 list-style-image 属性将一个自定义的图片代替默认符号。以下是关于 list-style-image 调整图片的详细说明。 1. 语法 list-style-image 属性接受一个图片的 URL(如 URL("image.jpg"))或者 none。例如: ul { list-style-image: url("bullet.png"); } 这将把 ul 元素的所有列表项的默认符号替换成 bullet.png 图片。 2. 调整图片大小 如果您想调整图片的大小,可以使用 background-size 属性。例如: ul { list-style-image: url("bullet.png"); background-size: 16px 16px; /* 适合大小 */ } 此代码将使 bullet.png 图片以 16 像素的高度和宽度显示在列表项前面。 3. 更换不同的图片 如果您想使用不同的图片,只需将 URL 更改为所需的图片路径。例如: ul { list-style-image: url("check.png"); } 此代码将使用 check.png 图片作为列表项符号。注意,图片文件的路径应该是相对于样式表的。 4. 将图片设置为 none 如果您想完全删除列表项前面的符号,可以将 list-style-image 设置为 none。例如: ul { list-style-image: none; } 此代码将完全删除列表项的默认符号。 总之,list-style-image 是一种非常有用的 CSS 属性,可以用来调整列表项中默认的符号,以及添加自定义的图片符号。通过使用 background-size 属性和更换图片,我们可以进一步调整图片的大小和外观,从而获得更好的显示效果。在开发网页时,熟练掌握这个属性非常重要。 ### 回答3: list-style-image是CSS中用于设置列表符号的属性,它可以将图片作为列表符号展示。通过设置list-style-image属性,我们可以自定义列表符号的样式,将图片作为列表符号,让列表更加生动、有趣。 list-style-image可以通过设置URL来引入图片文件作为列表符号,也可以通过设置none来隐藏列表符号。一般情况下,我们需要将图片文件与HTML文件放在同一个文件夹下,然后使用相对路径引入图片。 当我们使用list-style-image属性时,还可以设置其他属性来调整图片的展示效果。比如设置list-style-position属性来控制列表符号的位置,该属性有两个值可选:inside和outside。inside表示将列表符号放在文本内部,而outside表示将列表符号放在文本外部。通过设置这两个属性值,可以让列表中的图片符号更加灵活展示。 另外,list-style-image还支持设置图片宽度和高度,通过设置这两个属性,可以让图片符号大小保持统一,使得列表更加美观整洁。 总之,通过使用list-style-image属性来调整图片,可以让列表符号更加生动有趣,让用户更加愿意浏览和阅读我们的网页内容。在使用时,需要注意图片文件的引入方式以及设置其他属性来控制图片符号的展示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值