基于java8的捕鱼达人小游戏

news/2025/2/14 5:34:42/

整体框架

捕鱼达人
欢迎界面
鱼类
鱼池类
网类

文件的大体在这里插入图片描述

分步实现

首先需要一个程序启动的入口

我这里命名的是FishGame.java
这里面主要功能就是创建一个窗体,然后将需要的鱼类,网类,鱼池类加入其中

	final JFrame wel = new JFrame("欢迎界面");final WelcomePanel welcome = new WelcomePanel();wel.setSize(800, 480);wel.setLocationRelativeTo(null);wel.setResizable(false);wel.setUndecorated(true);wel.add(welcome);wel.setVisible(true);wel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

以上是其中内容的一部分,完成在JFrame窗体中加入JPanel的欢迎面板。下面还有后续的加入鱼池等操作。

WelcomePanel.java类的作用

首先这个类继承了JPanel类,实现面板的基础功能,然后将这个面板加入JFrame窗体中。这里还有一个就是动态实现倒计时的功能。

public class WelcomePanel extends JPanel {BufferedImage image;int i = 4;public WelcomePanel(){try {image = ImageIO.read(new File("imgs/welcome.png"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void paint(Graphics g){i--;g.drawImage(image, 0, 0, null);Font font = new Font("宋体", Font.BOLD, 24);g.setFont(font);g.setColor(Color.YELLOW);g.drawString(i + "秒后,游戏开始", 350, 50);}
}

Fish.java

这里个是整个项目中最复杂的一个部分,这里的的每一条鱼都是一个线程,然后使用多线程技术完成鱼类的动态游动效果,鱼类的游动效果就是实现图片的快速加载,重画。

public Fish(String name) {try {for (int i = 0; i < imgs.length; i++) {imgs[i] = ImageIO.read(new File(name + "_0" + i + ".png"));}currentImg = imgs[0];width = currentImg.getWidth();height = currentImg.getHeight();index = 0;x = rand.nextInt(800 - width);y = rand.nextInt(480 - height);speed = rand.nextInt(10) + 2;} catch (IOException e) {e.printStackTrace();}}

以上是实现鱼类的构造方法,可以看到,就是完成多张图片的存储,其实化鱼类的位置和当前鱼类图片的大小。具体内容,见文末链接。

Pool.java

这个类的主要作用就是实现鱼类的加载,鱼类线程的启动,面板的重新绘制。

	public Pool() {//注册事件监听器//第一个this表示为pool添加事件监听器//第二个表示监听的对象为pool本身this.addMouseListener(this);this.addMouseMotionListener(this);try {bg = ImageIO.read(new File("imgs/bg.jpg"));}catch(IOException e) {e.printStackTrace();}power = 20;for(int i=0; i<9; i++) {fishes[i] = new Fish("imgs/fish0" + (i+1));fishes[i+11] = new Fish("imgs/fish0" + (i+1));}fishes[9] = new Fish("imgs/fish13");fishes[20] = new Fish("imgs/fish13");fishes[10] = new Fish("imgs/fish14");fishes[21] = new Fish("imgs/fish14");
//		for(int i=9; i<11; i++) {
//			fishes[i] = new Fish(i+4);
//			fishes[i+11] = new Fish(i+4);
//		}
//		fish = new Fish(13);}public void paint(Graphics g) {super.paint(g);g.drawImage(bg, 0, 0, null);
//		g.drawImage(fish.currentImg, fish.x, fish.y, null);for(int i=0; i<fishes.length; i++) {g.drawImage(fishes[i].currentImg, fishes[i].x, fishes[i].y, null);}if(net.show) {if(flag){g.drawImage(net.netImage, net.x - net.width/2, net.y - net.height/2, null);}else{g.drawImage(net.netImage, net.x - net.width/2/2, net.y - net.height/2/2, 80, 80, null);}}//绘制分数
//		Font font = new Font("宋体", Font.BOLD, 24);
//		g.setFont(font);
//		g.setColor(Color.WHITE);
//		g.drawString("分数: " + score, 350, 50);g.setColor(Color.YELLOW);Font font = new Font("宋体", Font.BOLD, 25);g.setFont(font);if(flag){g.drawString("当前网的状态:大网 ",0, 30);}else{g.drawString("当前网的状态:小网",0, 30);}g.setColor(Color.RED);g.drawString("当前体力值为:"+power, 400, 30);Font font1 = new Font("宋体", Font.BOLD, 15);g.setFont(font1);g.drawString("右击改变渔网大小", 0, 50);g.drawString("当前的条数为:"+fishCatched, 0, 70);g.drawString("得分为:" + score, 0, 90);}

这里只列举了其中主要实现的构造方法,和paint()方法的内容,具体内容见文末链接。

Net.java

这个模块应该是整个项目中比较简单的模块,完成网类的加载显示。其中最重要的一点就是捕鱼算法,这里算法的核心就是根据鱼类图片中心和网类图片中心点的距离与网图片宽度做对比来完成是抓到鱼的判断。

	public boolean catched(Fish f, boolean flag) {boolean result;int dx = Math.abs(this.x - f.x - f.width/2);int dy = Math.abs(this.y - f.y - f.height/2);int distance = (int)Math.sqrt(dx*dx + dy*dy);if(flag){result = distance < this.width/2 ? true : false;}else {result = distance < this.width/2/2 ? true : false;}return result;}

最后放上最后效果的照片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码下载地址


http://www.ppmy.cn/news/202990.html

相关文章

《全民捕鱼》游戏分析

文章目录 分析环境逆向分析日志分析法字符串分析法去除弹窗添加个人信息的破解 总结 分析环境 系统:Android 4.4 工具:Windows 10 64bit 夜神模拟器 Android Killer 游戏:全民捕鱼V1.7 文件: fkby.apk 大小: 14450756 bytes 修改时间: 2016年3月 11日, 14:53:34 MD5: C67C9D…

浏览器网页闪退原因分析

浏览器中网页闪退可能由多种原因引起。以下是一些可能的原因&#xff1a; 内存问题&#xff1a;如果浏览器占用过多内存&#xff0c;系统可能会强制关闭某些页面或整个浏览器以保护系统的稳定性。 扩展或插件冲突&#xff1a;某些浏览器扩展或插件可能与网页的代码或其他扩展产…

锐龙r75800h和i711800h哪个好 锐龙r75800h和i711800h的核显

酷睿i7-11800H采用的是Intel最新的10nm制程工艺&#xff0c;虽然在数字上看似比不上7nm&#xff0c;但是其大家都知道Intel的10nm不会弱于台积电的7nm和三星的5nm。基于Tiger Lake-H构架的i7-11800H处理器是规格大改后的产物&#xff0c;其中二级缓存容量高达10MB&#xff0c;上…

达人评测 锐龙r5 6600h和r5 6600u区别

R5-6600H配置参数&#xff1a;6nm的工艺&#xff0c;6核12线程&#xff0c;3.3GHz的主频&#xff0c;4.5GHz的睿频&#xff0c;三级缓存16MB&#xff0c;功耗TDP为45W&#xff0c;核显为radeon 660m&#xff0c;6CU 笔记本cpu选r5 6600h还是r5 6600u这些点很重要看过你就懂了 h…

锐龙R75800X和R5 5600X 哪个好

锐龙7 5800X&#xff0c;单CCD&#xff0c;8核心16线程&#xff0c;4MB二级缓存&#xff0c;32MB三级缓存&#xff0c;基准频率3.8GHz&#xff0c;最高加速4.7GHz&#xff0c;热设计功耗为105W。 选R7 5800X还是R5 5600X这些点很重要!看完你就知道了https://list.jd.com/list.h…

卧室投影仪需要多少流明比较好?流明怎么看?

家用投影仪流明&#xff0c;简单来说&#xff0c;就是亮度&#xff0c;它是衡量投影机性能的一个重要指标&#xff0c;流明越高&#xff0c;就算是白天强光的影响下&#xff0c;也能看的清 楚&#xff0c;那么家用投影仪多少流明合适&#xff1f;流明太高或太低都不太适合于照明…

python中Requests发送json格式的post请求方法

问题&#xff1a;做requests请求时遇到如下报错&#xff1a; {“code”:“500”,“message”:"JSON parse error: Cannot construct instance of com.bang.erpapplication.domain.User (although at least one Creator exists): no String-argument constructor/factory …

5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点(5)

要说目前销量最高的手机恐怕非三星i9500(GALAXY S4)莫属&#xff0c;该机沿袭了前作i9300的经典外观&#xff0c;5英寸1080P全高清屏幕的显示效果极为清晰细腻&#xff0c;1.6GHz Exynos 5处理器加2GB内存更是强悍无比。目前该机的售价在3480元左右&#xff0c;虽然价格不算便宜…