94 lines
2.8 KiB
Python
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()
|