呆鸟修仙 第二阶段需求讨论,目标:实现5种飞剑和符文系统


 

image.png

---

## 🎯 第二阶段需求讨论

### 目标:实现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"标签
   - 复杂版:播放解锁动画
 

收藏

扫描二维码,在手机上阅读
文章目录


    呆鸟修仙 剧情对话打字机效果的字符丢失问题:

    呆鸟修仙角色表情

    评 论
    评论已关闭