课程设计

选题报告

选题名称:交互式动画系统
博客链接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粒子系统
    这些参考帮助我们明确了动画循环、多线程管理和碰撞检测的技术方案。

准备实现哪几部分
基于已有初始项目(已在报告中体现),我们将重点完善以下部分:

  1. 多种随机轨迹:在现有圆周运动基础上,添加直线位移、正弦曲线、余弦曲线等随机轨迹。
  2. 交互控制功能
    • 实现暂停按钮,暂停所有图形运动;单击继续按钮,恢复运动。
    • 双击单个图形,将其从界面清除。
    • 点击单个图形,暂停该图形的运动(再次点击可恢复)。
  3. 碰撞效果:实现图形间的弹性碰撞检测与处理,模拟物理反弹效果。
  4. 数据存储与恢复:将图形数据(坐标、半径等)保存到文件,程序启动时读取文件复现场景。

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 设计:面向对象设计(如图形、运动轨迹、碰撞处理器等类的职责分离)是否合理 王鑫杰
posted @ 2025-11-10 16:00  w4ngXj  阅读(17)  评论(0)    收藏  举报