600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java多线程捕鱼达人小游戏

java多线程捕鱼达人小游戏

时间:2022-08-21 19:14:23

相关推荐

java多线程捕鱼达人小游戏

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(Image,X - Width/2,Y - Height/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) {//将鼠标的坐标赋值给渔网X = e.getX();Y = 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(Image,X - Width/2,Y - Height/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) {//将鼠标的坐标赋值给渔网X = e.getX();Y = 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();}}}}

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

图片及源码在资源里

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。