软件价值13-水族箱

用java程序模拟的水族箱。

想象:

在这个喧嚣的世界中,总是有一些角落让人感到宁静、美丽和惬意。水族箱就是其中之一。闭上眼睛,想象一下,透过清澈的玻璃,你仿佛看到了一个小小的海洋世界,那里栖息着各色各样的鱼儿。

在这个水族箱里,水清澈见底,微光透过水面洒下,投射出斑斓的光影。在这柔和的光线下,鱼儿们如梦幻般地穿梭来回,它们的身影时隐时现,仿佛在跳着优美的舞蹈。

这个水族箱仿佛是一个小小的海洋世界,充满了生机与活力。每一条鱼儿都是如此美丽、灵动,它们的存在让整个空间充满了生命的力量,让人心情愉悦,仿佛身临其境般感受到了大自然的美妙。在这里,你可以忘却烦恼,感受到内心的平静和安宁。

打开你的心扉,让这个水族箱带给你一份宁静和美好,让那些灵动的鱼儿在你的心灵深处留下美好的印记。

截图:

代码:

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.Random;

class Fish {
	Component tank;

	Image image1;

	Image image2;

	Point location;

	Point velocity;

	Rectangle edges;

	Random random;

	public Fish(Image image1, Image image2, Rectangle edges, Component tank) {
		random = new Random(System.currentTimeMillis());
		this.tank = tank;
		this.image1 = image1;
		this.image2 = image2;
		this.edges = edges;
		this.location = new Point(100 + (Math.abs(random.nextInt()) % 300),
				100 + (Math.abs(100 + random.nextInt()) % 100));

		this.velocity = new Point(random.nextInt() % 8, random.nextInt() % 8);
	}

	public void swim() {
		if(random.nextInt() % 7 <= 1) {
			velocity.x += random.nextInt() % 4;

			velocity.x = Math.min(velocity.x, 8);
			velocity.x = Math.max(velocity.x, -8);

			velocity.y += random.nextInt() % 4;

			velocity.y = Math.min(velocity.y, 8);
			velocity.y = Math.max(velocity.y, -8);
		}

		location.x += velocity.x;
		location.y += velocity.y;

		if(location.x < edges.x) {
			location.x = edges.x;
			velocity.x = -velocity.x;
		}

		if((location.x + image1.getWidth(tank)) > (edges.x + edges.width)) {
			location.x = edges.x + edges.width - image1.getWidth(tank);
			velocity.x = -velocity.x;
		}

		if(location.y < edges.y) {
			location.y = edges.y;
			velocity.y = -velocity.y;
		}

		if((location.y + image1.getHeight(tank)) > (edges.y + edges.height)) {
			location.y = edges.y + edges.height - image1.getHeight(tank);
			velocity.y = -velocity.y;
		}
	}

	public void drawFishImage(Graphics g) {
		if(velocity.x < 0) {
			g.drawImage(image1, location.x, location.y, tank);
		} else {
			g.drawImage(image2, location.x, location.y, tank);
		}
	}

}

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import java.util.Vector;

public class Test extends Frame implements Runnable {
	private static final long serialVersionUID = 1L;

	Image aquariumImage, memoryImage;

	Graphics memoryGraphics;

	int numberFish = 8;

	int sleepTime = 110;

	Vector<Fish> fishes = new Vector<Fish>();

	boolean runOK = true;

	Image[] fishImages = new Image[2];

	MediaTracker tracker;

	Thread thread;

	Test() {
		setTitle("The Aquarium");
		tracker = new MediaTracker(this);

		URL fish1Address = getClass().getResource("resource/fish1.gif");
		URL fish2Address = getClass().getResource("resource/fish2.gif");
		URL bubblesAddress = getClass().getResource("resource/tank.jpg");

		fishImages[0] = Toolkit.getDefaultToolkit().getImage(fish1Address);
		tracker.addImage(fishImages[0], 0);

		fishImages[1] = Toolkit.getDefaultToolkit().getImage(fish2Address);
		tracker.addImage(fishImages[1], 0);
		
		aquariumImage = Toolkit.getDefaultToolkit().getImage(bubblesAddress);
		tracker.addImage(aquariumImage, 0);

		try {
			tracker.waitForID(0);
		} catch(Exception ex) {
			System.out.println(ex.getMessage());
		}

		setSize(aquariumImage.getWidth(this), aquariumImage.getHeight(this));

		setResizable(false);

		setVisible(true);

		memoryImage = createImage(getSize().width, getSize().height);
		memoryGraphics = memoryImage.getGraphics();

		thread = new Thread(this);
		thread.start();

		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent windowEvent) {
				runOK = false;
				System.exit(0);
			}
		});
	}

	public void run() {
		Rectangle edges = new Rectangle(0 + getInsets().left, 0 + getInsets().top, getSize().width
				- (getInsets().left + getInsets().right), getSize().height - (getInsets().top + getInsets().bottom));

		for(int loopIndex = 0; loopIndex < numberFish; loopIndex++) {
			fishes.add(new Fish(fishImages[0], fishImages[1], edges, this));
			try {
				Thread.sleep(20);
			} catch(Exception exp) {
				System.out.println(exp.getMessage());
			}
		}

		Fish fish;

		while(runOK) {
			for(int loopIndex = 0; loopIndex < numberFish; loopIndex++) {
				fish = (Fish) fishes.elementAt(loopIndex);
				fish.swim();
			}

			try {
				Thread.sleep(sleepTime);
			} catch(Exception exp) {
				System.out.println(exp.getMessage());
			}

			repaint();
		}

	}

	public void update(Graphics g) {
		memoryGraphics.drawImage(aquariumImage, 0, 0, this);

		for(int loopIndex = 0; loopIndex < numberFish; loopIndex++) {
			((Fish) fishes.elementAt(loopIndex)).drawFishImage(memoryGraphics);
		}

		g.drawImage(memoryImage, 0, 0, this);
	}

	public static void main(String[] args) {
		new Test();
	}

}

