2048/main.py
2024-01-03 05:24:46 +02:00

77 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python
import argparse
from ai import train
from loguru import logger
from path import BASE_PATH
from py2048 import Menu
def pos_int(string: str) -> int:
try:
value = int(string)
except ValueError:
raise argparse.ArgumentTypeError(f"Expected integer, got {string!r}")
if value < 0:
raise argparse.ArgumentTypeError(f"Expected non negative number, got {value}")
return value
parser = argparse.ArgumentParser(description="2048 game with AI")
group = parser.add_mutually_exclusive_group()
group.add_argument(
"-d",
"--debug",
action="store_true",
help="Debug",
)
group.add_argument(
"-v",
"--verbose",
action="store_true",
help="Verbose",
)
parser.add_argument(
"-t",
"--train",
type=pos_int,
nargs="?",
const=100,
metavar="int",
help="Trains the AI",
)
def setup_logger(debug_level: str) -> None:
logger.add(
BASE_PATH / ".logs" / "game.log",
format="{time} | {level} | {message}",
level=debug_level.upper(),
rotation="10 MB",
compression="zip",
)
@logger.catch
def main(args: argparse.ArgumentParser) -> None:
if args.debug:
setup_logger("debug")
elif args.verbose:
setup_logger("debug")
else:
setup_logger("warning")
if args.train is not None:
logger.warning(args.train)
train(args.train)
else:
Menu().run()
if __name__ == "__main__":
args = parser.parse_args()
main(args)