当前位置:   article > 正文

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

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

前提

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

如何进行插入

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

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

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

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

//linkedlist.size()集合长度

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

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

如何进行消除

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

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

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

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

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

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

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

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

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

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

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

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

  1. if(belowCards.size()<7){
  2. }
  3. else{
  4. JOptionPane.showMessageDialog(panel,"槽子已满,游戏结束"); //弹出提示框
  5. }

 最后的方法全图

  1. public static void addClickAction(LinkedList<JButton> cards, LinkedList<JButton> belowCards, JPanel panel){
  2. for(int i=0;i<cards.size();i++){ //遍历所有卡牌
  3. JButton card = cards.get(i); //获取每一张卡牌
  4. card.addActionListener(new ActionListener() {
  5. @Override
  6. public void actionPerformed(ActionEvent e) { //点击卡牌时自动执行
  7. if(belowCards.size()<7){ //卡槽中的卡牌不够7,则正常操作
  8. JButton current = (JButton)e.getSource(); //获取被点击的卡牌
  9. cards.remove(current); //1)将当前卡牌从cards中删除
  10. int num = belowCards.size(); //想插入卡牌的下标位置
  11. for(int index=0;index<belowCards.size();index++){ //遍历卡槽集合
  12. JButton card = belowCards.get(index); //获取卡槽中的每张卡牌
  13. if(card.getName().equals(current.getName())){ //若卡槽中有相同卡牌
  14. num = index; //修改要插入卡牌的位置
  15. break; //结束循环
  16. }
  17. }
  18. belowCards.add(num,current); //2)将当前卡牌存入到belowCards卡槽集合中
  19. /*
  20. 若num位置后面的第2个位置卡牌的名字与当前点击的卡牌名字相同,
  21. 说明3张卡牌连续了,则需要将它们从卡槽中删除
  22. */
  23. if(num+2<belowCards.size()){ //说明num后面最少有2张卡牌
  24. JButton card = belowCards.get(num+2); //获取当前卡牌后面的第2张卡牌
  25. //若当前卡牌后面的第2张卡牌的名称相同,说明三连了
  26. if(card.getName().equals(current.getName())){
  27. //将下标num的元素从卡槽集合中删除,并返回被删除的卡牌存到c1中
  28. JButton c1 = belowCards.remove(num);
  29. JButton c2 = belowCards.remove(num);
  30. JButton c3 = belowCards.remove(num);
  31. panel.remove(c1); //将c1从面板中删除
  32. panel.remove(c2);
  33. panel.remove(c3);
  34. }
  35. }
  36. panel.updateUI(); //刷新面板,若不刷新则可能删掉的卡牌还在卡槽中显示(窗口自身问题)
  37. for(int i=0;i<belowCards.size();i++){ //3.遍历卡槽中的所有卡牌
  38. //+64而不是+59原因为仅仅是为了和槽子的格式对齐了好看
  39. belowCards.get(i).setLocation(20+i*64,640); //设置卡槽中卡牌的位置
  40. }
  41. allCover(cards); //重新实现压牌操作
  42. current.removeActionListener(current.getActionListeners()[0]); //删除卡牌点击事件
  43. }else{ //够7了,则弹框提示游戏结束
  44. JOptionPane.showMessageDialog(panel,"槽子已满,游戏结束"); //弹出提示框
  45. }
  46. }
  47. });
  48. }
  49. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/213142?site
推荐阅读
相关标签
  

闽ICP备14008679号