---
## 🎯 第二阶段需求讨论
### 目标:实现5种飞剑和符文系统
#### 功能清单
1. 普通飞剑 + 基础符文 ✅
2. 烈火飞剑 + 离火符文(灼烧效果)
3. 冰霜飞剑 + 坎水符文(减速效果)
4. 雷霆飞剑 + 震雷符文(眩晕效果)
5. 光明飞剑 + 乾金符文(回血效果)
6. 飞剑选择界面
7. 符文显示系统
---
## 💡 实现方案讨论
### 方案1:剧情对话系统(优先级高)
#### 1.1 创建器练剑专用角色配置
```typescript
// src/data/SwordStoryConfig.ts
export interface Character {
id: string;
name: string;
emoji: string;
avatar?: string;
role: string;
description: string;
}
export interface Dialogue {
characterId: string;
text: string;
emotion?: "neutral" | "happy" | "sad" | "serious" | "mysterious";
}
// 器练剑专用角色
export const SWORD_CHARACTERS: Character[] = [
{
id: "player",
name: "呆鸟",
emoji: "🐤",
role: "主角",
description: "初入仙途的修仙者,心地善良"
},
{
id: "elder",
name: "韩长老",
emoji: "👴",
role: "导师",
description: "青云宗长老,传授飞剑之术"
}
];
// 关卡剧情配置
export const SWORD_LEVEL_STORIES = {
0: {
title: "新手教程",
beforeGame: [
{ characterId: "elder", text: "呆鸟,你虽资质平平,却有赤子之心。人间凶煞四起,百姓焦虑不安,正是用人之时。", emotion: "neutral" },
{ characterId: "player", text: "长老,我真的能除煞吗?我只是个普通外门弟子...", emotion: "sad" },
{ characterId: "elder", text: "修仙之道,不在资质,而在心性。你天生能感应煞力,此乃天命。今日,我将传授你基础剑术。", emotion: "happy" }
],
afterGame: []
},
1: {
title: "定序破妄,解迷茫之困",
beforeGame: [
{ characterId: "elder", text: "此处便是迷魂城,混沌残魂隐匿于城中心。百姓陷入迷茫,不知何去何从。", emotion: "serious" },
{ characterId: "player", text: "城中的百姓看起来真的迷茫,目光涣散,脚步无力...", emotion: "sad" },
{ characterId: "elder", text: "混沌主混乱,借人间迷茫之气壮大。此乃烈火飞剑,附离火符文。火焰能驱散迷茫,带来光明与希望。", emotion: "happy" },
{ characterId: "elder", text: "提示:获得烈火飞剑 + 离火符文", emotion: "happy" }
],
afterGame: [
{ characterId: "elder", text: "混沌已被击败,迷魂城百姓恢复清明。火焰驱散了迷茫,百姓们找到了方向。", emotion: "happy" },
{ characterId: "elder", text: "你今日除之,已迈出除煞第一步。下一站,前往忠义镇,除穷奇,破小人之祸。", emotion: "serious" }
]
}
// ... 其他章节
};
```
#### 1.2 在SwordPractice中集成StoryDialog
```tsx
import StoryDialog from '@/components/StoryDialog';
import { SWORD_CHARACTERS, SWORD_LEVEL_STORIES } from '@/data/SwordStoryConfig';
// 在SwordPractice组件中
const [showStory, setShowStory] = useState(false);
const [storyPhase, setStoryPhase] = useState<'before' | 'after' | null>(null);
// 显示战斗前剧情
const showBeforeGameStory = () => {
const story = SWORD_LEVEL_STORIES[currentLevelIndex];
if (story && story.beforeGame) {
setStoryPhase('before');
setCurrentDialogues(story.beforeGame);
setShowStory(true);
}
};
// 显示战斗后剧情
const showAfterGameStory = () => {
const story = SWORD_LEVEL_STORIES[currentLevelIndex];
if (story && story.afterGame) {
setStoryPhase('after');
setCurrentDialogues(story.afterGame);
setShowStory(true);
}
};
// 剧情完成回调
const handleStoryComplete = () => {
setShowStory(false);
if (storyPhase === 'before') {
// 战斗前剧情结束,进入飞剑选择
setShowItemSelect(true);
} else if (storyPhase === 'after') {
// 战斗后剧情结束,显示奖励
showRewards();
}
};
```
---
### 方案2:飞剑效果实现
#### 2.1 飞剑效果数据结构
```typescript
// 在SwordPractice.tsx中已有的Item接口基础上,确认特殊效果
interface Item {
id: string;
emoji: string;
name: string;
runeName: string;
color: string;
attackPower: number;
speed: number;
specialEffect: 'none' | 'burn' | 'freeze' | 'chain' | 'holy';
effectDescription: string;
}
// 确认5种飞剑配置
const ITEMS: Item[] = [
{
id: 'normal',
emoji: '→',
name: '普通飞剑',
runeName: '基础符文',
color: '#60a5fa',
attackPower: 10,
speed: 5,
specialEffect: 'none',
effectDescription: '基础伤害,无额外效果'
},
{
id: 'fire',
emoji: '🔥',
name: '烈火飞剑',
runeName: '离火符文',
color: '#f97316',
attackPower: 15,
speed: 6,
specialEffect: 'burn',
effectDescription: '灼烧敌人,持续伤害'
},
{
id: 'ice',
emoji: '❄️',
name: '冰霜飞剑',
runeName: '坎水符文',
color: '#3b82f6',
attackPower: 12,
speed: 4,
specialEffect: 'freeze',
effectDescription: '冻结敌人,降低移动速度'
},
{
id: 'lightning',
emoji: '⚡',
name: '雷霆飞剑',
runeName: '震雷符文',
color: '#eab308',
attackPower: 18,
speed: 7,
specialEffect: 'chain',
effectDescription: '链击效果,可击中多个敌人'
},
{
id: 'light',
emoji: '✨',
name: '光明飞剑',
runeName: '乾金符文',
color: '#fbbf24',
attackPower: 20,
speed: 8,
specialEffect: 'holy',
effectDescription: '神圣伤害,每次攻击恢复5 HP'
}
];
```
#### 2.2 特殊效果实现逻辑
```typescript
// 在飞剑击中敌人的逻辑中应用特殊效果
if (minDist < CONFIG.HIT_RADIUS) {
hitEnemyIds.push(nearestEnemy.id);
// 基础伤害
let damage = 120;
// 根据符文效果计算额外伤害
if (selectedItem.specialEffect === 'holy') {
damage = Math.floor(damage * 1.5);
} else if (selectedItem.specialEffect === 'burn') {
damage = Math.floor(damage * 1.5);
}
// 应用特殊效果
if (selectedItem.specialEffect === 'freeze') {
// 冰冻效果:降低移动速度
return {
...enemy,
health: Math.max(0, enemy.health - damage),
isFrozen: true,
freezeTimer: 60, // 冰冻60帧(约1秒)
speedMultiplier: 0.3, // 速度降至30%
};
} else if (selectedItem.specialEffect === 'burn') {
// 灼烧效果:累积灼烧伤害
return {
...enemy,
health: Math.max(0, enemy.health - damage),
isBurning: true,
burnTimer: 120, // 灼烧120帧(约2秒)
burnDamage: (enemy.burnDamage || 0) + damage * 0.3, // 灼烧伤害为30%
};
} else if (selectedItem.specialEffect === 'chain') {
// 雷霆链击:击中多个敌人
// 已有实现,需要验证
} else if (selectedItem.specialEffect === 'holy') {
// 光明回血:每次攻击恢复5 HP
setPlayerHp(prev => Math.min(playerMaxHp, prev + 5));
return { ...enemy, health: Math.max(0, enemy.health - damage) };
}
}
```
---
### 方案3:飞剑选择界面
#### 3.1 飞剑选择界面UI设计
```
┌─────────────────────────────────────┐
│ 选择飞剑 │
│ │
│ ┌─────────────────────────────┐ │
│ │ ✅ 普通飞剑(已拥有) │ │
│ │ 🗡️ 基础符文 │ │
│ │ 基础伤害 │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ ✅ 烈火飞剑(已拥有)[NEW] │ │
│ │ 🔥 离火符文 │ │
│ │ 持续灼烧伤害 │ │
│ │ ← 推荐使用 │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ 🔒 冰霜飞剑(未解锁) │ │
│ │ ❄️ 坎水符文 │ │
│ │ 减速敌人 │ │
│ │ 解锁条件:通关第1章混沌 │ │
│ └─────────────────────────────┘ │
│ │
│ [开始战斗] │
└─────────────────────────────────────┘
```
#### 3.2 飞剑选择逻辑
```typescript
// 玩家已解锁的飞剑
const [unlockedSwords, setUnlockedSwords] = useState<string[]>(['normal']);
// 推荐的飞剑(根据关卡配置)
const recommendedSwordId = currentLevelConfig.recommendedItem;
// 判断飞剑是否解锁
const isSwordUnlocked = (swordId: string): boolean => {
return unlockedSwords.includes(swordId);
};
// 选择飞剑
const handleSelectSword = (swordId: string) => {
if (!isSwordUnlocked(swordId)) {
// 未解锁,显示提示
alert('此飞剑尚未解锁!');
return;
}
const sword = ITEMS.find(item => item.id === swordId);
if (sword) {
setSelectedItem(sword);
setShowItemSelect(false);
startGame();
}
};
```
---
### 方案4:符文显示系统
#### 4.1 战斗界面中的符文显示
```
┌─────────────────────────────────────┐
│ 当前符文 │
│ 🔥 离火符文(烈火飞剑) │
│ ☯️ 八卦定序符(定序破妄剑) │
└─────────────────────────────────────┘
```
#### 4.2 符文数据
```typescript
interface Rune {
id: string;
name: string;
icon: string;
description: string;
damageMultiplier: number;
}
// 飞剑符文(由飞剑提供)
const SWORD_RUNES: Record<string, Rune> = {
normal: {
id: 'normal',
name: '基础符文',
icon: '⚔️',
description: '基础伤害,无额外效果',
damageMultiplier: 1.0
},
fire: {
id: 'fire',
name: '离火符文',
icon: '🔥',
description: '灼烧敌人,持续伤害',
damageMultiplier: 1.5
},
// ...
};
// 关卡专属符文(由敌人提供)
const EXCLUSIVE_RUNES: Record<number, Rune> = {
0: {
id: 'chaos',
name: '八卦定序符',
icon: '☯️',
description: '伤害×1.5',
damageMultiplier: 1.5
},
1: {
id: 'qiongqi',
name: '辨忠符',
icon: '⚖️',
description: '伤害×1.5',
damageMultiplier: 1.5
},
// ...
};
```
---
## 📊 实施优先级建议
### 第一批(本周完成)
1. ✅ 创建器练剑专用角色配置(SwordStoryConfig.ts)
2. ✅ 集成StoryDialog组件到SwordPractice
3. ✅ 实现战斗前后剧情对话
4. ✅ 实现飞剑选择界面UI
5. ✅ 实现飞剑解锁逻辑
### 第二批(下周完成)
6. ✅ 完善飞剑特殊效果(灼烧、冰冻、链击、回血)
7. ✅ 实现符文显示系统
8. ✅ 测试所有飞剑效果
9. ✅ 完善剧情台词(12章)
---
## 🤔 需要确认的问题
1. **剧情对话触发时机**:
- 战斗前:显示剧情 → 飞剑选择 → 战斗
- 战斗后:战斗 → 显示剧情 → 奖励 → 返回
2. **飞剑解锁逻辑**:
- 第0关:默认解锁普通飞剑
- 第1章:通关后解锁烈火飞剑
- 第2章:通关后解锁冰霜飞剑
- 第3章:通关后解锁雷霆飞剑
- 第4章:通关后解锁光明飞剑
3. **飞剑推荐逻辑**:
- 根据关卡配置的recommendedItem字段
- 显示"推荐使用"标签
4. **是否需要飞剑解锁动画**:
- 简单版:直接显示"NEW"标签
- 复杂版:播放解锁动画

