类的设计
Pool 继承 JPanel
background
Fish[] allFish
FishingNet fishingNet
Fish
x
y
width
height
images
index
image
FishingNet
x
y
width
height
image
素材在最下面:ps技术有限 不喜欢的可以自己画!!!
package xyz.rhel.fish; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class FishingNet { private int x; private int y; private int width; private int height; private BufferedImage image; private boolean show; public FishingNet(String img) throws Exception { image = ImageIO.read(new File(img)); width = image.getWidth(); height = image.getHeight(); } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } public boolean isShow(){ return show; } public void setShow(boolean show){ this.show = show; } }
package xyz.rhel.fish; import java.awt.image.BufferedImage; import java.io.File; import java.util.Random; import javax.imageio.ImageIO; public class Fish implements Runnable { private int x; private int y; private int width; private int height; private int index; private int step; private BufferedImage[] images; private BufferedImage image; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public int getStep() { return step; } public void setStep(int step) { this.step = step; } public BufferedImage[] getImages() { return images; } public void setImages(BufferedImage[] images) { this.images = images; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } public Fish(String perfix) throws Exception { images = new BufferedImage[10]; for (int i = 0; i < 10; i++) { String file = perfix + i + ".png"; images[i] = ImageIO.read(new File(file)); } image = images[0]; width = image.getWidth(); height = image.getHeight(); Random random = new Random(); x = random.nextInt(800 - width); y = random.nextInt(480 - height); step = random.nextInt(3) + 1; } public void getOut() { Random random = new Random(); x = 800; y = random.nextInt(480 - height); step = random.nextInt(3) + 1; } public void move() {// 鱼移动 x -= step; if (x < -width) { getOut(); } image = images[index++%images.length];//更换图片 } public boolean catchBy(FishingNet fishingNet) {// 抓鱼 int dx = fishingNet.getX() - this.x; int dy = fishingNet.getY() - this.y; return dx >= 0 && dx < width && dy >= 0 && dy < height; } public void run() {// 在Runnable 中定义的抽象方法,在子类中来重写 while (true) { move(); try { Thread.sleep(1000 / 10); } catch (Exception e) { e.printStackTrace(); } } } }
package xyz.rhel.fish; import static javax.imageio.ImageIO.read; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; public class Pool extends JPanel { private BufferedImage background; private FishingNet fishingNet; private Fish[] all; public Pool() throws Exception{ background = read(new File("pool.png")); fishingNet = new FishingNet("fishingNet.png"); all = new Fish[]{ new Fish("f"),new Fish("f"),new Fish("f"),new Fish("f") ,new Fish("f"),new Fish("f"),new Fish("f"),new Fish("f") ,new Fish("df"),new Fish("df"),new Fish("df"),new Fish("df") ,new Fish("df"),new Fish("df"),new Fish("df"),new Fish("df") ,new Fish("jf"),new Fish("jf"),new Fish("jf"),new Fish("jf") }; } public void paint(Graphics g){ g.drawImage(background,0,0,null); for(Fish fish :all){ int x = fish.getX(); int y = fish.getY(); g.drawImage(fish.getImage(),x,y,null); } if(fishingNet.isShow()){ Image img = fishingNet.getImage(); int x = fishingNet.getX() - fishingNet.getWidth()/2; int y = fishingNet.getY() - fishingNet.getHeight()/2; g.drawImage(img,x,y,null); } } protected void catchFish(){ for(Fish fish:all){ if(fish.catchBy(fishingNet)){ fish.getOut(); } } } public void action()throws Exception{ for(Fish fish:all){ Thread t = new Thread(fish); t.start(); } MouseAdapter l = new MouseAdapter(){ public void mousePressed(MouseEvent e) { catchFish(); } public void mouseMoved(MouseEvent e) { int x = e.getX(); int y = e.getY(); fishingNet.setX(x); fishingNet.setY(y); } public void mouseEntered(MouseEvent e) { fishingNet.setShow(true); } public void mouseExited(MouseEvent e) { fishingNet.setShow(false); } }; this.addMouseListener(l); this.addMouseMotionListener(l); while(true){ repaint(); Thread.sleep(1000/24); } } public static void main(String[] args)throws Exception{ JFrame frame = new JFrame("捕鱼达人"); frame.setSize(800, 600); frame.setLocationRelativeTo(null); Pool pool = new Pool(); frame.add(pool); frame.setVisible(true); pool.action(); } }
时间: 2024-10-10 00:32:35