Java简单实现捕鱼达人效果
实现背景功能
文档说明
-
按照面向对象设计池塘对象---Class Pool。
-
在Pool类的特征处处,定义BufferedImage类型的bg,表示池塘的环境。
-
在Pool类中,定义构造方法(public 类名(){……}), 在构造方法中完成对bg的赋值imageIO是java中提供的一个工具类, 该工具类中有一个read方法,能够很方便的读取到某一张图片图片 必须要以File文件的方式来读取, (如果显示错误,利用try/catch来解决错误)。
-
让Pool类继承(exdents)JPanel。
-
在Pool类的行为出,调出paint方法,在paint方法中使用画笔g, [g.drawImage();]将背景画在池塘中。 * 参数一(img):所画的图片 * 参数二、三(x, y):所画图片的坐标(左上角) * 参数四、五(width,height ):所画图片2的大小(宽度,高度) * 参数六(observer):无意义,写空值。
-
在Start类中,创建池塘,并添加到窗体中。 窗体定义名.add(类定义名)。
实现代码
public class Pool extends JPanel { public BufferedImage bg;//背景图片 public Pool() { File bgurl = new File("images/bg.jpg");//背景图片地址 try { bg = ImageIO.read(bgurl); } catch (IOException e) { e.printStackTrace(); } } public void paint(Graphics g){ g.drawImage(bg,0,0,null);//画出背景 } }
public class Start { public static void main(String[] args) { JFrame jf = new JFrame("捕鱼达人"); jf.setSize(800, 480); jf.setLocation(600,300); jf.setResizable(false); Pool pool = new Pool(); jf.add(pool); jf.setVisible(true); } }
在池塘里画一条鱼
文档说明
-
按照面向对象设计鱼对象---Class Fish。
-
在Fish类的特征处,定义鱼的种类(BufferedImage)、大小(int)、位置(int)。
-
在Fish中定义构造方法,在构造方法中,完成对种类,大小,位置的赋值。
-
在Pool类的特征处,定义Fish类型的f表示一条鱼对象。
-
在Pool类的构造方法中,创建一条鱼,然后给f赋值f = new Fish();
-
在Pool类的paint中,使用画笔g将鱼画在池塘中。
实现代码
public class Fish{ public BufferedImage fishimg;//鱼的图片 int fw,fh;//鱼的大小 int fx,fy;//鱼的位置 public Fish(String s){ fw=50; fh=40; fx=800; fy=300; } }
public class Pool extends JPanel { public Fish f;//新建一条鱼 public Pool() { f=new Fish(); } public void paint(Graphics g){ g.drawImage(f.fishimg, f.fx, f.fy, null); //画鱼 } }
实现一条鱼的直线移动
文档说明
-
让Fish类继承Thread,让鱼类具有并发执行的功能。
-
在Fish类的行为处,调用run方法,在run方法中用死循环实现x--注:程序运行太快,加入休眠时间,给好的看清鱼的游动。
-
在Pool类的构造方法中,在创建完,通过f调用start方法启动鱼的线程。F.start();
-
在Pool类的行为处,自定义action方法,在方法中用死循环,执行repaint,实现池塘的刷新。
-
在Start类的最后一行,通过pool调用action方法。
实现代码
public class Fish extends Thread { public void run(){ while (true) { if(fx<-500){ fx=800; } fx--; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }
public class Pool extends JPanel { public Pool() { f.start(); } public void action(){ while (true) { repaint(); } } }
public class Start { public static void main(String[] args) { pool.action(); } }
实现鱼游的速度功能
文档说明
- 在Fish类的特征处,追加一个速度的特征 int step;
- 在Fish类的构造方法中,是有随机数给step赋值1-5; (Math.random()*5+1)
- 在Fish类的run行为中,将x--修改为x -= step;
实现代码
public class Fish extends Thread { int step;//鱼的速度 public Fish(String s){ step= (int) (Math.random()*5+1); } public void run(){ while (true) { fx-=step; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }