【经典项目】Java小游戏 —— 会说话的汤姆猫

一、游戏回顾

【预期效果】

【玩法介绍】

1、 和它说话,它将用有趣的声音重复你的话。
2、打它的头,它会装成被打的样子,连续打还会晕倒;抚摸肚子,它会打呼噜;打肚子,它会装肚子疼;抓尾巴,它会生气;戳脚,它会抓着脚发出痛苦声。
3、忘掉他,他会打呵欠或打喷嚏。
4、点牛奶按键,为它倒了一杯牛奶,它会喝牛奶;
5、点交叉手按键,它会放屁;点锣形按键,它会拍锣;点刷新按键,会有另外玩法出现;点猫爪按键,它会在屏幕上划出痕迹;点小鸟按键,它会吓走一只小鸟;点蛋糕按键,它会把蛋糕扔到屏幕上。
6、汤姆记载影片,上传到网络或经过电子邮件发送它们。

二、实现分析

代码实现倒是不难,主要是预先准备了很多图片素材,然后50毫秒一张,就是幻灯片播放。

注意控制一下图片数组的边界,不要越界就OK了。

【部分代码】

/**
 * 汤姆猫-面板类
 * @author G
 *
 */
public class MyTomPanel extends JPanel implements Runnable,MouseListener {
	
	String[] imgPath_eat  = new String[40];
	String[] imgPath_cymbal  = new String[12];
	String[] imgPath_drink  = new String[80];
	String[] imgPath_fart  = new String[27];
	String[] imgPath_pie  = new String[23];
	String[] imgPath_scratch  = new String[55];
	
	String[] imgPath_angry  = new String[25];
	String[] imgPath_footLeft  = new String[29];
	String[] imgPath_footRight  = new String[29];
	String[] imgPath_knockout  = new String[80];
	String[] imgPath_stomach  = new String[33];
	
	BufferedImage btn_eat = null;
	BufferedImage btn_cymbal = null;
	BufferedImage btn_drink = null;
	BufferedImage btn_fart = null;
	BufferedImage btn_pie = null;
	BufferedImage btn_scratch = null;
	
	BufferedImage img = null;
	int imgIndex = 0;
	
	String action = "angry";
	
	public MyTomPanel() {
		for (int i = 0; i < imgPath_eat.length; i++) {
			imgPath_eat[i]="img/Animations/Eat/eat_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_angry.length; i++) {
			imgPath_angry[i]="img/Animations/Angry/angry_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_cymbal.length; i++) {
			imgPath_cymbal[i]="img/Animations/Cymbal/cymbal_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_drink.length; i++) {
			imgPath_drink[i]="img/Animations/Drink/drink_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_fart.length; i++) {
			imgPath_fart[i]="img/Animations/Fart/fart_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_footLeft.length; i++) {
			imgPath_footLeft[i]="img/Animations/FootLeft/footLeft_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_footRight.length; i++) {
			imgPath_footRight[i]="img/Animations/FootRight/footRight_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_knockout.length; i++) {
			imgPath_knockout[i]="img/Animations/Knockout/knockout_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_pie.length; i++) {
			imgPath_pie[i]="img/Animations/Pie/pie_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_scratch.length; i++) {
			imgPath_scratch[i]="img/Animations/Scratch/scratch_"+(i<10?"0":"")+i+".jpg";
		}
		for (int i = 0; i < imgPath_stomach.length; i++) {
			imgPath_stomach[i]="img/Animations/Stomach/stomach_"+(i<10?"0":"")+i+".jpg";
		}
		
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		
		// 画图片 img,x,y,w,h,null
		g.drawImage(img, 0, -10, 430, 700, null);
		
		g.drawImage(btn_eat, 10, 420, null);
		g.drawImage(btn_cymbal, 10, 500, null);
		g.drawImage(btn_drink, 10, 580, null);
		
		g.drawImage(btn_fart, 350, 420, null);
		g.drawImage(btn_pie, 350, 500, null);
		g.drawImage(btn_scratch, 350, 580, null);
	}
	
