消除区域的实现

消除区域的实现


学习于bilibili 尚学堂官方

1. 在model里创建类


在model中创建EliminateBox类

package com.zy.model;

/*
消除区域
 */

import java.util.ArrayList;
import java.util.List;

public class EliminateBox {
    //存放点击牌的数据
    private static List<Brand> slot = new ArrayList<>();

    //消除牌的方法
    public void addSlot(Brand brand){

        slot.add(brand);

        paint();

    }

    //将点击的牌绘制到消除框
    void paint(){
        for (int i = 0; i < slot.size(); i++) {
            Brand brand = slot.get(i);
            int x = i * brand.getWidth() + 10;
            brand.setBounds(x,600,50,50);



        }
    }

}

Brand注释代码

//brand.getParent().remove(brand);//通过父容器删掉自己  一般树形结构使用此方式

在Brand中new一下消除区域类

    EliminateBox eliminateBox = new EliminateBox();

在点击事件里调用消除牌的方法

 //此时只是在页面ui树中删除了对象,Cell的state和Brand没有删除
                    //brand.getParent().remove(brand);//通过父容器删掉自己  一般树形结构使用此方式

                    eliminateBox.addSlot(brand);

                    //解决  既要删除UI的图片  也要删除数据模型的数据和对应状态
                    cell.setState(0);
                    cell.setBrand(null);

2. 消除区域牌的排序


在EliminateBox中

public void addSlot(Brand brand){

        slot.add(brand);

        //牌的排序  根据牌的名称
        slot.sort(Comparator.comparing(Brand::getName));

        paint();

    }

3. 牌的消除方法


在EliminateBox中

    public void addSlot(Brand brand){

        slot.add(brand);

        //牌的排序  根据牌的名称
        slot.sort(Comparator.comparing(Brand::getName));

        //获取牌名称
        Map<String, List<Brand>> map = slot.stream().collect(Collectors.groupingBy(Brand::getName));
        Set<String> key = map.keySet();
        for (String s : key) {
            List<Brand> brands = map.get(s);
            if (brands.size() == 3){
                
                break;
            }
        }
            paint();

    }

使用迭代器清空集合

创建方法

/*
    迭代器清空集合
     */
    void deleteByBrandName(String name){
        //获取迭代器
        Iterator<Brand> iterator = slot.iterator();
        while (iterator.hasNext()){
            //获取下一个元素
            Brand next = iterator.next();
            //判断
            if (next.getName().equals(name)){
                next.getParent().remove(next);
                iterator.remove();
            }
        }
    }

调用方法

if (brands.size() == 3){
                deleteByBrandName(s);

                break;
}

4. 游戏失败

写方法

void over(Brand brand){
        if (slot.size() >= 7){
            JOptionPane.showMessageDialog(brand,"游戏结束");

            System.exit(0);
        }
    }

调用

        paint();
        over(brand);

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值