Spaces:
Running
Running
File size: 2,332 Bytes
bb3fbf9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import numpy as np
from engine.game.game_state import GameState, MemberCard, Phase
from engine.models.ability import Ability, AbilityCostType, Cost, TriggerType
def test_activated_ability():
print("Testing Activated Ability and Targeting...")
state = GameState()
# Setup card with activated ability: "Discard 1 card from hand"
ability = Ability(
raw_text="起動: 手札を1枚捨てる",
trigger=TriggerType.ACTIVATED,
costs=[Cost(AbilityCostType.DISCARD_HAND, 1)],
effects=[], # No effect for this test, just cost payment
)
# Mock Member
card = MemberCard(
card_id=1,
card_no="TEST-01",
name="TestCard",
cost=1,
hearts=np.zeros(6),
blade_hearts=np.zeros(7),
blades=1,
abilities=[ability],
)
GameState.member_db = {1: card}
p0 = state.players[0]
p0.stage[0] = 1 # Card on stage
# Give hand cards to pay cost
p0.hand = [101, 102]
# Add dummy 101/102
GameState.member_db[101] = MemberCard(101, "D-01", "Dummy", 1, np.zeros(6), np.zeros(7), 1)
GameState.member_db[102] = MemberCard(102, "D-02", "Dummy", 1, np.zeros(6), np.zeros(7), 1)
# Add dummy card to main deck to prevent auto-refresh IndexError
p0.main_deck = [999]
GameState.member_db[999] = MemberCard(999, "D-99", "DeckDummy", 1, np.zeros(6), np.zeros(7), 1)
state.phase = Phase.MAIN
# 1. Activate Ability
# Action ID for activating ability of member at slot 0: 200 + 0 = 200
legal = state.get_legal_actions()
assert legal[200], f"Action 200 should be legal. Legal actions: {[i for i, x in enumerate(legal) if x]}"
state = state.step(200)
p0 = state.players[0]
# 2. Should Trigger Cost Payment (Target Hand)
assert len(state.pending_choices) > 0, "Should have pending choice for cost"
choice = state.pending_choices[0]
assert choice[0] == "TARGET_HAND"
# 3. Select card to discard
# TARGET_HAND actions: 500 + index
# Discard first card (index 0) -> Action 500
state = state.step(500)
p0 = state.players[0]
# 4. Verify Discard
assert 101 in p0.discard, "Card 101 should be discarded"
assert len(p0.hand) == 1, "Hand size should decr to 1"
|