java-新手项目(swing)-羊了羊(消除和插入)

前提

这是   java-初级项目实战-(swing篇)-羊了个羊(动态交互,)-CSDN博客   后续

如何进行插入

当有相同的卡牌,可以让第二个找到元素索引替换成第一个找到的元素索引

替换是当元素的名称字符串相等执行

add(index,element) 是可以让元素进行追加或者插入,

追加即最后一个元素的索引加1,即 (linkedlist.size()-1)+1即索引的长度,

//linkedlist.size()集合长度

插入最后一个元素前面 即当前最后一个元素的索引 即 (linkedlist.size()-1),

 int num = belowCards.size(); //想插入卡牌的下标位置
 for(int index=0;index<belowCards.size();index++){ //遍历卡槽集合
 JButton card = belowCards.get(index); //获取卡槽中的每张卡牌
 if(card.getName().equals(current.getName())){ //若卡槽中有相同卡牌
                                num = index; //修改要插入卡牌的位置
                                break; //结束循环
                            }
                        }
 belowCards.add(num,current);

如何进行消除

当元素有三个相同时候,就执行消除操作

当前索引加2,如果当前索引和之后的索引的元素名称相同就执行删除操作

remove(index)这是删除对应的索引值的元素,同时集合长度减1

如果用集合长度作为下标就需要连续删除当前下标三次,同时在面板中移除

                       if(num+2<belowCards.size()){ //说明num后面最少有2张卡牌
                            JButton card = belowCards.get(num+2); //获取当前卡牌后面的第2张卡牌
                            //若当前卡牌后面的第2张卡牌的名称相同,说明三连了
                            if(card.getName().equals(current.getName())){
                                //将下标num的元素从卡槽集合中删除,并返回被删除的卡牌存到c1中
                                JButton c1 = belowCards.remove(num);
                                JButton c2 = belowCards.remove(num);
                                JButton c3 = belowCards.remove(num);
                                panel.remove(c1); //将c1从面板中删除
                                panel.remove(c2);
                                panel.remove(c3);
                            }
                        }
  panel.updateUI(); //刷新面板,若不刷新则可能删掉的卡牌还在卡槽中显示(窗口自身问题)

需要同时刷新一下面板 (注意)

panel.updateUI(); //刷新面板,若不刷新则可能删掉的卡牌还在卡槽中显示(窗口自身问题)

对于牌的移除之后,我们需要重新压牌,即重新调用自己写的方法

allCover(cards); //重新实现压牌操作

同时我们需要消除卡牌点击事件,进入below的集合的卡牌不会被点击触发

current.removeActionListener(current.getActionListeners()[0]);

最后我们需要限定卡槽的集合的长度<=7,如果大于7我们要弹出提示语

   if(belowCards.size()<7){

}
else{
 JOptionPane.showMessageDialog(panel,"槽子已满,游戏结束"); //弹出提示框

}

 最后的方法全图

 public static void addClickAction(LinkedList<JButton> cards, LinkedList<JButton> belowCards, JPanel panel){
        for(int i=0;i<cards.size();i++){ //遍历所有卡牌
            JButton card = cards.get(i); //获取每一张卡牌
            card.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) { //点击卡牌时自动执行
                    if(belowCards.size()<7){ //卡槽中的卡牌不够7,则正常操作
                        JButton current = (JButton)e.getSource(); //获取被点击的卡牌
                        cards.remove(current); //1)将当前卡牌从cards中删除
                        int num = belowCards.size(); //想插入卡牌的下标位置
                        for(int index=0;index<belowCards.size();index++){ //遍历卡槽集合
                            JButton card = belowCards.get(index); //获取卡槽中的每张卡牌
                            if(card.getName().equals(current.getName())){ //若卡槽中有相同卡牌
                                num = index; //修改要插入卡牌的位置
                                break; //结束循环
                            }
                        }
                        belowCards.add(num,current); //2)将当前卡牌存入到belowCards卡槽集合中
                        /*
                          若num位置后面的第2个位置卡牌的名字与当前点击的卡牌名字相同,
                          说明3张卡牌连续了,则需要将它们从卡槽中删除
                         */
                        if(num+2<belowCards.size()){ //说明num后面最少有2张卡牌
                            JButton card = belowCards.get(num+2); //获取当前卡牌后面的第2张卡牌
                            //若当前卡牌后面的第2张卡牌的名称相同,说明三连了
                            if(card.getName().equals(current.getName())){
                                //将下标num的元素从卡槽集合中删除,并返回被删除的卡牌存到c1中
                                JButton c1 = belowCards.remove(num);
                                JButton c2 = belowCards.remove(num);
                                JButton c3 = belowCards.remove(num);
                                panel.remove(c1); //将c1从面板中删除
                                panel.remove(c2);
                                panel.remove(c3);
                            }
                        }
                        panel.updateUI(); //刷新面板,若不刷新则可能删掉的卡牌还在卡槽中显示(窗口自身问题)

                        for(int i=0;i<belowCards.size();i++){ //3.遍历卡槽中的所有卡牌
                            //+64而不是+59原因为仅仅是为了和槽子的格式对齐了好看
                            belowCards.get(i).setLocation(20+i*64,640); //设置卡槽中卡牌的位置
                        }
                        allCover(cards); //重新实现压牌操作
                        current.removeActionListener(current.getActionListeners()[0]); //删除卡牌点击事件
                    }else{ //够7了,则弹框提示游戏结束
                        JOptionPane.showMessageDialog(panel,"槽子已满,游戏结束"); //弹出提示框
                        
                    }
                }




            });
        }
    }

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值