《天外飞仙》教学方案教学方案涵盖每节课的教学目标、教学方法、课堂活动、可能出现的问题及解决方案一、总体教学策略1.1 教学方法方法应用场景占比讲授法概念讲解、代码设计思路30%演示法实时编码、运行效果展示40%发现法故意留Bug让学生发现问题10%对比法好代码 vs 坏代码、优化前后对比10%实践法每节课的课后练习10%1.2 教学节奏每集视频结构 开场1分钟 → 复习回顾2分钟 → 新知识点5分钟 → 编码实战10分钟 → 运行验证3分钟 → 作业布置1分钟 → 下集预告1分钟1.3 学习效果评估过程评估每集结尾有 1 个思考题阶段性评估第5集/第10集各有 1 个小测验终极项目学生基于框架修改数值/增加新功能二、每节课详细教学方案第1集开发环境搭建与 Swing 基础教学目的学生能独立配置 JDK 11 IntelliJ IDEA学生理解 JFrame 和 JPanel 的关系学生能创建并运行第一个 Swing 程序教学过程环节时间内容教学方法导入1min展示成品游戏运行效果引起兴趣演示法JDK安装3min下载JDK 11 → 安装 → 配置 JAVA_HOME → 验证 java -version演示法IDEA配置3min新建项目 → 设置 JDK → 创建包结构演示法编码实战10min写 Main.javaJFrame 窗口 居中 标题演练法运行验证3min运行 → 看到空白窗口演示法关键代码片段publicclassMain{publicstaticfinalintGAME_WIDTH240;publicstaticfinalintGAME_HEIGHT320;publicstaticfinalStringTITLE天外飞仙;publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(()-{JFrameframenewJFrame(TITLE);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setResizable(false);frame.pack();DimensionscreenSizeToolkit.getDefaultToolkit().getScreenSize();intx(screenSize.width-frame.getWidth())/2;inty(screenSize.height-frame.getHeight())/2;frame.setLocation(x,y);frame.setVisible(true);});}}常见问题❌ javac 不是内部命令 → 检查 JAVA_HOME 配置❌ 窗口中文乱码 → file.encodingUTF-8 或使用汉字显示❌ 窗口未居中 → pack() 后再获取大小课后作业修改窗口大小为 320×480观察比例变化设置窗口背景色为深蓝色第2集游戏循环与双缓冲渲染教学目的理解游戏循环的基本结构掌握 Runnable Thread 的使用理解双缓冲渲染的原理教学过程环节时间内容教学方法复习1min回顾JFrame窗口问答法概念3min游戏循环 vs Web/App 的事件驱动模型差异讲授法编码8minGamePanel 类实现 Runnablerun() 循环60fps控制演示法编码5min双缓冲BufferedImage → Graphics2D演示法调试3min演示无双缓冲时的闪烁问题发现法输入3min实现 KeyListener 接口演示法难点解析Thread.sleep(targetTime - elapsed)为什么不是固定 sleep 30ms→ 因为渲染时间不固定需要动态计算剩余时间repaint()vspaintComponent()的关系→ repaint 让 AWT 线程调度重绘最终调用 paintComponent常见问题❌ 画面闪烁 → 没用双缓冲检查 buffer 绘制流程❌ 键盘没反应 → 没调 setFocusable(true) 或 addKeyListener❌ 窗口卡死 → Thread 里死循环阻塞了 EDT课后作业修改帧率为 60fps观察 CPU 占用变化添加 WASD 四方向移动测试第3集玩家角色类与属性系统教学目的掌握 Java 面向对象设计玩家模型理解 RPG 属性体系设计教学过程环节时间内容教学方法复习1minGamePanel 框架问答法概念5minRPG 属性设计HP/MP/ATK/DEF 的数值规划讲授法编码6minPlayer 类字段、构造方法、getter演示法编码4minlevelUp() 升级方法设计演示法编码4mingainExp() 经验值累进逻辑演示法渲染4min状态栏绘制HP条、MP条演示法设计决策讲解初始HP100: 敌人攻击约8-12 → 能扛8-12次攻击 药品恢复50HP → 战斗中可以使用1-2次 升级15~25HP → 提升空间明显有成就感课后作业给 Player 添加「内力恢复速度」字段战斗中每回合回复修改升级公式为更平滑的曲线第4集场景地图与移动逻辑教学目的理解场景数据设计掌握链式调用 API 设计教学过程环节时间内容教学方法复习2minPlayer 类和状态栏问答法设计5minScene 类字段设计7个场景的数据规划讲授法编码8minScene.java 的静态配置演示法编码5minrenderOverworld() drawSceneBackground()演示法编码3min上下移动逻辑 边界检查演示法验证2min运行效果演示法场景设计表场景等级安全区商店客栈NPC敌人清风镇1✅✅✅✅无幽暗森林1❌❌❌❌野狼、山贼青石山路2❌❌❌❌山贼、毒蛇古寺2✅❌✅✅黑衣僧人死亡沼泽3❌❌❌❌女剑客魔教总坛4❌❌❌❌白发老者、魔教教主凌霄峰5❌❌❌❌天外飞仙幻象课后作业添加更多场景扩展地图给场景添加图片变体白天/夜晚第5集战斗系统核心上教学目的掌握状态机在游戏中的应用理解回合制战斗流程教学过程环节时间内容教学方法复习2min场景移动遇敌问答法概念5min状态机GameState 枚举状态跳转图讲授法设计3minBattleSystem 类的职责设计讲授法编码8minBattleSystem 核心方法攻击、伤害计算演示法编码5minEnemy 类 敌人配置演示法编码3min遇敌→进入战斗的状态转换演示法状态机图TITLE → STORY → OVERWORLD →↔ BATTLE → BATTLE_ANIM → LEVEL_UP → OVERWORLD ↓ ↓ MENU GAME_OVER (→ TITLE) ↓ SHOP / INN / NPC_DIALOG伤害公式讲解damage max(1, baseAtk - target.def / 2 random(5))为什么 def 要除以 2→ 防止高防御导致完全无伤害为什么加 random(5)→ 增加战斗随机性避免公式化课后作业增加「暴击」机制10%概率 1.5倍伤害添加战斗背景音乐提示第6集战斗系统核心下教学目的掌握复杂的多级状态处理学会防御性编程教学过程环节时间内容教学方法复习2min战斗框架 review问答法实战10minhandleBattleInput 完整实现phase 0-4演示法编码5minrenderBattle() renderBattleUI()演示法调试5minBug 演示IndexOutOfBoundsException → 修复发现法验证3min完整战斗测试演示法Bug 分析Exception in thread Thread-0 java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0 at game.GamePanel.handleBattleInput(GamePanel.java:384) 原因进入 battlePhase4 时敌人已被全部杀死aliveenpty list but battleCursor 还是之前的索引 修复在 phase 1/4 入口加 if (alive.isEmpty()) { battlePhase 0; return; }课后作业添加防御命令的效果显示修复逃跑后光标重置的问题第7集武功招式与物品装备系统教学目的掌握枚举的高级用法理解游戏数值设计教学过程环节时间内容教学方法复习2min战斗系统完善问答法概念5minSkill 枚举体系Type(Target) 组合讲授法编码6minSkill.java 12种武功配置演示法编码5minItem 装备系统品质、效果演示法编码4min武功到物品的图片映射itemNameToImgKey/skillNameToImgKey演示法渲染3min菜单显示武功列表和装备信息演示法武功设计表武功名类型等级需求MP消耗威力基础拳法物理·单体1015小还丹术治疗·单体21040铁砂掌物理·单体3530金钟罩增益·自身380八卦掌物理·单体4635混元一气功魔法·单体41250天山剑法物理·单体51045凌波微步增益·自身6100飞花逐月物理·单体71560太极剑法物理·单体81870万剑归宗魔法·全体92890天外飞仙魔法·全体1035120课后作业添加新的武功如「降龙十八掌」实现装备的出售功能第8集商店客栈与 NPC 对话教学目的实现多种交互状态掌握渲染与输入在不同状态间的隔离教学过程环节时间内容教学方法复习2min武功装备系统问答法编码6min商店界面renderShop() handleShopInput()演示法编码4min客栈界面回血逻辑演示法编码3minNPC 对话showDialog() 渲染演示法编码3min全局菜单状态/武功/装备/背包四面板演示法编码3min菜单内装备切换逻辑穿装备/卸装备演示法交互流程大地图中按 Enter → 有商店→ 商店状态 → 有客栈→ 客栈状态 → 有NPC对话→ 对话状态 → 以上都没有→ 无反应或提示 大地图中按 X/Esc → 菜单状态 菜单中按 X/Esc → 返回大地图课后作业添加客栈砍价功能随机折扣限制玩家银两为负数的逻辑第9集剧情流程与胜利条件教学目的学会用状态变量推进剧情实现完整的游戏闭环教学过程环节时间内容教学方法复习2min所有交互回顾问答法设计5min剧情节点触发表讲授法编码5mintriggerStoryEvents() 方法实现演示法编码5minrenderVictory/GameOver/LevelUp 效果演示法编码3minBoss 战配置演示法验证5min完整游戏流程测试演示法剧情节点storyProgress0: 初始状态 → 击败魔教教主Scene[5] → storyProgress1获得古玉线索 → 到达凌霄峰Scene[6] → storyProgress2 → 击败天外飞仙幻象Scene[6] Boss战 → VICTORY通关课后作业添加更多支线任务如帮村民找回失物通关后添加二周目继承机制第10集AI 美术资源生成与打包发布教学目的学会使用 AI 工具辅助游戏开发掌握游戏项目的打包部署教学过程环节时间内容教学方法复习2min全流程回顾问答法概念5min提示词工程是什么、怎么写、注意事项讲授法编码8mingenerate_assets.js 代码逐行解读演示法实操5min设置 API KEY → 运行 → 查看生成效果演示法编码3min图片加载失败的回退策略演示法打包3minrun_game.bat 一键编译演示法提示词结构模板[主体描述] [环境/背景] [风格] [构图] [画质关键词]提示词示例拆解Ancient Chinese riverside town, Song dynasty architecture, wooden buildings with tiled roofs, willow trees by a peaceful river, misty mountains in background, warm sunlight, traditional Chinese painting style, 4K ├─ 朝代风格限定 ─┼─ 具体元素列举 ───────┼─ 环境氛围 ─┼─ 艺术风格 ─┼─ 画质课后作业用 AI 生成新的敌人造型修改 generate_assets.js 使用不同的画风三、课后练习合集集基础练习进阶练习1修改窗口大小、背景色添加标题文字2修改帧率、添加按键移动双缓冲 vs 无缓冲对比3修改初始属性值添加内力自动回复4添加新场景场景昼夜切换5添加暴击、闪避战斗背景音乐6防御命令效果显示逃跑成功后遇敌重置7添加新武功物品出售功能8客栈砍价商店限购功能9添加支线任务二周目继承10用不同画风生成集成到网页版四、常见 Bug 解决方案速查Bug位置原因修复IndexOutOfBounds -1handleBattleInput phase 1/4alive为空列表加 if (alive.isEmpty()) returnIndexOutOfBounds 0handleBattleInput phase 3consumables列表为空加 if (consumables.isEmpty()) return图片不显示loadAssets路径不区分大小写统一小写文件名窗口闪烁render()没用双缓冲检查 buffer 绘制流程键盘输入延迟keyPressedEDT 线程阻塞检查循环中的耗时操作中文乱码paintComponent字体不支持中文使用微软雅黑等中文字体