class StateDungeonB1(BaseFieldState):
    '''
    地下迷宮B1のクラス\n
    BaseFieldStateを継承。
    '''
    # State名
    stateName = "DUNGEONB1"

    # マップ
    _map = dungeonB1.map

    # 出現するモンスターリスト
    enemy_set = (
        HumanGenerator.generate(2),
        HumanGenerator.generate(3),
        monsterParams["BAT_LV1"],
        monsterParams["BAT_LV1"],
        monsterParams["WOLF_LV1"],
        monsterParams["WOLF_LV1"],
        monsterParams["KOBOLD_LV1"],
        monsterParams["KOBOLD_LV1"],
        monsterParams["ZOMBIE_LV1"],
        monsterParams["ZOMBIE_LV1"],
        monsterParams["SKELETON_LV1"],
        monsterParams["SKELETON_LV1"],
        monsterParams["GOBLIN_LV1"],
        monsterParams["AZTEC_LV1"],
        monsterParams["LION_LV1"],
    )

    def __init__(self, **kwargs):
        '''
        クラス初期化
        '''
        super().__init__(**kwargs)

    @overrides
    def onEnter(self):
        '''
        状態開始時の処理
        '''
        super().onEnter()

        # 壁の色を初期化する
        self.set_wall_color(pyxel.COLOR_LIGHTBLUE, pyxel.COLOR_DARKBLUE)

    @overrides
    def onExit(self):
        '''
        状態終了時の処理
        '''
        super().onExit()
class StateColordPurple(BaseFieldState):
    '''
    カラー迷路(紫)のクラス\n
    BaseFieldStateを継承。
    '''
    # State名
    stateName = "COLORD_PURPLE"

    # マップ
    _map = colord_all.map

    # 出現するモンスターリスト
    enemy_set = (
        HumanGenerator.generate(5),
        HumanGenerator.generate(6),
        monsterParams["WIRKAT_LV2"],
        monsterParams["WIRKAT_LV2"],
        monsterParams["BEAST_LV1"],
        monsterParams["BEAST_LV1"],
        monsterParams["DEMON_LV2"],
        monsterParams["DEMON_LV2"],
        monsterParams["GHOST_LV1"],
        monsterParams["GHOST_LV1"],
        monsterParams["TROLL_LV1"],
        monsterParams["DEMON_LV2"],
        monsterParams["MIER_LV1"],
        monsterParams["MIER_LV2"],
    )

    def __init__(self, **kwargs):
        '''
        クラス初期化
        '''
        super().__init__(**kwargs)

    @overrides
    def onEnter(self):
        '''
        状態開始時の処理
        '''
        super().onEnter()

        # 壁の色を初期化する
        self.set_wall_color(pyxel.COLOR_PURPLE, pyxel.COLOR_PURPLE,
                            pyxel.COLOR_BLACK)

    @overrides
    def onExit(self):
        '''
        状態終了時の処理
        '''
        super().onExit()
예제 #3
0
class StateDungeonB4(BaseFieldState):
    '''
    地下迷宮B4のクラス\n
    BaseFieldStateを継承。
    '''
    # State名
    stateName = "DUNGEONB4"

    # マップ
    _map = dungeonB4.map

    # 出現するモンスターリスト
    enemy_set = (
        HumanGenerator.generate(5),
        HumanGenerator.generate(6),
        monsterParams["SLIME_LV2"],
        monsterParams["SPIDER_LV2"],
        monsterParams["GHOUL_LV2"],
        monsterParams["COBRA_LV2"],
        monsterParams["BLAAB_LV1"],
        monsterParams["VAMPIRE_LV2"],
        monsterParams["OGRE_LV1"],
        monsterParams["HOBGOBLIN_LV1"],
    )

    def __init__(self, **kwargs):
        '''
        クラス初期化
        '''
        super().__init__(**kwargs)

    @overrides
    def onEnter(self):
        '''
        状態開始時の処理
        '''
        super().onEnter()

        # 壁の色を初期化する
        self.set_wall_color(pyxel.COLOR_LIGHTBLUE, pyxel.COLOR_DARKBLUE)

    @overrides
    def onExit(self):
        '''
        状態終了時の処理
        '''
        super().onExit()
예제 #4
0
class StateCemetery(BaseFieldState):
    '''
    墓地の地下のクラス\n
    BaseFieldStateを継承。
    '''
    # State名
    stateName = "CEMETERY"

    # マップ
    _map = cemetery.map

    # 出現するモンスターリスト
    enemy_set = (
        HumanGenerator.generate(1),
        HumanGenerator.generate(2),
        monsterParams["WOLF_LV1"],
        monsterParams["BAT_LV1"],
        monsterParams["ZOMBIE_LV1"],
        monsterParams["SKELETON_LV1"],
    )

    def __init__(self, **kwargs):
        '''
        クラス初期化
        '''
        super().__init__(**kwargs)

    @overrides
    def onEnter(self):
        '''
        状態開始時の処理
        '''
        super().onEnter()

        # 壁の色を初期化する
        self.set_wall_color(pyxel.COLOR_RED, pyxel.COLOR_PURPLE)

    @overrides
    def onExit(self):
        '''
        状態終了時の処理
        '''
        super().onExit()
 def makeInitialHuman(self):
     '''
     人間キャラクタを作成する。\n
     能力値以外は初期値とする。
     '''
     self.character = HumanGenerator().generate(1)
     self.character.name = ""
     self.character.exp = 0
     self.character.weapon = None
     self.character.armor = None
     self.character.shield = None
     self.character.helmet = None
     self.character.body = 0