	@Override
	public void run() {
		
		while (true) {
			imgIndex++;
			try {
				btn_eat = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/eat.png"));
				btn_cymbal = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/cymbal.png"));
				btn_drink = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/drink.png"));
				btn_fart = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/fart.png"));
				btn_pie = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/pie.png"));
				btn_scratch = ImageIO.read(MyTomPanel.class.getResource("img/Buttons/scratch.png"));

				
				switch (action) {
				case "angry":
					if (imgIndex==imgPath_angry.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_angry[imgIndex]));					
					break;
				case "eat":
					if (imgIndex==imgPath_eat.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_eat[imgIndex]));
					break;
				case "cymbal":
					if (imgIndex==imgPath_cymbal.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_cymbal[imgIndex]));
					break;
				case "fart":
					if (imgIndex==imgPath_fart.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_fart[imgIndex]));
					break;
				case "drink":
					if (imgIndex==imgPath_drink.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_drink[imgIndex]));
					break;
				case "footRight":
					if (imgIndex==imgPath_footRight.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_footRight[imgIndex]));
					break;
				case "footLeft":
					if (imgIndex==imgPath_footLeft.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_footLeft[imgIndex]));
					break;
				case "knockout":
					if (imgIndex==imgPath_knockout.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_knockout[imgIndex]));
					break;
				case "pie":
					if (imgIndex==imgPath_pie.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_pie[imgIndex]));
					break;
				case "scratch":
					if (imgIndex==imgPath_scratch.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_scratch[imgIndex]));
					break;
				case "stomach":
					if (imgIndex==imgPath_stomach.length) imgIndex=0;
					img = ImageIO.read(MyTomPanel.class.getResource(imgPath_stomach[imgIndex]));
					break;
				}
				
				
				Thread.sleep(50);
				
			} catch (Exception e) {
				e.printStackTrace();
				imgIndex=0;
			}
			
			repaint();
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		
		int x = e.getX();
		int y = e.getY();
		
		if ( x>10 && x<10+btn_eat.getWidth() && y<420+btn_eat.getHeight() && y>420) {
			System.out.println("click eat");
			action = "eat";
		}
		if ( x>10 && x<10+btn_cymbal.getWidth() && y<500+btn_cymbal.getHeight() && y>500) {
			System.out.println("click cymbal");
			action = "cymbal";
		}
		if ( x>10 && x<10+btn_drink.getWidth() && y<580+btn_drink.getHeight() && y>580) {
			System.out.println("click drink");
			action = "drink";
		}
		if ( x>350 && x<350+btn_fart.getWidth() && y<420+btn_fart.getHeight() && y>420) {
			System.out.println("click fart");
			action = "fart";
		}
		if ( x>350 && x<350+btn_pie.getWidth() && y<500+btn_pie.getHeight() && y>500) {
			System.out.println("click pie");
			action = "pie";
		}
		if ( x>350 && x<350+btn_scratch.getWidth() && y<580+btn_scratch.getHeight() && y>580) {
			System.out.println("click scratch");
			action = "scratch";
		}
		if ( x>0 && x<430 && y<400 && y>0) {
			int tmp = (int) (Math.random() * 5);
			switch (tmp) {
			case 0:
				action = "angry";
				break;
			case 1:
				action = "footLeft";
				break;
			case 2:
				action = "footRight";
				break;
			case 3:
				action = "knockout";
				break;
			case 4:
				action = "stomach";
				break;
			}
			System.out.println("click "+action);
		}
		
	}
	
	@Override
	public void mouseClicked(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}
}

三、效果展示

1、抓鸟

2、打铜锣

3、喝牛奶

4、放pi

5、扔饼

6、猫抓

四、完整代码获取

经典项目Java小游戏-会说话的汤姆猫资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/373165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WhisperFusion:与 AI 无缝语音对话(超低延迟),深入理解用户每句话背后的含义

演示视频里面&#xff0c;那老哥问它问题之后&#xff0c;后面更改问题&#xff0c;依然能很好的记录问题变化的过程并给出答案。 WhisperFusion 是基于 WhisperLive 和 WhisperSpeech 的强大工具&#xff0c;将声音转文字和文字理解融为一体&#xff0c;让你与AI机器人无缝语…

双非本科准备秋招(10.2)—— JVM3:垃圾收集器

垃圾收集器 分为七种&#xff0c;如下&#xff1a; 从功能的角度分为 1、串行&#xff1a;Serial、Serial Old 2、吞吐量优先&#xff1a;Parallel Scavenge、Parallel Old 3、响应时间优先&#xff1a;CMS 吞吐量优先VS响应时间优先 吞吐量运行用户代码时间/(运行用户代码…

开源软件全景解析:驱动技术创新与行业革新的力量

目录 什么是开源 开源的核心 开源软件的特点 为什么程序员应该拥抱开源 1.学习机会&#xff1a; 2.社区支持&#xff1a; 3.提高职业竞争力&#xff1a; 4.加速开发过程&#xff1a; 5.贡献和回馈&#xff1a; 开源软件的影响力 开源软件多元分析&#xff1a; 开源…

Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

【Java EE初阶十】多线程进阶二(CAS等)

1. 关于CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“&#xff0c;且比较交换的是寄存器和内存&#xff1b; 一个 CAS 涉及到以下操作&#xff1a; 下面通过语法来进一步进项说明&#xff1a; 下面有一个内存M&#xff0c;和两个寄存器A,B; CAS(M,A,B)&am…

AQS简介、AQS实现原理、线程夺取锁失败 AQS队列的变化、线程被唤醒时 AQS队列的变化

AQS AQS简介AQS实现原理场景01-线程抢夺锁失败时&#xff0c;AQS队列的变化场景02-线程被唤醒时&#xff0c;AQS队列的变化 AQS简介 AQS(全称AbstractQueuedSynchronizer)即队列同步器。它是构建锁或者其他同步组件的基础框 架(如ReentrantLock、ReentrantReadWriteLock、Sema…

