File size: 2,786 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from engine.game.game_state import GameState
from engine.models.opcodes import Opcode


def test_recover_live_opcode():
    state = GameState()
    p = state.players[0]
    p.discard = [100, 1001, 200]  # Member, Live, Member

    # RECOVER_LIVE (v=1)
    seg = [Opcode.RECOVER_LIVE, 1, 0, 0]
    state._resolve_effect_opcode(Opcode.RECOVER_LIVE, seg, {})

    assert 1001 in p.hand
    assert 1001 not in p.discard
    assert len(p.discard) == 2


def test_recover_member_opcode():
    state = GameState()
    p = state.players[0]
    p.discard = [100, 1001, 201]  # Member, Live, Member

    # RECOVER_MEMBER (v=1)
    seg = [Opcode.RECOVER_MEMBER, 1, 0, 0]
    state._resolve_effect_opcode(Opcode.RECOVER_MEMBER, seg, {})

    assert 201 in p.hand
    assert 201 not in p.discard
    assert len(p.discard) == 2


def test_swap_cards_opcode():
    state = GameState()
    p = state.players[0]
    p.hand = [1, 2, 3]
    p.hand_added_turn = [0, 0, 0]
    p.main_deck = [4, 5, 6]

    # SWAP_CARDS (v=2)
    seg = [Opcode.SWAP_CARDS, 2, 0, 0]
    state._resolve_effect_opcode(Opcode.SWAP_CARDS, seg, {})

    assert len(p.hand) == 3
    assert 1 not in p.hand
    assert 2 not in p.hand
    assert 4 in p.hand
    assert 5 in p.hand
    assert len(p.discard) == 2


def test_add_to_hand_deck_opcode():
    state = GameState()
    p = state.players[0]
    p.main_deck = [10, 11]

    # ADD_TO_HAND (v=1, a=2)
    seg = [Opcode.ADD_TO_HAND, 1, 2, 0]
    state.current_player = 0
    state._resolve_effect_opcode(Opcode.ADD_TO_HAND, seg, {})

    p0 = state.players[0]
    print(f"DEBUG: Player 0 Hand: {p0.hand}")
    print(f"DEBUG: Player 0 Deck: {p0.main_deck}")
    assert 10 in p0.hand
    assert len(p0.main_deck) == 1


def test_flavor_action_and_modal_answer():
    state = GameState()

    # FLAVOR_ACTION (Opcode)
    seg = [Opcode.FLAVOR_ACTION, 0, 0, 0]
    state._resolve_effect_opcode(Opcode.FLAVOR_ACTION, seg, {})

    assert len(state.pending_choices) == 1
    choice_type, params = state.pending_choices[0]
    assert choice_type == "MODAL_CHOICE"
    assert params["title"] == "何が好き?"

    # Opponent answers choice 1 (Singing)
    # MODAL_CHOICE actions start at 800
    state._handle_choice(801)

    assert state.last_choice_answer == 1

    # CHECK_MODAL_ANSWER (v=1)
    seg_cond = [Opcode.CHECK_MODAL_ANSWER, 1, 0, 4]  # v=1, comp=EQ (4)
    res = state._resolve_condition_opcode(Opcode.CHECK_MODAL_ANSWER, seg_cond, {})
    assert res is True

    # CHECK_MODAL_ANSWER (v=2)
    seg_cond2 = [Opcode.CHECK_MODAL_ANSWER, 2, 0, 4]  # v=2, comp=EQ (4)
    res2 = state._resolve_condition_opcode(Opcode.CHECK_MODAL_ANSWER, seg_cond2, {})
    assert res2 is False