还在云吸猫?自己造一个Tom猫(Java语言实现版本)

简介: 还记得小时候玩的一个手机游戏Tom猫吗,这只猫一直伴随着我长大,小时候我记得我可爱玩这只猫了,虽然他涨的的不好看,但是也不妨碍我喜欢他,今天刚好趁着掘金的吸猫活动,用Java重温一下这只可爱的猫猫。

1.JPG


序言


还记得小时候玩的一个手机游戏Tom猫吗,这只猫一直伴随着我长大,小时候我记得我可爱玩这只猫了,虽然他涨的的不好看,但是也不妨碍我喜欢他,今天刚好趁着掘金的吸猫活动,用Java重温一下这只可爱的猫猫。


2.JPG


教程



1.新建一个Maven项目


3.JPG


2.下载素材包

下载相应的动作,密码为gk98图片Animations文件和按钮Buttons文件,并且放在 项目 --> target --> classes --> 项目名 下。


4.JPG

新建一个TomCatPanel类


我们新建一个TomCatPanel类,这个类用于画出猫和定义猫的一点点击事件,代码也比较简单。


package cn.linstudy;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
 * @author XiaoLin
 */
public class TomCatPanel extends JPanel implements Runnable, MouseListener {
    BufferedImage back;
    BufferedImage eat;
    BufferedImage cymbal;
    BufferedImage drink;
    BufferedImage fart;
    BufferedImage pie;
    BufferedImage scratch;
    String[] paths = new String[100];
    int count = 0;
    int index = 0;
    boolean flag = false;
    public TomCatPanel() {
        try {
            this.back = ImageIO.read(TomCatPanel.class.getResource("Animations/Eat/eat_00.jpg"));
            this.eat = ImageIO.read(TomCatPanel.class.getResource("Buttons/eat.png"));
            this.cymbal = ImageIO.read(TomCatPanel.class.getResource("Buttons/cymbal.png"));
            this.drink = ImageIO.read(TomCatPanel.class.getResource("Buttons/drink.png"));
            this.fart = ImageIO.read(TomCatPanel.class.getResource("Buttons/fart.png"));
            this.pie = ImageIO.read(TomCatPanel.class.getResource("Buttons/pie.png"));
            this.scratch = ImageIO.read(TomCatPanel.class.getResource("Buttons/scratch.png"));
        } catch (IOException var2) {
            var2.printStackTrace();
        }
    }
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(this.back, 0, 0, 350, 600, (ImageObserver)null);
        g.drawImage(this.eat, 20, 300, 50, 50, (ImageObserver)null);
        g.drawImage(this.cymbal, 20, 370, 50, 50, (ImageObserver)null);
        g.drawImage(this.drink, 20, 440, 50, 50, (ImageObserver)null);
        g.drawImage(this.fart, 265, 300, 50, 50, (ImageObserver)null);
        g.drawImage(this.pie, 265, 370, 50, 50, (ImageObserver)null);
        g.drawImage(this.scratch, 265, 440, 50, 50, (ImageObserver)null);
    }
    @Override
    public void run() {
        while(true) {
            if (this.flag) {
                ++this.index;
                if (this.index >= this.count) {
                    this.index = 0;
                    this.flag = false;
                }
                try {
                    this.back = ImageIO.read(TomCatPanel.class.getResource(this.paths[this.index]));
                } catch (IOException var3) {
                    var3.printStackTrace();
                }
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException var2) {
                var2.printStackTrace();
            }
            this.repaint();
        }
    }
    @Override
    public void mouseClicked(MouseEvent e) {
    }
    @Override
    public void mousePressed(MouseEvent e) {
        int mouseX = e.getX();
        int mouseY = e.getY();
        if (mouseX > 20 && mouseX < 70 && mouseY > 300 && mouseY < 350) {
            this.count = 40;
            this.updateImage("eat");
            this.flag = true;
        }
        if (mouseX > 20 && mouseX < 70 && mouseY > 370 && mouseY < 420) {
            this.count = 13;
            this.updateImage("cymbal");
            this.flag = true;
        }
        if (mouseX > 20 && mouseX < 70 && mouseY > 440 && mouseY < 490) {
            this.count = 81;
            this.updateImage("drink");
            this.flag = true;
        }
        if (mouseX > 265 && mouseX < 315 && mouseY > 300 && mouseY < 350) {
            this.count = 28;
            this.updateImage("fart");
            this.flag = true;
        }
        if (mouseX > 265 && mouseX < 315 && mouseY > 370 && mouseY < 420) {
            this.count = 24;
            this.updateImage("pie");
            this.flag = true;
        }
        if (mouseX > 265 && mouseX < 315 && mouseY > 440 && mouseY < 490) {
            this.count = 56;
            this.updateImage("scratch");
            this.flag = true;
        }
        if (mouseX > 100 && mouseX < 250 && mouseY > 100 && mouseY < 250) {
            this.count = 81;
            this.updateImage("knockout");
            this.flag = true;
        }
        if (mouseX > 120 && mouseX < 230 && mouseY > 400 && mouseY < 500) {
            this.count = 34;
            this.updateImage("stomach");
            this.flag = true;
        }
        if (mouseX > 235 && mouseX < 285 && mouseY > 450 && mouseY < 540) {
            this.count = 26;
            this.updateImage("angry");
            this.flag = true;
        }
        if (mouseX > 120 && mouseX < 170 && mouseY > 520 && mouseY < 560) {
            this.count = 30;
            this.updateImage("footRight");
            this.flag = true;
        }
        if (mouseX > 175 && mouseX < 225 && mouseY > 520 && mouseY < 560) {
            this.count = 30;
            this.updateImage("footLeft");
            this.flag = true;
        }
        this.repaint();
    }
    public void mouseReleased(MouseEvent e) {
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseExited(MouseEvent e) {
    }
    public void updateImage(String str) {
        for(int i = 0; i < this.count; ++i) {
            if (i < 10) {
                this.paths[i] = "Animations/" + str + "/" + str + "_0" + i + ".jpg";
            } else {
                this.paths[i] = "Animations/" + str + "/" + str + "_" + i + ".jpg";
            }
        }
    }
}
复制代码


新建一个TomCat类


这个类是主类用于启动项目。


package cn.linstudy;
import java.awt.Component;
import javax.swing.JFrame;
/**
 * @Author ljp
 * @Date 2021/11/4 11:09
 * @Description
 */
public class TomCat {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Tom猫");
        TomCatPanel panel = new TomCatPanel();
        frame.add(panel);
        Thread t = new Thread(panel);
        t.start();
        panel.addMouseListener(panel);
        frame.setDefaultCloseOperation(3);
        frame.setSize(350, 600);
        frame.setLocationRelativeTo((Component)null);
        frame.setVisible(true);
    }
}
复制代码


大功告成

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
10天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
23 4
|
18天前
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
|
18天前
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
|
1月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
46 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
1月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
42 3
|
1月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
50 4
|
1月前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
29 3
|
1月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
52 2
|
1月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
22 2