예제 #6
0
class StateCity(BaseFieldState):
    '''
    街のクラス\n
    BaseFieldStateを継承。
    '''
    # State名
    stateName = "CITY"

    # マップ
    _map = uturotown.map

    # 屋内にいると判定するための座標リスト
    # このStateクラスのisOuterメソッドで使用する特別な情報
    inner_list = (
        "0306",
        "0307",
        "0308",
        "0309",
        "0408",
        "0409",
        "0506",
        "0507",
        "0508",
        "0509",
        "0606",
        "0609",
        "0706",
        "0709",
        "0806",
        "0911",
        "0912",
        "0913",
        "1006",
        "1007",
        "1008",
        "1011",
        "1012",
        "1013",
        "1106",
        "1107",
        "1108",
        "1111",
        "1112",
        "1113",
        "1306",
        "1307",
        "1308",
        "1406",
        "1407",
        "1408",
        "1506",
        "1507",
        "1508",
        "1606",
        "1607",
        "1608",
        "1906",
        "1907",
        "1908",
        "2006",
        "2007",
        "2008",
        "2106",
        "2107",
        "2108",
        "2206",
        "2207",
        "2208",
        "2310",
        "2311",
    )

    # 出現するモンスターリスト
    enemy_set = (
        HumanGenerator.generate(1),
        HumanGenerator.generate(1),
        HumanGenerator.generate(1),
        HumanGenerator.generate(2),
        monsterParams["WOLF_LV1"],
        monsterParams["WOLF_LV1"],
        monsterParams["ZOMBIE_LV1"],
    )

    def __init__(self, **kwargs):
        '''
        クラス初期化
        '''
        super().__init__(**kwargs)

    @overrides
    def doEncounted(self) -> bool:
        '''
        エンカウントしたかを返却する\n
        '''
        if random.randint(0, 32) == 0:
            return True
        else:
            return False

    @overrides
    def encount_enemy(self, monsterName: str = ""):
        '''
        敵とエンカウントした時の処理\n
        街の場合、南側に行くとモンスターも出現する。
        '''
        self.isEncount = True
        self.tick = 0
        pyxel.play(3, 1, loop=False)

        if monsterName == "":
            if playerParty.y < 16:
                enemyParty.generate(self.enemy_set[random.randint(0, 3)])
            else:
                enemyParty.generate(self.enemy_set[random.randint(
                    0,
                    len(self.enemy_set) - 1)])
        else:
            enemyParty.generate(monsterParams[monsterName])

    def draw_gate(self):
        '''
        ゲートの表示
        '''
        for _x in range(12, 66, 4):
            pyxel.rect(_x + self.DRAW_OFFSET_X, 12 + self.DRAW_OFFSET_Y, 2, 54,
                       pyxel.COLOR_BLACK)
        pyxel.rect(32 + self.DRAW_OFFSET_X, 29 + self.DRAW_OFFSET_Y, 18, 9,
                   pyxel.COLOR_YELLOW)
        PyxelUtil.text(33 + self.DRAW_OFFSET_X, 30 + self.DRAW_OFFSET_Y,
                       "*GATE", pyxel.COLOR_BLACK)

    def draw_shieldshop(self):
        '''
        盾屋の前に立った時の表示
        '''
        PyxelUtil.text(30 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*SHIELD", pyxel.COLOR_BLACK)

    def draw_armorshop(self):
        '''
        鎧屋の前に立った時の表示
        '''
        PyxelUtil.text(32 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*ARMOR", pyxel.COLOR_BLACK)

    def draw_weaponshop(self):
        '''
        武器屋の前に立った時の表示
        '''
        PyxelUtil.text(30 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*WEAPON", pyxel.COLOR_BLACK)

    def draw_helmetshop(self):
        '''
        兜屋の前に立った時の表示
        '''
        PyxelUtil.text(30 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*HELMET", pyxel.COLOR_BLACK)

    def draw_barbar(self):
        '''
        床屋の前に立った時の表示
        '''
        PyxelUtil.text(30 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*BARBAR", pyxel.COLOR_BLACK)

    def draw_donotenter(self):
        '''
        "DO NOT ENTER!"のメッセージ
        '''
        PyxelUtil.text(162, 112, "*DO NOT ENTER !", pyxel.COLOR_RED)
        pyxel.blt(136, 108, 2, 112, 16, 16, 16, 0)
        pyxel.blt(224, 108, 2, 112, 16, 16, 16, 0)

    def draw_inn(self):
        '''
        宿屋の前に立った時の表示
        '''
        PyxelUtil.text(22 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*UTSURO INN", pyxel.COLOR_BLACK)

    def draw_physicker(self):
        '''
        研究所の前に立った時の表示
        '''
        PyxelUtil.text(24 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*PHYSICKER", pyxel.COLOR_BLACK)

    def draw_physicker_exit(self):
        '''
        研究所の出口の前に立った時の表示
        '''
        PyxelUtil.text(34 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*EXIT", pyxel.COLOR_BLACK)

    def draw_drugs(self):
        '''
        薬屋の前に立った時の表示
        '''
        PyxelUtil.text(32 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*DRUGS", pyxel.COLOR_BLACK)

    def draw_surgery(self):
        '''
        緊急治療の前に立った時の表示
        '''
        PyxelUtil.text(28 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*SURGERY", pyxel.COLOR_BLACK)

    def draw_examinations(self):
        '''
        身体検査の前に立った時の表示
        '''
        PyxelUtil.text(18 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*EXAMINATIONS", pyxel.COLOR_BLACK)

    def draw_thewall(self):
        '''
        謎の壁の表示
        '''
        PyxelUtil.text(177, 112, "*THE WALL", pyxel.COLOR_WHITE)

    def draw_jail(self):
        '''
        牢屋の前に立った時の表示
        '''
        PyxelUtil.text(32 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*JAIL", pyxel.COLOR_BLACK)

    def draw_directionmarket(self):
        '''
        MARKETへの看板の表示
        '''
        if playerParty.direction == Direction.NORTH:
            PyxelUtil.text(166, 112, ["*   MARKET ->"], pyxel.COLOR_WHITE)
        else:
            PyxelUtil.text(166, 112, ["*<- MARKET"], pyxel.COLOR_WHITE)

    def draw_cemetery(self):
        '''
        墓地への看板の表示
        '''
        PyxelUtil.text(16 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*+ CEMETERY +", pyxel.COLOR_BLACK)

    def draw_temple(self):
        '''
        寺院への看板の表示
        '''
        PyxelUtil.text(30 + self.DRAW_OFFSET_X, 22 + self.DRAW_OFFSET_Y,
                       "*TEMPLE", pyxel.COLOR_BLACK)

    @overrides
    def onEnter(self):
        '''
        状態開始時の処理
        '''
        super().onEnter()

    @overrides
    def onExit(self):
        '''
        状態終了時の処理
        '''
        super().onExit()

    @overrides
    def isOuter(self) -> bool:
        '''
        屋外かどうかをboolで返却する

        プレイヤーパーティーの座標から、屋内にいると判定するための座標リストを検索し、
        ヒットした場合はFalse、ヒットしなかった場合はTrueを返却する。
        '''
        s = f'{playerParty.x:02}{playerParty.y:02}'
        for v in self.inner_list:
            if s == v:
                return False
        return True
예제 #7
0
    def __init__(self):
        '''
        クラス初期化
        '''
        # コマンドライン引数取得
        args = sys.argv
        print(len(args))
        print(args)
        if len(args) != 7:
            args = ["", "HIDER_LV1", "6", "6", "5", "2", "1"]

        # StateStackの初期化
        stateStack.clear()

        # Pyxel初期化
        pyxel.init(256, 192)
        pyxel.load("../source/assets/onyxofblack.pyxres")

        # プレイヤーパーティ生成
        playerParty.initialize()

        level = int(args[2])

        for idx in range(5):
            member = HumanGenerator.generate(level)
            member.isPlayer = True
            # 装備の指定
            member.weapon = weaponParams[int(
                args[3])] if args[3] != "" else None
            member.armor = armorParams[int(args[4])] if args[4] != "" else None
            member.shield = shieldParams[int(
                args[5])] if args[5] != "" else None
            member.helmet = helmetParams[int(
                args[6])] if args[6] != "" else None

            _log = member.name
            _log += " level=" + str(member.level)
            _log += " life=" + str(member.life)
            _log += " str=" + str(member.strength)
            _log += "+" + \
                str(member.weapon.attack if member.weapon != None else 0)
            _log += " def=" + str(member.defend)
            _log += "+" + \
                str(member.armor.armor if member.armor != None else 0)
            _log += "+" + \
                str(member.shield.armor if member.shield != None else 0)
            _log += "+" + \
                str(member.helmet.armor if member.helmet != None else 0)
            _log += " dex=" + str(member.dexterity)
            _log += " weapon="
            _log += member.weapon.name if member.weapon != None else "None"
            _log += " armor="
            _log += member.armor.name if member.armor != None else "None"
            _log += " shield="
            _log += member.shield.name if member.shield != None else "None"
            _log += " helm="
            _log += member.helmet.name if member.helmet != None else "None"
            print(_log)
            playerParty.addMember(member)

        # 敵パーティー生成
        enemyParty.generate(monsterParams[args[1]])
        for value in enemyParty.memberList:
            print(value)

        # BattleStateをstateStackに登録
        stateStack.push(State.BATTLE)

        pyxel.run(self.update, self.draw)