From 363ba39cad7cd7925b1ab9b3a1ad3c5b8e8a9f2d Mon Sep 17 00:00:00 2001 From: claude-code-best Date: Wed, 22 Apr 2026 04:40:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B6=88=E9=99=A4=20engine.ts=20?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=20break=20=E5=92=8C=20evolution.test.ts=20?= =?UTF-8?q?=E7=9A=84=20as=20any?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - engine.ts: 移除 switch case 中多余的 break 语句 - evolution.test.ts: 用完整 Creature 对象替代 as any 类型转换 Co-Authored-By: Claude Opus 4.6 --- .../pokemon/src/__tests__/evolution.test.ts | 53 +++++++++++++++---- packages/pokemon/src/battle/engine.ts | 1 - 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/packages/pokemon/src/__tests__/evolution.test.ts b/packages/pokemon/src/__tests__/evolution.test.ts index 6e7e61556..49525d8fd 100644 --- a/packages/pokemon/src/__tests__/evolution.test.ts +++ b/packages/pokemon/src/__tests__/evolution.test.ts @@ -1,14 +1,41 @@ import { describe, test, expect } from 'bun:test' +import type { Creature } from '../types' import { checkEvolution, evolve, canEvolveFurther } from '../core/evolution' +function makeEvolutionCreature(overrides: Partial = {}): Creature { + return { + id: 'test-evo', + speciesId: overrides.speciesId ?? 'bulbasaur', + gender: 'male', + level: overrides.level ?? 50, + xp: 0, + totalXp: 0, + nature: 'hardy', + ev: { hp: 0, attack: 0, defense: 0, spAtk: 0, spDef: 0, speed: 0 }, + iv: { hp: 31, attack: 31, defense: 31, spAtk: 31, spDef: 31, speed: 31 }, + moves: [ + { id: 'tackle', pp: 35, maxPp: 35 }, + { id: 'growl', pp: 40, maxPp: 40 }, + { id: 'vinewhip', pp: 15, maxPp: 15 }, + { id: 'razorleaf', pp: 10, maxPp: 10 }, + ], + ability: 'overgrow', + heldItem: null, + friendship: overrides.friendship ?? 70, + isShiny: false, + hatchedAt: Date.now(), + pokeball: 'pokeball', + } +} + describe('checkEvolution', () => { test('bulbasaur at level 15 cannot evolve', () => { - const creature = { speciesId: 'bulbasaur' as const, level: 15, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 15 }) expect(checkEvolution(creature)).toBeNull() }) test('bulbasaur at level 16 can evolve into ivysaur', () => { - const creature = { speciesId: 'bulbasaur' as const, level: 16, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 16 }) const result = checkEvolution(creature) expect(result).not.toBeNull() expect(result!.from).toBe('bulbasaur') @@ -16,41 +43,41 @@ describe('checkEvolution', () => { }) test('charmander at level 16 evolves into charmeleon', () => { - const creature = { speciesId: 'charmander' as const, level: 16, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'charmander', level: 16 }) const result = checkEvolution(creature) expect(result!.to).toBe('charmeleon') }) test('charmeleon at level 36 evolves into charizard', () => { - const creature = { speciesId: 'charmeleon' as const, level: 36, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'charmeleon', level: 36 }) const result = checkEvolution(creature) expect(result!.to).toBe('charizard') }) test('squirtle at level 16 evolves into wartortle', () => { - const creature = { speciesId: 'squirtle' as const, level: 16, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'squirtle', level: 16 }) const result = checkEvolution(creature) expect(result!.to).toBe('wartortle') }) test('wartortle at level 36 evolves into blastoise', () => { - const creature = { speciesId: 'wartortle' as const, level: 36, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'wartortle', level: 36 }) const result = checkEvolution(creature) expect(result!.to).toBe('blastoise') }) test('venusaur cannot evolve further', () => { - const creature = { speciesId: 'venusaur' as const, level: 50, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'venusaur', level: 50 }) expect(checkEvolution(creature)).toBeNull() }) test('pikachu cannot evolve in MVP', () => { - const creature = { speciesId: 'pikachu' as const, level: 50, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'pikachu', level: 50 }) expect(checkEvolution(creature)).toBeNull() }) test('level 100 bulbasaur can still evolve (level >= minLevel)', () => { - const creature = { speciesId: 'bulbasaur' as const, level: 100, friendship: 70 } as any + const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 100 }) const result = checkEvolution(creature) expect(result).not.toBeNull() expect(result!.to).toBe('ivysaur') @@ -59,11 +86,17 @@ describe('checkEvolution', () => { describe('evolve', () => { test('changes species and boosts friendship', () => { - const creature = { speciesId: 'bulbasaur' as const, friendship: 70, level: 16 } as any + const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', friendship: 70, level: 16 }) const evolved = evolve(creature, 'ivysaur') expect(evolved.speciesId).toBe('ivysaur') expect(evolved.friendship).toBe(80) // +10 friendship on evolution }) + + test('friendship is capped at 255', () => { + const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', friendship: 250, level: 16 }) + const evolved = evolve(creature, 'ivysaur') + expect(evolved.friendship).toBe(255) + }) }) describe('canEvolveFurther', () => { diff --git a/packages/pokemon/src/battle/engine.ts b/packages/pokemon/src/battle/engine.ts index 15ba5f260..bf8f84685 100644 --- a/packages/pokemon/src/battle/engine.ts +++ b/packages/pokemon/src/battle/engine.ts @@ -242,7 +242,6 @@ export function executeTurn( p1Choice = switchIdx >= 0 ? `switch ${switchIdx + 1}` : 'move 1' break } - break case 'item': p1Choice = 'move 1' // Items handled via settlement break