Esempio n. 1
0
    def test_basic(self):
        """
        最も基本的なダメージ計算
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.MEGADRAIN])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17、回復16//2=8
        self.assertEqual(field.parties[0].get().hp, 152 - 17 + 8)
        # BULBASAUR -> CHARMANDER: ダメージ16
        self.assertEqual(field.parties[1].get().hp, 146 - 16)
Esempio n. 2
0
    def test_basic(self):
        """
        1対1、通常攻撃で倒れる、先攻勝ち
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.EARTHQUAKE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.MEGAKICK])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ56
        self.assertEqual(field.parties[0].get().hp, 152 - 56)
        # BULBASAUR -> CHARMANDER: ダメージ96
        self.assertEqual(field.parties[1].get().hp, 146 - 96)

        # 2ターン目でCHARMANDERが倒れる
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.GAME_END)
        self.assertEqual(field.winner, 0)
Esempio n. 3
0
    def test_basic(self):
        """
        はねるがなにもしないことをテスト
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.SPLASH])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.SPLASH])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
    def test_type_match(self):
        """
        タイプ相性が絡む場合
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.VINEWHIP])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.VINEWHIP])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ3 特殊技 不一致1/4
        self.assertEqual(field.parties[0].get().hp, 152 - 3)
        # BULBASAUR -> CHARMANDER: ダメージ14 一致1/2
        self.assertEqual(field.parties[1].get().hp, 146 - 14)
Esempio n. 5
0
    def test_basic(self):
        """
        追加効果でやけどになる。
        攻撃力が下がる。
        スリップダメージを受ける。
        ほのおタイプはやけどしない。
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR,
                                     [Move.TACKLE, Move.EMBER])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER,
                                     [Move.TACKLE, Move.EMBER])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=1)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ50、スリップダメージ152//16=9
        self.assertEqual(field.parties[0].get().hp, 152 - 50 - 9)
        # やけど
        # BULBASAUR -> CHARMANDER: ダメージ9(この時点で攻撃ダウン反映)
        self.assertEqual(field.parties[1].get().hp, 146 - 9)
        self.assertEqual(field.parties[0].get().nv_condition,
                         PokeNVCondition.BURN)
        self.assertEqual(field.parties[1].get().nv_condition,
                         PokeNVCondition.EMPTY)

        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=1),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17、スリップダメージ152//16=9
        self.assertEqual(field.parties[0].get().hp, 152 - 50 - 9 - 17 - 9)
        # BULBASAUR -> CHARMANDER: ダメージ11(特殊技は攻撃ダウンなし)
        self.assertEqual(field.parties[1].get().hp, 146 - 9 - 11)
        # やけどしない
        self.assertEqual(field.parties[0].get().nv_condition,
                         PokeNVCondition.BURN)
        self.assertEqual(field.parties[1].get().nv_condition,
                         PokeNVCondition.EMPTY)
Esempio n. 6
0
    def test_basic(self):
        """
        さいみんじゅつをかける。
        行動不能。
        目が覚めたターンも行動不能。
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.TACKLE, Move.HYPNOSIS])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE, Move.HYPNOSIS])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=1),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : 眠らせた 1回眠る、残り1回起きる
        self.assertEqual(field.parties[0].get().hp, 152)
        # BULBASAUR -> CHARMANDER: 行動不能1
        self.assertEqual(field.parties[1].get().hp, 146)
        self.assertEqual(field.parties[0].get().nv_condition, PokeNVCondition.SLEEP)
        self.assertEqual(field.parties[1].get().nv_condition, PokeNVCondition.EMPTY)

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : もう一度眠らせようとしても効果がなく、眠りターン数は伸びない
        self.assertEqual(field.parties[0].get().hp, 152)
        # BULBASAUR -> CHARMANDER: 行動不能2(起きたターン)
        self.assertEqual(field.parties[1].get().hp, 146)
        self.assertEqual(field.parties[0].get().nv_condition, PokeNVCondition.EMPTY)
        self.assertEqual(field.parties[1].get().nv_condition, PokeNVCondition.EMPTY)

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=0)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17)
        # BULBASAUR -> CHARMANDER: ダメージ18
        self.assertEqual(field.parties[1].get().hp, 146 - 18)
        self.assertEqual(field.parties[0].get().nv_condition, PokeNVCondition.EMPTY)
        self.assertEqual(field.parties[1].get().nv_condition, PokeNVCondition.EMPTY)
 def generate(self) -> Party:
     pokests = []
     dexnos = set()
     for lv in self.lvs:
         while True:
             dexno = random.choices(self.dexnos,
                                    weights=self.dexno_weights)[0]
             if dexno in dexnos:
                 continue
             ms = self.dexno_moves[dexno]
             if len(ms) <= 4:
                 moves = ms[:]
             else:
                 moves = []
                 mws = self.dexno_move_weights[dexno]
                 while len(moves) < 4:
                     move = random.choices(ms, weights=mws)[0]
                     if move not in moves:
                         moves.append(move)
             pokest = PokeStatic.create(dexno, moves, lv)
             pokests.append(pokest)
             dexnos.add(dexno)
             break
     random.shuffle(pokests)  # 先頭をLV55に固定しない
     return Party(pokests)
