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+其高度

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

先检测2张牌是否压住

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

运行结果 

 遍历所有手牌

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

错误图

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

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

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

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

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() {@Overridepublic void actionPerformed(ActionEvent e) {
//添加监听事件JButton current =   (JButton)e.getSource();//获取被点击的sourcecards.remove(current);//移除被点击的sourcebelowCards.add(current);//添加被移除的sourcefor (int i1 = 0; i1 < belowCards.size(); i1++) {belowCards.get(i1).setLocation(20+(i1*63),640);//}}});}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525511.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM-1

目录 1.基础知识 1.栈 2.本地方法栈 3.程序计数器 4.堆 5.方法区 6.JVM内存可见性 2.虚拟机类加载机制 1.加载 2.验证 3.准备 4.解析 5.初始化 6.使用 7.卸载 1.基础知识 JVM内存模型&#xff08;5种&#xff09;&#xff1a;栈&#xff0c;本地方法栈&#xff…

使用Git将代码上传至代码托管平台GitCode

使用像GitLbi、GitHub、Gitee等代码托管平台用于版本控制非常滴方便&#xff0c;能够跟踪代码的变化和历史记录&#xff0c;方便管理和回滚&#xff0c;还允许多个开发者同时在一个项目上进行开发和协作&#xff0c;提高团队协作效率。 这些平台的代码托管和上传方式都大同小异…

IP-guard邮件管控再升级,记录屏幕画面,智能阻断泄密邮件

邮件是工作沟通以及文件传输的重要工具,却也成为了信息泄露的常见渠道。员工通过邮件对外发送了什么内容,是否含有敏感信息都无从得知,机密通过邮件渠道外泄也难以制止。想要防止企业的重要信息通过邮件方式泄露,我们不仅需要通过技术措施对外发邮件的行为进行规范,也要对…

mysql-视图,创建表,存储过程,循环,判断实操命令

数据库操作命令在IDEA工具database的console命令 数据库表结构与视图 事务隔离级别RR&#xff08;REPEATABLE-READ&#xff09;解决不可重复读演示 mysql-RR隔离级别 -- 查询隔离级别 select transaction_isolation;-- 设置隔离级别 set session transaction isolation level …

【Linux】编译器-gcc/g++使用

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 初见gcc和g3. 程序的翻译过程3.1 预处理3.1.1 宏替换 去注释 头文件展开3.1.2 条件编译 3.2 编译3.3 汇编3.4 链接 4. 链接4.1 动态链接4.2 静态链接 1. 前言 在之…

【学习教程】Vision Pro:开发学习资源

unity 官方网站上线了一款课程,准备好迎接 Apple Vision Pro:免费学习资源汇总。 本合集则是为想要探索 Apple Vision Pro 的创作者提供全方位指导, 由浅入深,与你一同创造前所未有的 沉浸式空间交互体验 的新奇内容。 合集包含最新的开发技术文档。从入门的基础知识核心…

FREERTOS DAY3

作业&#xff1a;1.总结任务的调度算法&#xff0c;把实现代码再写一下&#xff0c; FreeRTOS中默认的调度算法是 抢占式调度时间片轮转 1.抢占式调度&#xff1a;任务优先级高的可以打断任务优先级低的执行&#xff08;适用于不同优先级&#xff09; 2.时间片轮转&#xff…

图的单源最短路径问题

目录 一、简述 二、前置配置 三、迪杰斯特拉算法 四、改进的迪杰斯特拉算法 五、贝尔曼福特算法 一、简述 图是一种比较常用的数据结构&#xff0c;将问题转换成图相关的思路也是比较常用的。 图的单源最短路径问题&#xff0c;也就是图中某一个节点到图中其他节点的最短路…

java中的字符串比较(题目作示例)

错误的代码 import java.util.Scanner; public class one {public static void main(String[] args) {Scanner scnew Scanner(System.in);String b"47568";int i0;for ( i 0; i <3; i){String asc.next();if(ab){System.out.println("密码正确&#xff0c;登…

CUDA学习笔记02:测试程序hello world

参考资料 Win10下在VS2019中配置使用CUDA进行加速的C项目 &#xff08;配置.h文件&#xff0c;.dll以及.lib文件等&#xff09;_vs2019 cuda-CSDN博客 配置流程 1. 新建一个一般的项目 2. 项目建好后&#xff0c;在项目里添加.cu测试文件 测试的.cu文件命名为cuda_utils.cu&…

vscode 格式化prettier失败出现一大堆错误

如题&#xff0c;使用vscode开发项目时候&#xff0c;会自动进行格式化【安装prettier插件】 但是有时候会出现格式化失败的情况&#xff0c;如果插件安装正确&#xff0c;则可能是代码出现了格式问题。

【NR 定位】3GPP NR Positioning 5G定位标准解读(十)-增强的小区ID定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…