赞
踩
前提
这是 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,"槽子已满,游戏结束"); //弹出提示框
-
- }
- }
-
-
-
-
- });
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。