Esempio n. 8
0
    def test_basic(self):
        """
        反動の存在を確認
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.HYPERBEAM])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17)
        # BULBASAUR -> CHARMANDER: ダメージ72
        self.assertEqual(field.parties[1].get().hp, 146 - 72)

        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)
        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17 * 2)
        # BULBASAUR -> CHARMANDER: ダメージ0 (反動で動けない)
        self.assertEqual(field.parties[1].get().hp, 146 - 72 - 0)

        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)
        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17 * 3)
        # BULBASAUR -> CHARMANDER: ダメージ72
        self.assertEqual(field.parties[1].get().hp, 146 - 72 * 2)
Esempio n. 9
0
    def test_basic(self):
        """
        最も基本的なダメージ計算
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.BITE, Move.TACKLE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.BITE, Move.TACKLE])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=0)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ29
        self.assertEqual(field.parties[0].get().hp, 152 - 29)
        # 怯み発生
        # BULBASAUR -> CHARMANDER: ダメージ0
        self.assertEqual(field.parties[1].get().hp, 146)

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 29 - 17)
        # 怯みは解除済み
        # BULBASAUR -> CHARMANDER: ダメージ30
        self.assertEqual(field.parties[1].get().hp, 146 - 30)
        # 後攻でひるませるが次ターンに影響なし

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=1),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)
        # 怯みは解除済み
        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 29 - 17 - 17)
        # BULBASAUR -> CHARMANDER: ダメージ18
        self.assertEqual(field.parties[1].get().hp, 146 - 30 - 18)
Esempio n. 10
0
    def test_basic(self):
        """
        あなをほる
        1ターン目であなをほる状態になり、次でダメージを与える
        あなをほる状態では技が当たらない
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.BITE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.DIG])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        pk_b = field.parties[0].get()
        pk_c = field.parties[1].get()

        self.assertEqual(pk_b.hp, 152)
        self.assertEqual(pk_c.hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDERが先に動き、あなをほる状態になる
        self.assertEqual(pk_b.hp, 152)
        self.assertEqual(pk_c.hp, 146)
        self.assertEqual(pk_c.v_dig, True)

        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ46 相性相殺
        self.assertEqual(pk_b.hp, 152 - 46)
        # BULBASAUR -> CHARMANDER: ダメージ30
        self.assertEqual(pk_c.hp, 146 - 30)
        self.assertEqual(pk_c.v_dig, False)
Esempio n. 11
0
    def test_basic(self):
        """
        かまいたち
        1ターン目は何もせず、次でダメージを与える
        あなをほると違い、敵の攻撃が当たる
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.BITE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.RAZORWIND])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        pk_b = field.parties[0].get()
        pk_c = field.parties[1].get()

        self.assertEqual(pk_b.hp, 152)
        self.assertEqual(pk_c.hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDERが先に動き、ためる
        self.assertEqual(pk_b.hp, 152)
        # BULBASAUR -> CHARMANDER: ダメージ30
        self.assertEqual(pk_c.hp, 146 - 30)

        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ38
        self.assertEqual(pk_b.hp, 152 - 38)
        # BULBASAUR -> CHARMANDER: ダメージ30
        self.assertEqual(pk_c.hp, 146 - 30 * 2)
Esempio n. 12
0
    def test_basic(self):
        """
        追加効果でどくになる。
        スリップダメージを受ける。
        どくタイプはやけどしない。
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.TACKLE, Move.SLUDGE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE, Move.SLUDGE])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=1),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ31
        self.assertEqual(field.parties[0].get().hp, 152 - 31)
        # どくにならない
        # BULBASAUR -> CHARMANDER: ダメージ48、まだスリップダメージなし
        self.assertEqual(field.parties[1].get().hp, 146 - 48)
        # どくになる
        self.assertEqual(field.parties[0].get().nv_condition, PokeNVCondition.EMPTY)
        self.assertEqual(field.parties[1].get().nv_condition, PokeNVCondition.POISON)

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=0)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 31 - 17)
        # BULBASAUR -> CHARMANDER: ダメージ18、スリップダメージ146//16=9
        self.assertEqual(field.parties[1].get().hp, 146 - 48 - 18 - 9)
        self.assertEqual(field.parties[0].get().nv_condition, PokeNVCondition.EMPTY)
        self.assertEqual(field.parties[1].get().nv_condition, PokeNVCondition.POISON)
Esempio n. 13
0
    def test_basic(self):
        """
        最も基本的なダメージ計算
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.TACKLE])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17)
        # BULBASAUR -> CHARMANDER: ダメージ18
        self.assertEqual(field.parties[1].get().hp, 146 - 18)

        # 急所
        rng.enqueue_const(1, GameRNGReason.CRITICAL, 0)
        field.actions_begin = [
            FieldAction(FieldActionType.MOVE, move_idx=0),
            FieldAction(FieldActionType.MOVE, move_idx=0)
        ]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ32(急所)
        self.assertEqual(field.parties[0].get().hp, 152 - 17 - 32)
        # BULBASAUR -> CHARMANDER: ダメージ18
        self.assertEqual(field.parties[1].get().hp, 146 - 18 * 2)
