基于Java的坦克大战毕业设计:Swing实现与碰撞检测避坑指南
简介这是一份基于Java Swing的坦克大战游戏开发毕业设计资源面向计算机相关专业毕业生、Java入门者及游戏开发爱好者主要解决毕业设计选题、程序实现与论文撰写等需求。压缩包内含毕业论文、完整Java源码和答辩PPT大小约1.46MB当前平台显示文件总数为0具体文件清单未列出但标题明确表明三个核心组成部分。内容按标准论文结构展开系统分析包含技术可行性、经济可行性和需求分析概要设计给出工作流程图、项目规划及开发运行环境详细设计与算法实现聚焦游戏主窗口和游戏数据输出模块测试环境部分说明硬件环境与测试结果为读者提供完整毕业设计流程参考。已有582人学习浏览适合需要完成Java课程设计或毕业设计的同学可直接借鉴系统设计思路、源码结构、文档写法以及答辩演示框架提升项目实战能力。1. 基于 Java 的坦克大战能从零写出来但真正值钱的是能答辩相信不少人的编程启蒙里都有那辆从屏幕底部冒出来的黄色小坦克。把《坦克大战》作为基于 Java 的毕业设计难点不在“能不能做出游戏”而在“代码能不能撑起一篇毕业论文、一套演示源码和一次答辩”。很多同学做到一半就卡在三个地方画面闪烁、子弹穿墙、关闭窗口后进程还在后台空转。按“技术选型、主循环、碰撞检测、可复现骨架、避坑、答辩加分”这个顺序讲清楚照着做你得到的是一套能演示、能扩展、能写进论文的完整项目。2. 技术选型与工程结构为什么基于 Java 的坦克大战用 Swing 而不是游戏引擎2.1 选 Swing 而不是 LibGDX 或 Unity毕业设计要的是“看得懂”坦克大战这种 2D 游戏可选的技术路线其实不少LibGDX 是正经的 Java 游戏框架JavaFX 有动画 APIUnity 直接跨语言。但作为毕业设计最稳妥的还是 Java Swing理由很现实Swing 是 JRE 自带的 GUI 框架教室电脑装了 JDK 就能跑不需要额外部署运行时也不会因为显卡驱动问题黑屏。更重要的是答辩逻辑。毕业设计评分的重点通常是“面向对象设计是否清晰、核心算法是否讲得明白、项目是否完整可运行”。Swing 的组件模型和 Java 基础课高度重合JFrame、JPanel、paintComponent、事件监听这些概念指导老师和答辩评委都熟LibGDX 虽然效果好但里面那套 SpriteBatch、Stage、Actor 生命周期两三分钟根本讲不清楚一旦被追问底层实现很容易露怯。我的常规做法是用纯 Swing AWT 完成渲染和输入不用任何第三方库。这样 jar 包体积小源码结构也直观论文里的“系统实现”一章不用靠贴大段框架代码凑字数而是可以老老实实写清楚每个类在干什么。如果你用 JavaFX还要面对模块化 JDK 的配置问题光一个--add-modules就能劝退一批人。2.2 把游戏拆成四个核心类答辩时能讲“高内聚低耦合”坦克大战的实体无非是坦克、子弹、墙壁和地图。代码结构上我一般这样拆类职责关键字段与方法GameObject所有游戏对象的抽象基类x、y、width、height、direction、speed抽象 paint()Tank玩家与敌方坦克的共同逻辑hp、bulletInterval、move()、shoot()Bullet子弹实体damage、alive、move()GamePanel游戏主面板负责更新、绘制、碰撞检测、输入update()、paintComponent()、checkCollision()Main启动入口创建窗口并启动游戏线程main()这个结构最直接的好处是答辩时被问到“你这个项目和课本里的计算器程序有什么本质区别”你可以回答“计算器是事件驱动游戏是循环驱动所有对象在一个主循环里统一更新”。这会让评委觉得你在用游戏开发的思维写代码而不是把一堆方法堆在 JFrame 里。Tank 和 Bullet 都继承 GameObject但两者不要直接互相引用。碰撞检测统一放在 GamePanel 里做坦克不关心子弹长什么样子弹也不关心自己被谁打了所有交互收敛到一个地方。这样后面加道具、加爆炸效果只需要新增类不用改坦克内部逻辑。2.3 游戏主循环固定时间步长而不是 while(true) 加 sleepSwing 程序最常见是事件驱动但游戏不一样需要一个持续刷新的主循环。常见做法是让 GamePanel 实现 Runnable在 main 里启动一个线程public class GamePanel extends JPanel implements Runnable { private boolean running true; private final long TIME_PER_FRAME 1_000_000_000L / 30; Override public void run() { long last System.nanoTime(); while (running) { long now System.nanoTime(); if (now - last TIME_PER_FRAME) { update(); repaint(); last now; } else { Thread.yield(); } } } }这里的逻辑说明TIME_PER_FRAME用 1 秒除以 30表示每帧预算约 33.3 毫秒。System.nanoTime()比Thread.sleep(33)靠谱得多sleep 的精度在不同操作系统上浮动很大而且会让线程无谓地睡眠和唤醒。用Thread.yield()只让出剩余时间片循环继续自旋等时间到就执行更新帧率会更平稳。update()负责移动坦克、让子弹飞、判断碰撞repaint()只做一件事通知 Swing 重绘界面。注意不要把移动逻辑写进paintComponent()里否则画面一卡游戏逻辑也跟着卡这是很多新手最容易踩的雷。3. 坦克大战碰撞检测与移动手感从 AABB 公式到速度参数3.1 先用 AABB 矩形碰撞毕业设计够用且好讲坦克大战里所有实体都是矩形碰撞检测最合适的方案就是 AABBAxis-Aligned Bounding Box轴对齐边界盒。两个矩形是否相交判断条件非常直接public boolean intersects(GameObject a, GameObject b) { return a.x b.x b.width a.x a.width b.x a.y b.y b.height a.y a.height b.y; }这个方法的逻辑是如果 a 的左边在 b 右边的左边同时 a 的右边在 b 左边的右边说明水平方向有重叠垂直方向同理。四个条件同时满足就是碰撞。我一般会把这个方法写在 GameObject 里所有碰撞检测复用。用 AABB 而不是像素级检测是因为坦克大战的墙是整块整块的砖不需要精确到像素。答辩时如果被问到“这个碰撞检测够精确吗”你可以顺势说AABB 是精确碰撞的保守近似性能开销小对 2D 游戏足够如果要更精细可以再对坦克履带区域做二次矩形细分。这个回答既显得你懂原理又不会给自己挖坑。3.2 方向键控制用布尔数组解决“方向键乱跳”和“斜向抖动”经典坦克大战是四方向直角移动不是八方向。很多新手第一次做的时候把方向存成一个枚举变量按下方向键就赋值松开就清空结果出现两个问题快速切换方向时坦克瞬移按住上和左时坦克以极快速度抖动。问题根因是键盘事件keyPressed会重复触发而且你无法用单个变量表达两个同时按下的按键。正确做法是用布尔数组记录按键状态移动逻辑统一在 update 里读取private final boolean[] keys new boolean[KeyEvent.KEY_LAST]; Override public void keyPressed(KeyEvent e) { keys[e.getKeyCode()] true; } Override public void keyReleased(KeyEvent e) { keys[e.getKeyCode()] false; }然后在坦克的 move 方法里判断方向优先级例如左键优先于上下右键也优先于上下这样即使玩家同时按住多个键坦克的转向行为也是确定性的不会抖。移动本身放在 update 中不再依赖按键事件自身的触发频率按住方向键就能持续移动。3.3 子弹的生成、飞行与回收别用数组存可变集合子弹是动态创建又动态销毁的对象。常见错误是用Bullet[] bullets new Bullet[100]数量写死不说遍历时还要处理 null。更好的做法是用ListBullet射击时 add越界或击中目标时 remove。这里有一个所有 Java 新手都会遇到的大坑在遍历集合时调用remove()会抛出ConcurrentModificationException。因为增强 for 循环内部持有迭代器删除元素后迭代器的预期修改次数对不上。正确写法是用迭代器IteratorBullet it bullets.iterator(); while (it.hasNext()) { Bullet b it.next(); b.move(); if (b.isOutOfBounds() || hitWall(b)) { it.remove(); } }isOutOfBounds()判断子弹坐标是否小于 0 或大于面板宽高hitWall(b)遍历地图中的墙块做 AABB 碰撞。子弹不在移动后立刻删除而是在该帧所有子弹都处理完后再统一回收避免出现“这一帧删了、下一帧又用到”的空指针问题。3.4 速度参数怎么调出“不飘”的手感游戏手感很大程度是调参调出来的。坦克大战最重要的是三组参数坦克速度、子弹速度、射击间隔。我通常会先定一版再反复试玩调整参数推荐初值调整方向坦克移动速度2~3 px/帧数字越大坦克越飘超过 4 就难瞄准子弹速度5~6 px/帧太慢像扔纸团太快穿墙风险高射击间隔400~500ms间隔越短火力越猛但会碾压敌人 AI帧率30 FPS毕业设计 30 就够60 会暴露出边界判定精度问题这里最玄学的就是“子弹速度要明显快于坦克速度但必须小于墙块宽度”。如果墙是 32 像素宽子弹每帧移动 6 像素即使发生高速运动也不会直接跳过整块墙而不触发碰撞。这个约束在后面会单独展开讲理解透了这个穿墙问题就解决了一大半。4. 核心代码落地基于 Java 的坦克大战最小可运行骨架4.1 Main窗口、画布和线程启动先写启动入口。这个类很短但决定了整个程序能不能正常关闭和启动游戏线程package tankwar; import javax.swing.*; public class Main { public static void main(String[] args) { JFrame frame new JFrame(坦克大战); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setSize(900, 700); GamePanel panel new GamePanel(); frame.add(panel); frame.setLocationRelativeTo(null); frame.setVisible(true); new Thread(panel, game-loop).start(); } }setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)是必须写的否则关窗口时进程不会退出。这也是避坑章节里要重点讲的内容。frame.setResizable(false)锁定窗口大小避免玩家把窗口拉变形后坐标计算错乱。new Thread(panel, game-loop)给线程起个名字方便在调试时用 jstack 查看线程状态。4.2 GamePanel更新、绘制和键盘监听的完整循环体GamePanel 是整个项目的核心承载了游戏循环、碰撞检测和键盘输入。一个能跑的最小版本大致长这样public class GamePanel extends JPanel implements Runnable { private boolean running true; private final long TIME_PER_FRAME 1_000_000_000L / 30; private final Tank player new Tank(120, 500); private final ListBullet bullets new CopyOnWriteArrayList(); private final boolean[] keys new boolean[KeyEvent.KEY_LAST]; public GamePanel() { setFocusable(true); addKeyListener(new KeyAdapter() { Override public void keyPressed(KeyEvent e) { keys[e.getKeyCode()] true; if (e.getKeyCode() KeyEvent.VK_SPACE) { bullets.add(player.shoot()); } } Override public void keyReleased(KeyEvent e) { keys[e.getKeyCode()] false; } }); } private void update() { player.moveByKeys(keys); for (Bullet b : bullets) { b.move(); } } Override public void paintComponent(Graphics g) { super.paintComponent(g); player.draw(g); for (Bullet b : bullets) { b.draw(g); } } }这里有个细节值得说bullets用了CopyOnWriteArrayList。因为玩家按空格时keyPressed 在事件分发线程执行而 update 在游戏线程执行两个线程同时操作同一个集合。用普通 ArrayList 可能抛出并发修改异常。用CopyOnWriteArrayList虽然读性能不算最高但这个量级完全够用关键是它允许遍历时安全修改。paintComponent里先调用super.paintComponent(g)清掉上一帧画面再绘制所有对象。Swing 的 JPanel 默认开启双缓冲画面不会闪烁。如果你用了 Canvas 并重写 paint()就会遇到闪烁问题这是后话。4.3 Tank 和 Bullet 的对象化封装坦克类负责移动和射击。关键是把移动逻辑封装成能接收按键数组的方法这样 update 里不用写一长串 ifpublic class Tank { private int x, y; private int speed 3; private Direction direction Direction.UP; public void moveByKeys(boolean[] keys) { if (keys[KeyEvent.VK_LEFT]) { direction Direction.LEFT; x - speed; } else if (keys[KeyEvent.VK_RIGHT]) { direction Direction.RIGHT; x speed; } // 上和下同理 } public Bullet shoot() { int bx x width / 2 - 5; int by y; return new Bullet(bx, by, direction); } }shoot 方法里计算子弹出生点让子弹从坦克炮管位置而不是坦克中心飞出去。如果直接以坦克中心做起点子弹会先和坦克自身碰撞逻辑上就很别扭。这些细节点写论文时可以放在“系统详细设计”里是很好的凑章节素材。4.4 敌方坦克先做最简单的随机移动后面再升级 AI敌方坦克不必一开始就写复杂 AI。先做“碰到边界或墙体就随机换方向”的版本等核心功能稳定后再加追击逻辑public void aiMove() { int nextX x dx * speed; int nextY y dy * speed; if (hitWall(nextX, nextY) || nextX 0 || nextY 0) { changeDirectionRandomly(); } else { x nextX; y nextY; } }这段代码的逻辑是先按当前方向计算下一秒的位置如果这个位置会撞墙或出界就随机换方向否则正常移动。它最大的优点是防止坦克叠在墙上也避免“左右横跳”的假死状态。5. 坦克大战常见问题排查闪烁、穿墙、进程不退、jar 起不来5.1 画面闪烁和残影重影拖尾严重现象坦克一移动整个面板像老式霓虹灯一样闪身后还拖着一条条残影。原因最常见的是继承了java.awt.Canvas并重写paint()Canvas 默认没有双缓冲机制。每次重绘都会直接擦除再画镜头一抖动闪烁肉眼可见。另一个原因是paintComponent里忘了调用super.paintComponent(g)导致上一帧内容没清干净残影越积越厚。解决改用 JPanel 作为画布并重写paintComponent()且第一行就调super.paintComponent(g)。Swing 的 JPanel 自带双缓冲这个闪烁问题基本就消失了。如果一定要用 Canvas就得自己创建 BufferStrategy那又是另一套复杂度非必要不建议。5.2 坦克卡进墙里或者贴不住墙边现象坦克顶住墙后继续按方向键坦克有一半嵌进砖块里松键后回不到墙边。原因碰撞检测做在了移动之后但回退逻辑写错。常见做法是“先移动撞了再退回去”但退回的坐标是移动前的坐标如果这一帧速度和上一帧速度不一致坦克就会离墙半个身位。另一个原因是移动步长大于墙体厚度一步直接跨过去了检测时已经穿到墙的另一侧。解决先计算临时坐标碰撞检测通过后再真正修改坐标。代换方式如下int nextX x dx * speed; if (!isBlocked(nextX, nextY, walls)) { x nextX; y nextY; }isBlocked用临时坐标生成一个“虚拟矩形”去和所有墙体做 AABB 检测而不是让坦克先动起来再判断。这一步能根治卡墙问题。不建议用“撞完再回退”因为回退距离和速度强绑定改速度参数就要重新调碰撞。5.3 子弹穿墙子弹直接跳过砖块现象子弹明明撞到墙却从墙的另一边飞出来看起来像穿模。原因本质是离散帧更新的问题。假设墙宽 32 像素子弹速度 6 像素/帧理论上不会穿。但如果你的子弹速度调到了 10 甚至 20 像素/帧而游戏又掉帧一帧间隔内子弹就可能从墙的一侧跳到了另一侧碰撞检测时两个矩形刚好不相交就漏判了。解决把子弹速度控制在墙块最小边长的三分之一以内这是最省事的方案。如果一定要超高速就得分步移动也就是把一次移动拆成两步每步都做碰撞检测for (int i 0; i subSteps; i) { b.x dx * speed / subSteps; if (hitWall(b)) { b.alive false; break; } }subSteps取 2 或 3 即可等于把一帧的移动切碎了做检测。牺牲一点性能换可靠性子弹量不多时完全无所谓。5.4 关闭游戏窗口进程还占着 CPU现象点关闭按钮窗口消失了但任务管理器里能看到 java.exe 还在运行CPU 占用率居高不下。原因两个层次的问题叠加。一是setDefaultCloseOperation没有设置为EXIT_ON_CLOSEJFrame 默认行为只是隐藏窗口进程还在。二是游戏线程是一个无限循环即使窗口关闭只要running变量还是 true线程就永远醒着。解决最简单的是在 main 里用EXIT_ON_CLOSE但正规做法是监听窗口关闭事件把running置为 false让游戏线程自然退出frame.addWindowListener(new WindowAdapter() { Override public void windowClosing(WindowEvent e) { panel.stopGame(); } });stopGame()就一行running false;。run 循环检测到 running 为 false 就退出 while线程结束进程自然关闭。这是能写进论文的高质量收尾方式。5.5 打包成 jar 后双击没反应现象IDE 里运行一切正常打成可执行 jar 后双击资源管理器里转个圈就什么也没发生。原因最常见的三种Manifest 文件里没有正确的Main-Class配置main 类写成了带包名的全限定名但路径不对代码里用了相对路径读取图片jar 包内路径不匹配。解决如果用 IDEA通过 Artifacts 打包时手动指定 Main Class。关键点是Main-Class: tankwar.Main必须是带包名的全限定名不能是 Main。图片等资源不要用new File(images/a.png)读要用getClass().getResource(/images/a.png)这样 jar 包内也能定位到资源。6. 答辩演示加分项让敌方坦克自动巡逻并实时显示击毁数答辩环节最怕的不是功能少而是讲完代码后不知道怎么演示出“技术含量”。我习惯做两件事给敌方坦克加一个很简单的自动巡逻逻辑再把战果实时显示在窗口标题栏上。第一件事展示 AI 思想第二件事展示事件驱动和线程协作。巡逻逻辑不需要用寻路算法一个“遇障转向”就够public void patrol() { int nextX x dx * speed; int nextY y dy * speed; if (hitWall(nextX, nextY) || nextX 0 || nextY 0) { direction Direction.random(); } x dx * speed; y dy * speed; }拿到答辩现场你可以说这是基于状态机的简单 AI敌人具备感知、决策、行动三个环节感知就是碰撞检测决策就是转向策略。评审老师基本都能听懂而且会觉得你有“游戏 AI”的概念比单纯做移动有亮点。击毁数可以用一个 int 变量在子弹命中坦克时自增然后刷新窗口标题frame.setTitle(坦克大战 - 击毁数: killCount);标题栏刷新不涉及重绘画布成本低还能直观展示“多线程协作”的成果。演示时先空放着不动展示地图初始状态再操作坦克打爆几辆敌方坦克指着标题栏说“这里可以看到每次击毁实时更新。”我这些年做 Swing 小游戏有一个习惯从一开始就把“游戏状态”和“绘制代码”分开update 里只改数据paintComponent 里只读数据。这个习惯在面对临时加需求时特别能救命比如指导老师临时说“把坦克换个颜色再显示血量”半小时就能改完不用动主循环结构。把这一整套思路走通你手里的工程就不再是拼凑的代码而是一个能讲清楚、能跑起来、也能应对各种突发提问的完整作品。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Serverless全栈架构实战:云服务器运维效率革命

Serverless全栈架构实战:云服务器运维效率革命

"Serverless全栈架构,云服务器运维效率革命"——说实话,我第一眼看到这个标题的时候,心里咯噔了一下。"革命"这个词在运维圈已经被用滥了,但真正把Serverless玩明白、从传统云服务器运维里跳出来的人&#xf…

2026/10/9 6:44:33 阅读更多 →
COMSOL复现平带合并BIC:光子晶体高Q模式仿真指南

COMSOL复现平带合并BIC:光子晶体高Q模式仿真指南

两个星期前,我在COMSOL里把一组光子晶体能带算完,盯着Q因子随孔半径的演化曲线看了很久。原因很简单:我复现的那个结构,在某个特定的几何参数下,两条原本各司其职的BIC在Γ点合并成一条,模式Q因子瞬间抬升了…

2026/10/9 6:44:33 阅读更多 →
铃木退出中国后的全球化翻身:小型车战略与市场选择的启示

铃木退出中国后的全球化翻身:小型车战略与市场选择的启示

铃木退出中国那年,很多人觉得它“混不下去了”。2018年,长安铃木股权变更尘埃落定,日方正式抽身,一家长安汽车代工,贴牌“铃木”卖了一段时间,最后彻底熄火。当时媒体标题清一色是“又一个日系品牌败走中国…

2026/10/9 6:44:33 阅读更多 →

最新新闻

从后坐力到对象池:构建射击游戏武器手感的核心实现

从后坐力到对象池:构建射击游戏武器手感的核心实现

1. 项目定位与核心需求拆解先把这个项目的定位说清楚。《暗黑王朝》是一款暗黑哥特风格的俯视角射击游戏,玩家需要在阴郁的地下城和荒野中对抗各种扭曲生物。做这套武器系统的目标非常直接:让每把枪都打出完全不同的手感,让玩家从射击反馈里就…

2026/10/9 7:14:59 阅读更多 →
ESP32选型避坑指南:从SoC到模组再到料号的完整决策流程

ESP32选型避坑指南:从SoC到模组再到料号的完整决策流程

1. 从一颗芯片到一张订单:为什么“ESP32”这三个字最容易让人踩坑很多人第一次接触 ESP32,是在某个开发板商品页上看到“ESP32 开发板”几个字,价格从十几块到上百块不等,于是随手买了一块。等到项目要小批量试产,采购…

2026/10/9 7:14:59 阅读更多 →
用分层模型与三遍法吃透计算机网络课后习题答案PDF

用分层模型与三遍法吃透计算机网络课后习题答案PDF

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 7:14:59 阅读更多 →
汇编语言实战指南:从指令原理到性能调优的底层逻辑

汇编语言实战指南:从指令原理到性能调优的底层逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 7:14:59 阅读更多 →
新思ARC功能安全处理器与EB Classic AUTOSAR开发实战

新思ARC功能安全处理器与EB Classic AUTOSAR开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 7:14:59 阅读更多 →
JavaWeb毕设项目从数据库脚本到IDEA运行:配置与避坑指南

JavaWeb毕设项目从数据库脚本到IDEA运行:配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 7:13:59 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →