当前位置:   article > 正文

java-初级项目实战-(swing篇)-羊了个羊(动态交互,)

java-初级项目实战-(swing篇)-羊了个羊(动态交互,)

判断是否压牌

蓝框为b方格的宽度和高度的2倍,

判断t方格是否压住b方格,就要保证t方格的左上的黑点始终在蓝框内

即t的 x坐标(x1,x2)之间,y(y1,y2)之间

t方格的黑点设置为(x,y)

x1的x即为b的左上点x-其宽度

x2的x即为b左上点x+其宽度

y1的y即为b的左上点y-其高度

y2的y即为b的左上点y+其高度

  1. public static boolean isCovered(JButton top,JButton bottom){
  2. int x1 = bottom.getX()-59;
  3. int x2 = bottom.getX()+59;
  4. int y1 = bottom.getY()-63;
  5. int y2 = bottom.getY()+63;
  6. int x = top.getX();//x:top的x坐标
  7. int y = top.getY();//y:top的y坐标
  8. return x>x1 && x<x2 && y>y1 && y<y2;
  9. }

先检测2张牌是否压住

  1. //判断索引50是否压住索引为2的值
  2. JButton bottom = cards.get(2);
  3. JButton top = cards.get(50);
  4. boolean isCover = isCovered(top,bottom);
  5. if(isCover){
  6. bottom.setEnabled(false);}
  7. else{
  8. bottom.setEnabled(true);
  9. }

运行结果 

 遍历所有手牌

  1. public static void allCover(LinkedList<JButton> cards){
  2. for(int index=0;index<cards.size();index++){ //遍历所有卡牌
  3. JButton bottom = cards.get(index); //获取下标为index的卡牌
  4. for(int i=index+1;i<cards.size();i++){ //遍历当前卡牌后面的所有卡牌
  5. JButton top = cards.get(i); //获取后面的卡牌
  6. boolean cov = isCovered(top,bottom); //判断是否压住
  7. if(cov){ //若压住了
  8. bottom.setEnabled(false); //设置按钮不可用
  9. break; //结束循环,若不结束则后面的卡牌没压住走else又点亮了
  10. }else{ //没压住
  11. bottom.setEnabled(true); //设置按钮可用
  12. }
  13. }
  14. }
  15. }

错误图

  1. public static boolean isCovered(JButton top,JButton bottom){
  2. int x1 = bottom.getX()-59;
  3. int x2 = bottom.getX()+59;
  4. int y1 = bottom.getY()-63;
  5. int y2 = bottom.getY()+63;
  6. int x = top.getX();//x:top的x坐标
  7. int y = top.getY();//y:top的y坐标
  8. return x>=x1 && x<=x2 && y>=y1 && y<=y2; //这边不能写=,不能接触边框
  9. }

添加一个新的集合,用于存储下方的图片

  LinkedList<JButton> belowCards = new LinkedList<>();

将下方图片添加到一个盒子中(简单的添加)

  1. public static void addClickAction(LinkedList<JButton> cards,LinkedList<JButton>belowCards ,JPanel panel){
  2. //在准备一个集合,存取下面卡槽的卡牌
  3. for (int i = 0; i < cards.size(); i++) {
  4. JButton card = cards.get(i);
  5. card.addActionListener(new ActionListener() {
  6. @Override
  7. public void actionPerformed(ActionEvent e) {
  8. //添加监听事件
  9. JButton current = (JButton)e.getSource();//获取被点击的source
  10. cards.remove(current);//移除被点击的source
  11. belowCards.add(current);//添加被移除的source
  12. for (int i1 = 0; i1 < belowCards.size(); i1++) {
  13. belowCards.get(i1).setLocation(20+(i1*63),640);//
  14. }
  15. }
  16. });
  17. }
  18. }

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

闽ICP备14008679号