java21:捕鱼达人

类的设计

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

java21:捕鱼达人的相关文章

用《捕鱼达人》去理解C#中的多线程

参考:http://www.cnblogs.com/maitian-lf/p/3678128.html 用<捕鱼达人>去理解C#中的多线程,布布扣,bubuko.com

捕鱼达人

界面 package fishgame; import javax.swing.JFrame; public class FishGame extends JFrame { public static final int HEIGHT=480; public static final int WIDTH=800; public static void main(String args[]){ JFrame frame = new JFrame("捕鱼达人"); frame.setSiz

js原生捕鱼达人(三)--完结

先给分享下我写完的效果,github有点卡,我没有压缩代码,不过效果可以看到 https://jasonwang911.github.io/ 转载请注明'转载于Jason齐齐的博客http://www.cnblogs.com/jasonwang2y60/' 继续昨天的进行 11>添加金币   相同的创建了coin.js的文件 //添加金币的构造含函数 function Coin(type){ this.type=type; this.x=0; this.y=0; this.cur=0; this

js原生捕鱼达人(一)

捕鱼达人的游戏大家都很熟悉吧,接下来的两三天,我会将整个游戏的原生js写法详细的写出来,整个游戏应用了面向对象的写法:创建构造函数,在构造函数上面添加对象的属性,然后在构造函数的原型上添加方法,当然这个程序使用了canvas来绘制,每一步的我都已经分别写出来,详细的步骤我在写代码的过程中都已经标注了出来. 下面是捕鱼达人的素材库: 1>加载资源 <style> *{ padding: 0; margin: 0; } body{ background:#000; text-align:ce

基于HTML5的捕鱼达人游戏网页版

之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript制作而成.整个游戏的仿真度99.99%.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="outer"> <div id="middle"> <div id="container" s

html5 canvas简易版捕鱼达人游戏源码

插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触发的. 找htm5,html5教程,html开发的朋友来涂志海个人博客网,这里有你想要的一切(万一没有的,请联系涂志海,再解决,嘿嘿) 下 载 演示地址 下载说明: 1.解压密码:tuzhihai.com 2.只有部分模板会提供多页面下载,未加说明都是只有一个首页index.html模板. 3.如果

HTML5游戏实战(2):90行代码实现捕鱼达人

捕鱼达人是一款非常流行的游戏,几年里赚取了数以千万的收入,这里借用它来介绍一下用Gamebuilder+CanTK开发游戏的方法.其实赚钱的游戏未必技术就很难,今天我们就仅用90来行代码来实现这个游戏. CanTK(Canvas ToolKit)是一个开源的游戏引擎和APP框架,是开发HTML5游戏或者APP的利器,如果你喜欢它,请在github上给它加星,您的支持是我们努力的动力:https://github.com/drawapp8/cantk 0.先Show一下最终成果: 在线运行:htt

利用ZjDroid对 &lt;捕鱼达人3&gt; 脱壳及破解过程

<捕鱼达人3> 刚出来不久,就被鬼哥Dump出来dex,随之破解也就轻而易举.一开始我用ZjDroid神器试验过,但是没Dump成功一直耿耿于怀,终于有一天逆袭 不仅提取出来了smali文件,继而修复 更是在破解的时候 另辟蹊径,不弹支付界面亦可破解了还支持离线模式.就记录一下. 程序是从移动MM商城下载的. 一.脱壳. 这个壳的关键词是 chaosvmp ,据说是看雪一位版主所在的公司开发的.在手机上安装好程序并运行,依据教程,脱壳的步骤是: 1.打开命令行 输入查看 LogCat  : a

Cocos2d-x教程(29)-3.x版本遮罩层实现捕鱼达人滚动数字表盘

欢迎加入Cocos2d-x 交流群:193411763 转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38340845 源码下载地址:http://download.csdn.net/detail/u012945598/7704725 之前在第八篇教程中讲解了遮罩层实现捕鱼达人滚动数字表盘(文章链接:http://blog.csdn.net/u012945598/article/details/17049419),后来有