1.创建弹窗,并设置窗口属性。

2.创建Pool类,继承JPanel类,并重写paint方法。

3.创建Net类,

4.创建Fish类,继承Thread类,重写run方法。

5.刚开始先画一条鱼,一个动作,然后利用数组,定义多条鱼,在水里游起来,最后定义catchFish方法,捕鱼。

import javax.swing.*;public class FishGame {public static void main(String[] args) {//创建窗口JFrame jFrame = new JFrame();//创建一个Pool对象,并把该对象放到窗口上Pool pool = new Pool();jFrame.add(pool);//设置大小(窗口大小由池塘图片大小决定)jFrame.setSize(800,480);//设置居中jFrame.setLocationRelativeTo(null);//设置大小不可变jFrame.setResizable(false);//设置关闭窗口退出程序jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//展示窗口jFrame.setVisible(true);}
}
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;//继承JPanel类
public class Pool extends JPanel {//声明池塘图片BufferedImage poolImage;//声明池塘的宽和高,XY坐标int poolWidth = 0;int poolHeight = 0;int poolX = 0;int poolY = 0;//定义一个构造方法Pool(){try {//接收读取到的池塘图片,宽和高poolImage = ImageIO.read(new File("src/images/bg.jpg"));poolWidth = poolImage.getWidth();poolHeight = poolImage.getHeight();} catch (IOException e) {e.printStackTrace();}}//重写父类paint方法@Overridepublic void paint(Graphics g) {g.drawImage(poolImage,0,0,null);}
}

运行结果如下




import javax.swing.*;public class FishGame {public static void main(String[] args) {//创建窗口JFrame jFrame = new JFrame();//创建一个Pool对象,并把该对象放到窗口上Pool pool = new Pool();jFrame.add(pool);//设置大小(窗口大小由池塘图片大小决定)jFrame.setSize(800,480);//设置居中jFrame.setLocationRelativeTo(null);//设置大小不可变jFrame.setResizable(false);//设置关闭窗口退出程序jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//展示窗口jFrame.setVisible(true);//启动鼠标监听事件pool.action();}
}
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;//继承JPanel类
public class Pool extends JPanel {//声明池塘图片BufferedImage poolImage;//声明池塘的宽和高,XY坐标int poolWidth = 0;int poolHeight = 0;int poolX = 0;int poolY = 0;Net net = null;//定义一个构造方法Pool(){try {net = new Net();//接收读取到的池塘图片,宽和高poolImage = ImageIO.read(new File("src/images/bg.jpg"));poolWidth = poolImage.getWidth();poolHeight = poolImage.getHeight();} catch (IOException e) {e.printStackTrace();}}//重写父类paint方法@Overridepublic void paint(Graphics g) {g.drawImage(poolImage,0,0,null);g.drawImage(net.netImage,net.netX - net.netWidth/2,net.netY - net.netHeight/2,null);}//定义鼠标监听事件public void action(){MouseAdapter mouseAdapter = new MouseAdapter() {//点击@Overridepublic void mousePressed(MouseEvent e) {super.mousePressed(e);}//进入@Overridepublic void mouseEntered(MouseEvent e) {super.mouseEntered(e);}//退出@Overridepublic void mouseExited(MouseEvent e) {super.mouseExited(e);}//移动@Overridepublic void mouseMoved(MouseEvent e) {//将鼠标的坐标赋值给渔网net.netX = e.getX();net.netY = e.getY();}};//鼠标点击事件生效this.addMouseMotionListener(mouseAdapter);//重复画网,实现网跟着鼠标移动while (true){repaint();}}
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Net {//声明渔网图片,和渔网的长宽和XY坐标BufferedImage netImage;int netWidth = 0;int netHeight = 0;int netX = 0;int netY = 0;//创建无参构造方法Net(){try {//接收渔网图片,渔网的宽和高netImage = ImageIO.read(new File("src/images/net09.png"));netWidth = netImage.getWidth();netHeight = netImage.getHeight();} catch (IOException e) {e.printStackTrace();}}
}

运行效果,渔网可以跟着鼠标移动



import javax.swing.*;public class FishGame {public static void main(String[] args) {//创建窗口JFrame jFrame = new JFrame();//创建一个Pool对象,并把该对象放到窗口上Pool pool = new Pool();jFrame.add(pool);//设置大小(窗口大小由池塘图片大小决定)jFrame.setSize(800,480);//设置居中jFrame.setLocationRelativeTo(null);//设置大小不可变jFrame.setResizable(false);//设置关闭窗口退出程序jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//展示窗口jFrame.setVisible(true);//启动鼠标监听事件pool.action();}
}
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;//继承JPanel类
public class Pool extends JPanel {//声明池塘图片BufferedImage poolImage;//声明池塘的宽和高,XY坐标int poolWidth = 0;int poolHeight = 0;int poolX = 0;int poolY = 0;Fish fish;Net net = null;Fish[] fishes = new Fish[9];//定义一个构造方法Pool(){try {net = new Net();for (int i = 0; i < fishes.length; i++) {fishes[i] = new Fish(i);fishes[i].start();}//接收读取到的池塘图片,宽和高poolImage = ImageIO.read(new File("src/images/bg.jpg"));poolWidth = poolImage.getWidth();poolHeight = poolImage.getHeight();} catch (IOException e) {e.printStackTrace();}}//重写父类paint方法@Overridepublic void paint(Graphics g) {g.drawImage(poolImage,0,0,null);for (int i = 0; i < fishes.length; i++) {g.drawImage(fishes[i].fishImage,fishes[i].fishX,fishes[i].fishY,null);}g.drawImage(net.netImage,net.netX - net.netWidth/2,net.netY - net.netHeight/2,null);}//定义鼠标监听事件public void action(){MouseAdapter mouseAdapter = new MouseAdapter() {//点击@Overridepublic void mousePressed(MouseEvent e) {for (int i = 0; i < fishes.length; i++) {net.catchFish(fishes[i]);}}//进入@Overridepublic void mouseEntered(MouseEvent e) {super.mouseEntered(e);}//退出@Overridepublic void mouseExited(MouseEvent e) {super.mouseExited(e);}//移动@Overridepublic void mouseMoved(MouseEvent e) {//将鼠标的坐标赋值给渔网net.netX = e.getX();net.netY = e.getY();}};//鼠标点击事件生效this.addMouseMotionListener(mouseAdapter);this.addMouseListener(mouseAdapter);//重复画网,实现网跟着鼠标移动while (true){repaint();}}
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Net {//声明渔网图片,和渔网的长宽和XY坐标BufferedImage netImage;int netWidth = 0;int netHeight = 0;int netX = 0;int netY = 0;//创建无参构造方法Net(){try {//接收渔网图片,渔网的宽和高netImage = ImageIO.read(new File("src/images/net09.png"));netWidth = netImage.getWidth();netHeight = netImage.getHeight();} catch (IOException e) {e.printStackTrace();}}public void catchFish(Fish fish){if (netX > fish.fishX && netX < fish.fishX + fish.fishWidth &&netY > fish.fishY && netY < fish.fishY + fish.fishHeight){fish.fishX = 800;fish.fishY = (int) (Math.random()*480);}}
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Fish extends Thread{BufferedImage fishImage;int fishWidth = 0;int fishHeight = 0;int fishX = 0;int fishY = 0;int speed = (int) (Math.random()*10);BufferedImage[] fishImages = new BufferedImage[10];Fish(int index){try {for (int i = 0; i < fishImages.length; i++) {fishImages[i] = ImageIO.read(new File("src/images/fish0" + (index + 1) +"_0" + i +".png"));fishWidth = fishImages[i].getWidth();fishHeight = fishImages[i].getHeight();}} catch (IOException e) {e.printStackTrace();}}int a = 0;@Overridepublic void run() {fishX = 800;fishY = (int) (Math.random()*480);while (true){fishX = fishX - speed;a++;fishImage = fishImages[a%10];//鱼游到头重新游if (fishX < 0){fishX = 800;fishY = (int) (Math.random()*480);}try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}}}
}


运行结果如下:鼠标点击鱼即可捕捉,被捕捉的鱼返回起点 重新游

图片及源码在资源里

java多线程捕鱼达人小游戏相关推荐

  1. Java 实现 捕鱼达人 小游戏【附源码】

    博主介绍:

  2. 捕鱼达人小游戏——Java实现

    一.捕鱼达人小游戏,界面如下图: 二.有需要的代码自取: 链接:https://pan.baidu.com/s/1s5G2DwfSMlHoE4STanjKyw 提取码:evbg

  3. H5 canvas基础入门到捕鱼达人小游戏实现(1)

    为什么学习canvas? 看见别人网页一些非常炫酷的效果,羡慕不已,于是对canvas产生了浓厚的兴趣,所以想仔细学习学习canvas.下面就一起来学习吧,本文为系列文章,最后会编写一个简单版的捕鱼达 ...

  4. 基于c语言Easyx库的捕鱼达人小游戏

    基于c语言Easyx库的捕鱼达人小游戏(一) 文章目录 基于c语言Easyx库的捕鱼达人小游戏(一) 主菜单 游戏实现 捕鱼计分 下一阶段 主菜单 (写在前面的话:使用EASY-X库一定要命名为.cp ...

  5. html实现经典捕鱼达人小游戏

    文章目录 1.设计来源 1.1 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4315 ...

  6. 基于java8的捕鱼达人小游戏

    整体框架 #mermaid-svg-kwIdYePfSf2yisnx .label{font-family:'trebuchet ms', verdana, arial;font-family:var ...

  7. Java多线程——赛马娘小游戏

    基于热门手游赛马以及最近学的java多线程内容整合出的小游戏. public class HorseThread extends Thread{private double speed;private ...

  8. Unity-3D捕鱼达人小游戏开发 —— 起因和开始的设置以及准备工作

    起因 假期里的软件实践课,使用Unity-3D写一个游戏,试想也不能太low,但是奈何素材和资源太难找,在论坛上逛到了捕鱼达人的素材,便来试一试 开始 素材毕竟是从网上扒的,我觉得也不好放出来,存在网 ...

  9. H5 canvas基础入门到捕鱼达人小游戏实现(3)-canvas运动入门,渐变,文字渲染,阴影

    上一篇主要讲解了矩形柱状图,弧形和饼图的绘制,但是离我们的目标还是有点远,不要紧,我们基础api都还没有学习完,今天继续. 本节主要内容 - canvas画板制作 - 块的直线运动 - 粒子运动 - ...

最新文章

  1. 彻底搞懂Java内存泄露
  2. 如何在Linux下使用Gitblit工具创建Git仓库服务
  3. 1.7 元注解作用及使用
  4. Java基础day3
  5. 岁月在流逝,从阿里退下来接近70后程序猿带给我的启示
  6. docbook_DocBook简介,一种值得学习的灵活标记语言
  7. java内存不足错误_调试Java内存不足错误
  8. 一条UPDATE从生到死的整个过程的深入解析
  9. efi分区咋移动到c盘里_曲线解决——用原版镜像中的diskpart命令创建efi分区,分区类型为主分区的原因...
  10. Hello 2019(有待更新)
  11. python自定义函数详解_python 自定义函数
  12. 【eos系列】智能合约 私链激活 基本操作
  13. 第1天学习打卡(Javaweb 邮件发送:原理、发送简单文本邮件、发送带图片和附件邮件、网站注册发送邮件Servlet实现)
  14. php阴阳万年历转换的接口,用PHP写的阴阳万年历_PHP
  15. 致我们终将远离的子女
  16. 一种用于指导模拟 IC 布局的定制图神经网络模型
  17. html数独游戏制作,使用HTML5和ES6(JS)实现的在线数独游戏生成器和解答
  18. 构建知识体系(1):知识体系是什么?
  19. ZigZag Conversion(“Z”形转换)
  20. sqli-labs--Less7

热门文章

  1. 拼题A基础篇31 字符,字母的输出问题
  2. “操作系统的「冷板凳」要坐多久?”万字长文解读11年开源人的坚持
  3. 中科院计算机专业研究生分数线,中科院研究生录取分数线
  4. 系统架构设计笔记(59)—— 嵌入式系统的组成
  5. Onunload与Onbeforeunload的应用与区别
  6. 微信授权登录第三方app遇到的问题
  7. VS2019编译GDAL2.2.4
  8. $merge()合并两个数组方法
  9. “自如”的看房,“自如”的体验
  10. 基于最小系统的电路原理图绘制PCB图