Spaces:
Sleeping
Sleeping
新しいオペコードのテスト計画
概要
BP05シリーズで追加された新しいアビリティに対応するため、7つの新しいオペコードと4つの新しい条件を追加しました。このドキュメントでは、各オペコードの仕様と、それを使用するカードのアビリティテキストに基づいたテストケースを定義します。
新しいオペコード一覧
| オペコード | ID | 説明 |
|---|---|---|
| LOOK_DECK_DYNAMIC | 91 | ライブスコアに基づいてデッキを見る |
| REDUCE_SCORE | 92 | ライブスコアを減らす |
| REPEAT_ABILITY | 93 | アビリティを繰り返す |
| LOSE_EXCESS_HEARTS | 94 | 余剰ハートを失う |
| SKIP_ACTIVATE_PHASE | 95 | アクティブフェーズをスキップ |
| PAY_ENERGY_DYNAMIC | 96 | カードスコアに基づいてエネルギーを支払う |
| PLACE_ENERGY_UNDER_MEMBER | 97 | エネルギーをメンバーの下に配置 |
新しい条件一覧
| 条件 | ID | 説明 |
|---|---|---|
| COUNT_ENERGY_EXACT | 301 | エネルギーの正確な数をチェック |
| COUNT_BLADE_HEART_TYPES | 302 | ブレード/ハートタイプをカウント |
| OPPONENT_HAS_EXCESS_HEART | 303 | 相手が余剰ハートを持つかチェック |
| SCORE_TOTAL_CHECK | 304 | 合計スコアをチェック |
テストケース
1. LOOK_DECK_DYNAMIC (91)
カード例: PL!-bp5-001-AR 元のテキスト:
ライブ成功時、手札を1枚控え室に置いてもよい:自分のデッキの上から、自分のライブの合計スコアに2を足した数に等しい枚数見る。その中からカードを1枚手札に加える。残りを控え室に置く。
現在のコンパイル状態: effect_type: 29 (META_RULE)
期待される動作:
- ライブ成功時にトリガー
- オプションコスト: 手札を1枚捨てる
- ライブの合計スコア + 2枚のカードをデッキの上から見る
- その中から1枚を手札に加える
- 残りを控え室に置く
テストシナリオ:
GIVEN: ライブスコアが5の状態
WHEN: アビリティが発動
THEN: デッキの上から7枚(5+2)を見る
AND: 1枚を選んで手札に加える
AND: 残り6枚を控え室に置く
Rustテストコード:
#[test]
fn test_opcode_look_deck_dynamic_score() {
let mut state = create_test_state();
// Setup: ライブスコア5、デッキに10枚以上
state.core.players[0].live_score = 5;
// ... デッキのセットアップ
// Execute: LOOK_DECK_DYNAMIC(2)を実行
// 期待: 7枚を見る
// Assert: looked_cardsに7枚が含まれる
assert_eq!(state.core.players[0].looked_cards.len(), 7);
}
2. REDUCE_SCORE (92)
説明: ライブスコアを減少させる効果
期待される動作:
- 指定された値だけライブスコアを減らす
- スコアは0以下にならない
テストシナリオ:
GIVEN: ライブスコアが10の状態
WHEN: REDUCE_SCORE(3)を実行
THEN: ライブスコアが7になる
Rustテストコード:
#[test]
fn test_opcode_reduce_score() {
let mut state = create_test_state();
state.core.players[0].live_score = 10;
// Execute: REDUCE_SCORE(3)
// 期待: live_score = 7
assert_eq!(state.core.players[0].live_score, 7);
}
3. REPEAT_ABILITY (93)
説明: アビリティを指定回数繰り返す
期待される動作:
- 現在のアビリティを指定回数実行する
- 繰り返し回数は動的に計算可能
テストシナリオ:
GIVEN: アビリティが「1枚引く」
WHEN: REPEAT_ABILITY(2)を実行
THEN: 2枚引く
4. LOSE_EXCESS_HEARTS (94)
説明: 余剰ハートを失う効果
期待される動作:
- 必要ハート数を超えているハートを失う
- ライブ成功条件に影響する可能性がある
テストシナリオ:
GIVEN: 必要ハートが[1,0,1,0,7,1,0]、現在のハートが[2,1,2,0,8,2,1]
WHEN: LOSE_EXCESS_HEARTSを実行
THEN: ハートが[1,0,1,0,7,1,0]になる(余剰分を失う)
5. SKIP_ACTIVATE_PHASE (95)
説明: アクティブフェーズをスキップする
期待される動作:
- プレイヤーのアクティブフェーズをスキップ
- 次のフェーズに進む
テストシナリオ:
GIVEN: アクティブフェーズ
WHEN: SKIP_ACTIVATE_PHASEを実行
THEN: アクティブフェーズがスキップされる
6. PAY_ENERGY_DYNAMIC (96)
説明: カードのスコアに基づいてエネルギーを支払う
期待される動作:
- カードのスコア分のエネルギーを支払う
- 動的なコスト計算
テストシナリオ:
GIVEN: エネルギーゾーンに5枚、カードスコアが3
WHEN: PAY_ENERGY_DYNAMICを実行
THEN: エネルギーを3枚支払う
7. PLACE_ENERGY_UNDER_MEMBER (97)
説明: エネルギーをメンバーの下に配置
期待される動作:
- エネルギーカードをメンバーの下に移動
- 特殊な状態管理が必要
テストシナリオ:
GIVEN: エネルギーゾーンにカード、ステージにメンバー
WHEN: PLACE_ENERGY_UNDER_MEMBERを実行
THEN: エネルギーがメンバーの下に配置される
新しい条件のテスト
COUNT_ENERGY_EXACT (301)
テストシナリオ:
GIVEN: エネルギーゾーンに3枚
WHEN: COUNT_ENERGY_EXACT(3)を評価
THEN: true
WHEN: COUNT_ENERGY_EXACT(4)を評価
THEN: false
COUNT_BLADE_HEART_TYPES (302)
テストシナリオ:
GIVEN: メンバーが3種類のブレード/ハートを持つ
WHEN: COUNT_BLADE_HEART_TYPES(3)を評価
THEN: true
OPPONENT_HAS_EXCESS_HEART (303)
テストシナリオ:
GIVEN: 相手が余剰ハートを持つ
WHEN: OPPONENT_HAS_EXCESS_HEARTを評価
THEN: true
SCORE_TOTAL_CHECK (304)
テストシナリオ:
GIVEN: 合計スコアが10
WHEN: SCORE_TOTAL_CHECK(10)を評価
THEN: true
実装優先順位
- LOOK_DECK_DYNAMIC - 最も多くのカードで使用
- REDUCE_SCORE - スコア計算に重要
- PAY_ENERGY_DYNAMIC - エネルギーコスト管理
- LOSE_EXCESS_HEARTS - ライブメカニクス
- SKIP_ACTIVATE_PHASE - フェーズ管理
- REPEAT_ABILITY - 複雑な効果
- PLACE_ENERGY_UNDER_MEMBER - 特殊な状態管理
次のステップ
- CodeモードでRustエンジンにオペコードハンドラーを実装
- 各オペコードのテストを追加
- BP05カードをテストスイートに追加
- カードコンパイラを更新して新しいオペコードを使用