运行:

my aquarium

5、锦鲤池健康监测的运动分析与注意力引导的人脸检测系统 本文探讨了两个基于计算机视觉的应用系统:一是用于锦鲤池健康监测的运动分析方法,通过光流和热图特征提取实现鱼群行为规律识别与异常检测;二是提出一种结合注意力机制的深度学习人脸检测系统,能够同时预测人脸边界框和注意力图,在准确率和可解释性方面表现优异。研究展示了热图特征在不同时间窗口下的相关性,并验证了能量和熵特征在异常识别中的潜力。人脸检测系统采用多任务学习策略,在主流数据集上取得了与现有方法相当的性能。两个系统分别为水产养殖监控和智能安防提供了可行的技术路径。 阅读详情

相关推荐

海洋水族馆动态屏保设计与实现

海洋水族馆屏保不仅具备防止屏幕“烧屏”的实用功能,更通过逼真的水下视觉效果为用户带来沉浸式的观赏体验。其设计融合了计算机图形学、生态美学与心理学原理,使用户在视觉享受中获得放松与愉悦。随着操作系统图形界面的发展,屏保已从单纯的防护工具演变为增强用户体验的重要媒介。本章将深入探讨海洋主题屏保的核心价值,包括其视觉吸引力、心理调节作用及其在现代数字环境中的应用意义。

weixin_36289813的博客 1216

Mac本地部署OpenClaw AI助手:摆脱Token焦虑,打造私有化大模型对话平台

大语言模型(LLM)通过海量数据训练,具备了强大的自然语言理解和生成能力,其核心原理是基于Transformer架构的注意力机制。在工程实践中,开发者常通过API调用云端模型,但面临Token成本与数据隐私的挑战。开源模型与本地部署技术为解决这一问题提供了可行路径,通过Ollama等工具在本地硬件上运行量化模型,能实现零成本、全私有的AI交互。OpenClaw(Open WebUI)作为一个AI Agent框架,扮演了连接用户界面与本地模型后端的“连接器”角色,将类似ChatGPT的交互体验与本地部署的Ll

weixin_29056865的博客 276

基于YOLOv5与FISHES-IN-THE-WILD数据集的水下鱼类目标检测实战

目标检测是计算机视觉的核心任务之一,旨在从图像或视频中定位并识别出感兴趣的物体。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并利用回归和分类头输出物体的边界框与类别。这项技术的价值在于能够自动化、高精度地完成视觉感知任务,极大地提升了在安防、自动驾驶、工业质检等领域的应用效率。在生态监测与水产养殖等特定垂直领域,通用检测模型往往难以应对复杂多变的真实环境。为此,采用高质量、场景匹配的专用数据集进行模型训练成为关键。本文以水下鱼类识别为具体应用场景,深入探讨了如何利用FISHES-IN-THE-WI

weixin_34014555的博客 395

java图片上传代码_使用300行java代码和149张图片制作一个单机版捕鱼游戏

使用Java 300行写出一个单机捕鱼游戏,效果如下package org.wf.game.fish;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.a...

weixin_39623244的博客 193