Esempio n. 14
0
    def test_basic(self):
        """
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        poke_atk = PokeStatic.create(Dexno.BULBASAUR, [Move.LEECHSEED])
        # H:146,A:104,B:95,C:102,S:117
        poke_def = PokeStatic.create(Dexno.CHARMANDER, [Move.TACKLE, Move.LEECHSEED])
        field = Field([Party([poke_atk]), Party([poke_def])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 146)
        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=0)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ17
        self.assertEqual(field.parties[0].get().hp, 152 - 17)
        # BULBASAUR -> CHARMANDER: ダメージなし
        self.assertEqual(field.parties[1].get().hp, 146)
        # 後攻でやどりぎしているのでまだこのターンダメージなし
        self.assertFalse(field.parties[0].get().v_leechseed)
        self.assertTrue(field.parties[1].get().v_leechseed)

        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=1)]
        self.assertEqual(field.step(), FieldPhase.BEGIN)

        # CHARMANDER -> BULBASAUR : ダメージ0、やどりぎ回復146//16=9
        self.assertEqual(field.parties[0].get().hp, 152 - 17 + 9)
        # BULBASAUR -> CHARMANDER: ダメージなし
        self.assertEqual(field.parties[1].get().hp, 146 - 9)
        # 草タイプにはきかない
        self.assertFalse(field.parties[0].get().v_leechseed)
        self.assertTrue(field.parties[1].get().v_leechseed)
Esempio n. 15
0
 def _generate_poke(self, lv: int,
                    exclude_dexnos: Set[Dexno]) -> PokeStatic:
     while True:
         dexno = random.choice(list(Dexno))
         if dexno in exclude_dexnos:
             continue
         learnable_moves = self.db.get_leanable_moves(dexno, lv)
         if len(learnable_moves) == 0:
             continue
         moves = random.sample(learnable_moves, min(4,
                                                    len(learnable_moves)))
         pokest = PokeStatic.create(dexno, moves, lv)
         return pokest
Esempio n. 16
0
    def test_faint_change(self):
        """
        瀕死状態での交代
        :return:
        """

        # H:152,A:101,B:101,C:117,S:97
        pokest_0_0 = PokeStatic.create(Dexno.BULBASAUR, [Move.TACKLE, Move.SWORDSDANCE])
        # H:162,A:102,B:97,C:187,S:172
        pokest_0_1 = PokeStatic.create(Dexno.ALAKAZAM, [Move.WATERGUN, Move.ROCKTHROW])
        # H:185,A:136,B:130,C:137,S:152
        pokest_1_0 = PokeStatic.create(Dexno.CHARIZARD, [Move.FIREBLAST, Move.CONFUSERAY, Move.EARTHQUAKE])
        # H:267,A:162,B:117,C:117,S:82
        # カビゴン
        pokest_1_1 = PokeStatic.create(Dexno.SNORLAX, [Move.BODYSLAM])
        field = Field([Party([pokest_0_0, pokest_0_1]), Party([pokest_1_0, pokest_1_1])])
        rng = GameRNGFixed()
        field.rng = rng
        field.rng.set_field(field)

        self.assertEqual(field.parties[0].get().hp, 152)
        self.assertEqual(field.parties[1].get().hp, 185)
        field.actions_begin = [FieldAction(FieldActionType.MOVE, move_idx=0),
                               FieldAction(FieldActionType.MOVE, move_idx=0)]
        self.assertEqual(field.step(), FieldPhase.FAINT_CHANGE)

        # CHARIZARD -> BULBASAUR : ダメージ188
        self.assertEqual(field.parties[0].get().hp, 0)
        # BULBASAUR -> CHARMANDER: 攻撃機会なし
        self.assertEqual(field.parties[1].get().hp, 185)

        field.actions_faint_change = [FieldAction(FieldActionType.FAINT_CHANGE, faint_change_idx=1),
                                      None]
        self.assertEqual(field.step(), FieldPhase.BEGIN)
        self.assertEqual(field.parties[0].get().hp, 162)
        self.assertEqual(field.parties[1].get().hp, 185)