课程设计
选题报告
选题名称:交互式动画系统
博客链接:https://example.com/interactive-animation-blog
组员名单:王鑫杰(组长)、康奕彬
博客内容
1. 我使用了什么AI工具辅助选题
在本次选题和系统设计过程中,我们使用了DeepSeek AI助手辅助进行需求分析、功能设计和技术方案制定。通过AI工具,我们快速理解了动画系统的核心要求,并参考了相关实现案例,优化了开发计划。
2. 选题与前期调查
想要做什么:
我们计划实现一个基于Java的交互式动画系统。该系统允许用户通过鼠标点击在GUI界面上生成随机图形(如圆形),图形以随机速率、方向和轨迹(如直线位移、正弦曲线、余弦曲线等)运动。系统支持暂停所有图形、继续运动、双击清除单个图形、点击暂停单个图形,并实现图形间的碰撞效果。此外,系统具备数据存储功能,退出时保存图形状态,启动时恢复场景,以提供连贯的用户体验。
别人是怎么做的:
我们参考了以下现有系统和资源,以了解动画实现的最佳实践:
- Processing动画库:提供了丰富的图形和动画示例,适用于快速原型开发。参考链接:Processing示例
- Java Swing动画教程:Oracle官方教程展示了如何使用Swing Timer实现简单动画。参考链接:Swing Timer教程
- GitHub上的粒子系统项目:如"Java-Particle-System",展示了多线程和碰撞检测的实现。参考链接:GitHub粒子系统
这些参考帮助我们明确了动画循环、多线程管理和碰撞检测的技术方案。
准备实现哪几部分:
基于已有初始项目(已在报告中体现),我们将重点完善以下部分:
- 多种随机轨迹:在现有圆周运动基础上,添加直线位移、正弦曲线、余弦曲线等随机轨迹。
- 交互控制功能:
- 实现暂停按钮,暂停所有图形运动;单击继续按钮,恢复运动。
- 双击单个图形,将其从界面清除。
- 点击单个图形,暂停该图形的运动(再次点击可恢复)。
- 碰撞效果:实现图形间的弹性碰撞检测与处理,模拟物理反弹效果。
- 数据存储与恢复:将图形数据(坐标、半径等)保存到文件,程序启动时读取文件复现场景。
3. 系统功能设计
系统主要实现以下功能:
- 功能1:图形生成与随机运动
鼠标点击界面任意位置,生成半径随机的图形(默认圆形);图形以随机速率、方向和轨迹(从多种轨迹中随机选择)运动。 - 功能2:交互控制
- 暂停/继续按钮:控制所有图形的运动状态。
- 双击清除:双击任意图形,立即将其从界面移除。
- 点击暂停:点击单个图形,切换该图形的运动暂停状态。
- 功能3:碰撞检测与处理
图形运动过程中实时检测碰撞,发生碰撞时根据物理规则计算反弹方向和速度,确保动画逼真。 - 功能4:数据持久化
程序退出时自动将当前所有图形的坐标、半径等数据保存到本地文件;下次启动时自动读取文件恢复场景。
4. 准备使用哪些Java生态的第三方工具
- 图形界面:使用Java Swing(基于初始项目),轻量级且易于集成多线程。
- 数据存储:使用JSON格式存储图形数据,通过Jackson库(或Gson)序列化和反序列化,简化文件读写操作。
- 测试与调试:使用JUnit进行单元测试,确保碰撞逻辑和数据存储的正确性。
- 可选服务:无第三方服务调用,所有功能本地实现。
5. 数据如何存储
- 存储方式:文件存储。
- 具体实现:图形数据(包括坐标、半径、运动状态等)以JSON格式保存到本地文件(如"animation_data.json")。程序启动时检查文件是否存在,若存在则读取并复现场景。
- 备份考虑:数据仅保存在内存和文件中,不涉及数据库,确保轻量化和快速恢复。
6. 界面
- 界面类型:GUI(图形用户界面)。
- 技术选择:Java Swing,适合桌面应用程序,提供事件监听和绘图功能,易于实现动画和交互。控制台和Web界面不适用本系统。
7. 开发工具
- IDE:IntelliJ IDEA(社区版),支持Java Swing开发和调试。
- 测试框架:JUnit 5,用于编写和运行单元测试。
- 版本控制:Git,配合GitHub进行代码托管和协作管理。
- 代码规范:阿里巴巴Java代码规约IDE插件,确保代码质量和一致性。
- AI工具:DeepSeek AI助手,辅助代码编写、调试和文档生成。
| 序号 | 自查项目 | 负责人 |
|---|---|---|
| 1 | 代码:编码规范(类、属性、方法、变量命名)、代码格式化(使用IDE格式化功能) | 王鑫杰 |
| 2 | 代码:是否去除了IDE中的警告、包结构的合理划分 | 康奕彬 |
| 3 | 代码:多线程与动画循环的实现是否合理,避免资源泄漏 | 王鑫杰 |
| 4 | 代码:如果使用了集合(如List/Map)存储图形对象,说明选用理由及在本系统中的优缺点 | 康奕彬 |
| 5 | 代码:图形对象的状态(坐标、速度、轨迹类型)管理是否清晰 | 王鑫杰 |
| 6 | 博客、报告:UML图、功能结构图与流程图的绘制、代码是否使用Markdown语法展示 | 康奕彬 |
| 7 | 设计:面向对象设计(如图形、运动轨迹、碰撞处理器等类的职责分离)是否合理 | 王鑫杰 |
浙公网安备 33010602011771号