import-im6.q16: attempt to perform an operation not allowed by the security policy `PS‘ @ error/cons

这六个 policy 是使用 XML 格式描述的安全策略。要将其中的限制注释掉,在每个 policy 开始和结束的标记之间添加注释标记“

m0_60657960的博客 1908

解决PADs VX2.7安装中的License失效与软件卡死问题

本文详细解析了PADs VX2.7安装过程中常见的License失效与软件卡死问题,提供了从破解工具选择、环境变量设置到输入法兼容性调整等实用解决方案。特别推荐使用Siemens EDA系列新版破解工具,并分享性能调优与定期维护技巧,帮助工程师高效解决安装难题。

weixin_29234239的博客 813

揭秘APP软件开发者百万富翁之路 造程序的工厂.2487 - 牛肉的营养价值

  1.各种创意都有,包含专业和精巧的制造,我们是中国最好的App Store开发者,还是要关注单一产品的制作水准,我们要成为手机上的暴雪公司。   2 从用户角度动身,这是我现在做任何项目要斟酌的重要因素。   3 我们曾经只是一些无人知晓的程序开发员,但由于有了这个平台,现在我们可以把自己的智慧卖给全世界。   4 这是一个很好的市场,它会拉高开发...

weixin_34351321的博客 304

OCV/AOCV/SOCV的介绍和应用

library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的。,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布,在STA中用OCV来模拟这一『特征』。OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化。,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化。优点:设置起来比较简单粗暴,对于不那么先进的工艺可行!的影响,更贴合实际。

m0_61003348的博客 8980

值得买科技618战报:好价驱动品质消费,营销赋能全域增长

618期间,41个品牌通过什么值得买达成超千万GMV。

TMT_XQ的博客 769

半导体领域知识 - 初级入门

半导体领域知识 - 初级入门 知识问答 1. 一个晶圆上根据芯片的大小,可以生产几百、几千、几万个芯片。如下图: 2. 8寸晶圆指的是什么?5nm工艺指的是什么? 8寸晶圆指的是直径为175mm(17.5cm)的晶圆,下面是6/812/18寸晶圆的尺寸以及相关发展历程。目前拥有12寸线的厂商只有5家,一个12寸晶圆厂的成本需要上百亿美金。 5nm工艺指的是在一个具体的芯片上,有很多微型结构(千万、亿级别的晶体管),这些核心基本单元MOS管的栅极宽度尺寸来衡量工艺的精细程度,如果是5nm就被称为5nm工艺

Hello World! 2万+

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

A开头前缀

1.ab/abs-表示远离 abuse 滥用(远离使用) abduct 绑架 -duce表示牵引 往远处引导表示绑架 seduce 诱惑(色牵引) introduce 介绍(向内牵引) intro-内向的 aberrant 违反常规的 err-表错误 人非圣贤,孰能无过,远离错误是不常规的 abstinence 节制 -ence名词 tin==tain拿 拿走,节制 abstraction 抽象 tract-拉 tect-盖子 protect 向前形成盖子,保护 detecti

qq_43716830的博客 1489

RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构

本文记录的是基于。采用了创新性的方法,通过精心平衡网络和来提升性能。本文将的设计优势融入RT-DETR中,提升RT-DETR的性能与效率,使其在目标检测任务中表现更为出色。本文配置了原模型中的共种不同大小的模型结构,以满足不同的需求。

Limiiiing的博客 532

Python库collections

提示:以下是本篇文章正文内容,下面案例可供参考官方说法:collections模块实现了特定目标的容器,以提供Python标准内建容器dict ,list , set , 和tuple的替代选择。

dmhy的博客 6273

配置 SAP ABAP Secure Storage

系统在进行数据加密时,会将数据与当前 Key ID 进行关联,也就是说,如果此时使用的是 Key ID 4713,则该条数据会在 Encrypt.Data 字段存储一个由密钥 4713 加密后的密文。Key ID 代表了不同的密钥标识,Current Key 表示系统当前正在使用的主密钥,Value 则是对应密钥的存储值,Management Data 通常包括一些管理性或辅助性的信息,用于描述密钥的状态、过期时间或者其他属性。对于每一条被加密的业务数据,系统会记录它使用了哪一条 Key ID。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 565

用 ABAP 的 AMDP 把计算推到数据库:概念、场景、以及可运行示例

摘要:AMDP(ABAP Managed Database Procedures)是SAP HANA环境下优化ABAP性能的关键技术,通过将数据计算逻辑推送到数据库端执行,减少数据传输和应用层处理开销。其核心价值在于利用HANA的集合运算能力,适用于大数据量聚合、窗口函数等复杂计算场景。AMDP不是通用解决方案,而是针对CDS无法高效处理的特定性能瓶颈的优化手段。典型应用包括财务统计、零售分析等需要高性能数据处理的业务场景。本文通过概念解析、性能逻辑推导和实际代码示例(包括直接调用的AMDP Procedu

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 262

记忆宫殿+联想法+数字编码:可训练的脑力操作系统

记忆宫殿、联想法、数字编码并非玄学技巧,而是基于神经科学原理构建的信息加工系统:记忆宫殿激活海马体空间导航机制,实现信息结构化存储;联想法通过语义钩子建立神经突触级的精准映射,提升提取可靠性;数字编码将抽象符号转化为具象感官模块,增强可索引性。三者协同,本质是重构大脑对知识的编码、存储与调用方式,显著降低认知负荷,广泛应用于考试备考、专业学习、老年认知维护等场景。本文聚焦其可拆解、可训练的操作逻辑,揭示如何从零搭建属于自己的高效记忆系统。

weixin_33804582的博客 782

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 284

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 126

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 196

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 490

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 631

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 359
上一篇: 机器学习12-基本感知器
下一篇: 安卓价值1-如何在电脑上运行ADB
dracularking
博客等级 码龄20年 1592粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dracularking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值