mirror of
https://github.com/kristoferssolo/2048.git
synced 2025-10-21 15:20:35 +00:00
74 lines
1.5 KiB
Python
Executable File
74 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",
|
|
)
|
|
group.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:
|
|
train(args.train)
|
|
else:
|
|
Menu().run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
args = parser.parse_args()
|
|
main(args)
|