docker核心技术

一. 从系统架构谈起 传统分层架构 vs 微服务 微服务改造 分离微服务的方法建议: 审视并发现可以分离的业务逻辑业务逻辑,在对业务领域不是特别熟悉的时候,按照部门职能进行划分,例如账号、财务等寻找天生隔离的代码模块,可以借助于静态代码分析工具如果可以闭环的解决一…

STM32F4学习

F4系统架构 8个主控总线7个被控总线 主控总线 Cortex-M4内核 I总线Cortex-M4内核 D总线Cortex-M4内核 S总线DMA1存储器总线DMA2存储器总线DMA2外设总线以太网DMA总线USB OTG HS DMA总线 被控总线 内部FLASH ICode总线内部FLASH DCode总线主要内部SRAM1&#xff08;112KB&a…

二分查找------蓝桥杯

题目描述&#xff1a; 请实现无重复数字的升序数组的二分查找 给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target&#xff0c;写一个函数搜索 nums 中的target&#xff0c;如果目标值存在返回下标 (下标从0 开始)&#xff0c;否则返回-1 数据范围: 0 < l…

中继DHCP配置实验

实验大纲 1.构建网络拓扑结构图 2.对路由器进行配置 3.对DHCP服务器进行配置 4.对交换机S1进行配置&#xff08;创建vlan&#xff09; 5.配置路由器&#xff0c;并分配逻辑接口 1.构建网络拓扑结构图 2.对路由器进行配置 Router>en Router#conf t Enter configuratio…

R语言学习case11:ggplot 置信区间(包含多子图)

ggplot Geometric objects How are these two plots similar? 两个图都包含相同的x变量、相同的y变量&#xff0c;并且描述相同的数据。但是这两个图并不相同。每个图使用不同的可视化对象来表示数据。在ggplot2语法中&#xff0c;我们说它们使用不同的geoms。 geom是绘图…

[经验] 月字旁一个卢念什么 #职场发展#媒体#微信

月字旁一个卢念什么 1、月卢念什么 “月卢念什么”是一个广为传颂的故事。传说中&#xff0c;月卢是唐婉的丈夫&#xff0c;也是唐婉的伴读&#xff0c;两人情深意重。有一天&#xff0c;唐婉嫁给了别人&#xff0c;月卢离开了她。从此以后&#xff0c;月卢每晚都背着月亮念唐…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)

三、简配版集群&#xff0c;适用于demo环境 1.集群架构设计 主机名角色配置(核数&#xff0c;内存&#xff0c;磁盘)MasterRKE,controlplane,etcd,worker,rancher-master2C 8G 40GSlaver1controlplane,worker,rancher-master2C 8G 40GSlaver2controlplane,worker,rancher-mas…

代码随想录算法训练营DAY13 | 栈与队列 (3)

一、LeetCode 239 滑动窗口最大值 题目链接&#xff1a;239.滑动窗口最大值https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;使用单调队列&#xff0c;只保存窗口中可能存在的最大值&#xff0c;从而降低时间复杂度。 public class MyQueue{Deque<I…

深入剖析 Cortex-M4 微控制器在嵌入式系统中的特性和优势

Cortex-M4 微控制器是 ARM Cortex-M 架构中的一种类型&#xff0c;它具有许多功能和特性&#xff0c;使其在嵌入式系统中具有显著的优势。本文将深入剖析 Cortex-M4 微控制器的特性和优势&#xff0c;并提供示例代码来演示其用法。 ✅作者简介&#xff1a;热爱科研的嵌入式开发…

【LeetCode: 292. Nim 游戏+ 博弈问题】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

LlamaIndex 入门实战

文章目录 LlamaIndex 入门实战1. 基本概念2. 优劣势分析3. 简单代码示例4. Index持久化5. 使用场景6. 总结 LlamaIndex 入门实战 LlamaIndex是一个连接大型语言模型&#xff08;LLMs&#xff09;与外部数据的工具&#xff0c;它通过构建索引和提供查询接口&#xff0c;使得大模…

echarts使用之柱状图(一)

1 基本使用 核心配置主要是xAxis/yAxis/series <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equi…

【VUE】UniAPP之uview组件库,自定义tag封装,支持添加u-icon图标

组件代码 <template><view class"tag" :class"[props.mode, props.shape]"><slot name"left"><!-- icon图标 没有传入图标时不显示 --><u-icon v-if"props.icon ! " :name"props.icon" :color&…

新产品!可视化试卷搭建平台

hi, 大家好, 我是徐小夕. 之前和大家分享了很多可视化低代码和零代码的技术实现和产品设计思路, 也和大家分享了 H5-Dooring 零代码搭建平台的技术实现和未来规划, 今天继续和大家分享一下我们的新产品——橙子试卷. 橙子试卷 是一款可视化试卷/问卷搭建平台, 我们可以通过拖拽…