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. [BZOJ 1014][JSOI2008]火星人prefix(Splay+二分+hash)
  2. Spark之 spark简介、生态圈详解
  3. 地大计算机学院教授,张静(地大教授)
  4. Windows Phone 内容滑动切换实现
  5. 一条拼了40min的hql引发的思考
  6. fu7推挽胆机音质_fu7电子管功放电路图大全(6N8P\6P3P\胆机功放电路\耦合电容器) - 全文...
  7. 十大免费DNS域名解析服务-稳定,可靠,好用的免费DNS服务
  8. 知网研学打不开?一片空白怎么办?一步解决
  9. 如何调换手机桌面位置_手机桌面很乱怎么整理?简单七招让你效率更高!
  10. Mac无法连接到WiFi怎么办?帮您恢复在线的最佳解决方案
  11. 360惊天后门曝光:“盗梦盒子”重现江湖
  12. ifconfig command not found
  13. Explain语法(精)
  14. 解决微信内红域名无需申诉过白
  15. 怎么让俩张图片在一行_壁纸文案 | 我们俩不会道别
  16. JavaEE学习笔记整理
  17. UDS(七)应用层 28/85
  18. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON12 IPCORE核之FIFO详细教程
  19. 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树
  20. 入手评测 骁龙888Plus、骁龙888和苹果a15哪个好

热门文章

  1. 【无标题】2 层 PCB 上 USB 2.0 的布线要求
  2. 非常非常好用的在线翻译网站
  3. 一步一步实现STM32-FOTA系列教程之FLASH静态区读写
  4. 微信公众号后台java开发实现自动回复机器人
  5. MySql高可用搭建 + 读写分离 + 分库分表
  6. 兔子繁殖问题(斐波那契数列c语言版)
  7. 从精益软件到精益思想
  8. 第13章 说 明 符
  9. js干货-Bom,Dom事件及各种案例
  10. 舰娘 html5 缓存,舰R魔改专用客户端