Java简单实现捕鱼达人效果

实现背景功能

文档说明

  1. 按照面向对象设计池塘对象---Class Pool。

  2. 在Pool类的特征处处,定义BufferedImage类型的bg,表示池塘的环境。

  3. 在Pool类中,定义构造方法(public 类名(){……}), 在构造方法中完成对bg的赋值imageIO是java中提供的一个工具类, 该工具类中有一个read方法,能够很方便的读取到某一张图片图片 必须要以File文件的方式来读取, (如果显示错误,利用try/catch来解决错误)。

  4. 让Pool类继承(exdents)JPanel。

  5. 在Pool类的行为出,调出paint方法,在paint方法中使用画笔g, [g.drawImage();]将背景画在池塘中。 * 参数一(img):所画的图片 * 参数二、三(x, y):所画图片的坐标(左上角) * 参数四、五(width,height ):所画图片2的大小(宽度,高度) * 参数六(observer):无意义,写空值。

  6. 在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);
    }
}

在池塘里画一条鱼

文档说明

  1. 按照面向对象设计鱼对象---Class Fish。

  2. 在Fish类的特征处,定义鱼的种类(BufferedImage)、大小(int)、位置(int)。

  3. 在Fish中定义构造方法,在构造方法中,完成对种类,大小,位置的赋值。

  4. 在Pool类的特征处,定义Fish类型的f表示一条鱼对象。

  5. 在Pool类的构造方法中,创建一条鱼,然后给f赋值f = new Fish();

  6. 在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);    //画鱼
    }
}

 实现一条鱼的直线移动

文档说明

  1. 让Fish类继承Thread,让鱼类具有并发执行的功能。

  2. 在Fish类的行为处,调用run方法,在run方法中用死循环实现x--注:程序运行太快,加入休眠时间,给好的看清鱼的游动。

  3. 在Pool类的构造方法中,在创建完,通过f调用start方法启动鱼的线程。F.start();

  4. 在Pool类的行为处,自定义action方法,在方法中用死循环,执行repaint,实现池塘的刷新。

  5. 在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();
    }
}

 实现鱼游的速度功能

文档说明

  1. 在Fish类的特征处,追加一个速度的特征   int step;
  2. 在Fish类的构造方法中,是有随机数给step赋值1-5; (Math.random()*5+1) 
  3. 在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();
            }
        }
    }
}

 

posted @ 2022-02-21 20:44  富瑞阿得  阅读(137)  评论(0编辑  收藏  举报