捕鱼达人原代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计简述:
本程序为简单地捕鱼达人程序,有四个类,fish类为鱼的实体类。
同时也是一个线程类,每一条鱼都是一个线程,Pool类继承的JPanel类,Pool类中重写了绘图函数。
通过改变与的位置并且不断的绘图来实现鱼的动作。
Net类是渔网的一个实体类,当渔网和鱼碰撞检测成功时,该鱼的线程sleep2秒这个时间绘制鱼被捉时的动画。
Fish类:
package .qust;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class Fish extends Thread {
BufferedImage[] image = new BufferedImage[10];// 定义存放鱼的图片
int width;// 定义与图片的宽度
int height;// 定义鱼图片的高度
int x;// 定义与图片在面板的x位置
int y;// 定义鱼图片在面板的Y位置
int step;// 定义鱼图片的速度
BufferedImage catched1;// 鱼捕到时的第一张图片
BufferedImage catched2;// 鱼捕到时的第二张图片
boolean isCatched = false;// 表示鱼是否被捕到
BufferedImage Image;
private int index = 0;
public Fish(String s) throws IOException {
for (int i = 0; i < image.length; i++) {// 将各类鱼存放在数组中
image[i] = ImageIO.read(new File("image/" + s + "_0" + i + ".png"));
width = image[i].getWidth();// 获取当前照片的宽度
height = image[i].getHeight();
}
Image = image[index];
catched1 = ImageIO.read(new File("image/" + s + "_catch_01.png"));
catched2 = ImageIO.read(new File("image/" + s + "_catch_02.png"));
Random r = new Random();
x = 800;
y = r.nextInt(800 - height);
step = r.nextInt(5) + 1;
}
public boolean isCatched(Net net) {
int netx = net.x - x;
int nety = net.y - y;
return netx >= 0 && netx <= width && nety >= 0 && nety <= height;
}
public void goOut() {
Random r = new Random();
x = 800;
y = r.nextInt(470 - height);
step = r.nextInt(4) + 1;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(60);
if (isCatched == false) {
index++;
Image = image[index % image.length];
// 现在要动,所以要改变图片?300
x = x - step;
} else {
Image = catched1;
Thread.sleep(60);
Image = catched2;
}
if (x <= -300 || y <= 0 || y >= 480) {
goOut();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Net类:
package .qust;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Net {
BufferedImage image;
int width;// 定义渔网图片的宽度
int height;// 定义渔网图片的高度
int x;// 定义渔网图片在面板的x位置
int y;// 定义渔网图片在面板的Y位置
boolean isShow = false;// 表示渔网是否显示
public Net() throws IOException {
image = ImageIO.read(new File("image/net09.png"));
width = image.getWidth();
height = image.getHeight();
x = 200;
y = 100;
}
public void moveTo(int x, int y) {
this.x = x;
this.y = y;
}
}
Pool类:
package .qust;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Pool extends JPanel {
BufferedImage b;// 定义背景
Fish fishes[];
Net net;
int count;// 统计鱼的个数
BufferedImage s;// 分数面板
BufferedImage[] scores = new BufferedImage[6];// 存储0~9图片
public Pool() throws IOException {
b = ImageIO.read(new File("image/bg.jpg"));
s = ImageIO.read(new File("image/bottom-bar.png"));
fishes = new Fish[20];
for (int i = 0; i < 9; i++) {
fishes[i] = new Fish("fish0" + (i + 1));
fishes[i + 9] = new Fish("fish0" + (i + 1));
}
fishes[18] = new Fish("fish14");
fishes[19] = new Fish("fish13");
new Thread() {
@Override
public void run() {
for (int i = 0; i < fishes.length; i++) {
fishes[i].start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
net = new Net();
for (int i = 0; i < scores.length; i++) {
scores[i] = ImageIO.read(new File("image/0.png"));
}
}
@Override
public void paint(Graphics g) {// 绘图函数
g.drawImage(b, 0, 0, 800, 600, null);// 绘制背景图
g.drawImage(s, -5, 500, 800, s.getHeight(), null);
for (int i = 0; i < scores.length; i++) {
g.drawImage(scores[i], 13 + i * 25, 545, 23, 23, null);
}
for (int i = 0; i < fishes.length; i++) {
g.drawImage(fishes[i].Image, fishes[i].x, fishes[i].y, null);
// System.out.println("画一条鱼");
}
// for (int i = 0; i < fishes.length; i++) {
// if (fishes[i].isCatched = true) {
// g.drawImage(fishes[i].catched1, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched2, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched1, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched2, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched1, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched2, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched1, fishes[i].x, fishes[i].y, null);
// g.drawImage(fishes[i].catched2, fishes[i].x, fishes[i].y, null);
// }
// }
if (net.isShow == true) {
int x = net.x - net.width / 2;
int y = net.y - net.height / 2;
g.drawImage(net.image, x, y, net.width, net.height, null);
}
g.setColor(new Color(255, 255, 0));// 设置画笔颜色
g.drawString(count + "", 10, 10);// 画捕捉到鱼的条数
Date date = new Date();
g.drawString(date.toString(), 25, 25);// 画系统时间
}
public void action() {
MouseAdapter mouse = new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int x = e.getX();
int y = e.getY();
net.moveTo(x, y);
}
@Override
public void mouseEntered(MouseEvent e) {
net.isShow = true;
}
@Override
public void mouseExited(MouseEvent e) {
net.isShow = false;
}
@Override
public void mousePressed(MouseEvent e) {
try {
catchFish();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
// 将事件监听器绑定到面板中
this.addMouseListener(mouse);
this.addMouseMotionListener(mouse);
while (true) {
repaint();// 重复绘图
}
}
public void catchFish() throws IOException {
for (int i = 0; i < fishes.length; i++) {
if (fishes[i].isCatched(net)) {
fishes[i].isCatched = true;
final Fish a = fishes[i];
new Thread() {
@Override
public void run() {
try {
Thread.sleep(800);
a.goOut();
count++;// 统计鱼的数目
String str = count + "";// 变成字符串
for (int j = 0; j < str.length(); j++) {
try {
scores[5 - j] = ImageIO.read(new File(
"image/"
+ str.charAt(str.length()
- 1 - j) + ".png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}
}
}
Main类:
package .qust;
import java.io.IOException;
import javax.swing.JFrame;
public class Main {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException { // TODO Auto-generated method stub
JFrame j = new JFrame();
Pool p = new Pool();
j.add(p);
j.setResizable(true);// 设置窗体不可拖拽
// j.setLocation(200, 800);
j.setDefaultCloseOperation(3);// 设置窗体与jvm关联
j.setSize(800, 600);
j.setVisible(true);
j.setVisible(true);
p.action();
}
}。