Files
d-crawler/src/elironwars/app.py
T
2026-07-19 18:42:07 +02:00

94 lines
2.8 KiB
Python

import argparse
import logging
import os
import sys
from .console import UI
from .level import Level
from .menu import Action
from .mob import BaseMob, load_character
logger = logging.getLogger(__name__)
def play_room(room: list[BaseMob], level: Level) -> int:
if room is None:
logger.info('Empty room')
UI.empty_room()
return 1
for mob in room:
logger.info('Meet mob %s', mob.name)
UI.meet_mob(mob)
match UI.action_menu([Action.COMBAT, Action.FUIR]):
case Action.COMBAT:
pvs = level.combat(mob, level.player)
UI.fight_pvs(level.player, mob, pvs)
if level.player.current_pv <= 0:
UI.player_dead()
sys.exit(0)
if mob.current_pv == 0:
UI.mob_dead(mob)
case Action.FUIR:
UI.run_away()
return 0
return 1
def play_donjon(level: Level) -> None:
while level.exit_level:
UI.entering_room(level.current_room_index)
match UI.action_menu([Action.PIECE_SUIVANTE, Action.QUITTER]):
case Action.PIECE_SUIVANTE:
if level.current_room_index >= len(level.rooms):
logger.info('Exiting last room')
UI.last_room()
break
logger.info('Entering next room')
level.current_room_index += play_room(level.rooms[level.current_room_index], level)
level.player.current_pv = level.player.max_pv
case Action.QUITTER:
level.exit_level = False
logger.info('Leaving game')
UI.leave(level.player)
def app() -> None:
parser = argparse.ArgumentParser(
prog='elironwars',
description='elironwars CLI',
)
parser.add_argument('--player', default='Jamin')
parser.add_argument('--ui', default='cli')
parser.add_argument('--log-level', default='ERROR')
args = parser.parse_args()
os.makedirs('logs', exist_ok=True)
logging.basicConfig(filename='logs/app.log', level=logging.getLevelName(args.log_level))
logging.info('start')
loaded_character = load_character(args.player)
if not loaded_character:
sys.exit(-1)
UI.select_player(loaded_character)
# Créer des instances de BaseMob
yanaar = BaseMob("Yanaar", 15, 2, 1, 3, 2)
ulnarain = BaseMob("Ulnarain", 20, 3, 3, 2, 2)
skroll = BaseMob("Skroll", 25, 5, 3, 1, 2)
# Liste d'instances de BaseMob (au lieu d'un ensemble pour autoriser des doublons)
mobs_list = [yanaar, skroll, ulnarain]
level = Level(2, loaded_character, mobs_list)
UI.entering_donjon(level)
play_donjon(level)
# Exemple d'utilisation
if __name__ == "__main__":
app()