mirror of
https://github.com/kristoferssolo/2048.git
synced 2025-10-21 15:20:35 +00:00
feat: add argument parser
This commit is contained in:
parent
2d218aa449
commit
9eafca215d
65
main.py
65
main.py
@ -1,16 +1,73 @@
|
||||
#!/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() -> None:
|
||||
# Menu().run()
|
||||
train(100)
|
||||
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__":
|
||||
main()
|
||||
args = parser.parse_args()
|
||||
main(args)
|
||||
|
||||
@ -38,13 +38,14 @@ def eval_genomes(genomes, config: neat.Config):
|
||||
max_val = app.game.board.max_val()
|
||||
|
||||
time_passed = time.perf_counter() - start_time
|
||||
score = app.game.board.score
|
||||
if (
|
||||
app.game.board.is_game_over()
|
||||
or (app.game.board._is_full() and time_passed >= 0.1)
|
||||
or max_val >= 2048
|
||||
):
|
||||
calculate_fitness(genome, max_val)
|
||||
logger.info(f"{max_val=}\tscore={app.game.board.score}")
|
||||
logger.info(f"{max_val=}\t{score=:_}\t{genome_id=}")
|
||||
app.game.restart()
|
||||
break
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ from loguru import logger
|
||||
|
||||
from py2048 import Config
|
||||
from py2048.objects import Board, Button, ScoreLabel
|
||||
from py2048.utils import Direction, Position, Size, setup_logger
|
||||
from py2048.utils import Direction, Position, Size
|
||||
|
||||
|
||||
class Game:
|
||||
|
||||
@ -6,14 +6,13 @@ from loguru import logger
|
||||
|
||||
from py2048 import Config
|
||||
from py2048.objects import Button
|
||||
from py2048.utils import Position, setup_logger
|
||||
from py2048.utils import Position
|
||||
|
||||
from .game import Game
|
||||
|
||||
|
||||
class Menu:
|
||||
def __init__(self):
|
||||
setup_logger()
|
||||
pygame.init()
|
||||
pygame.display.set_caption("2048")
|
||||
self._surface: pygame.Surface = pygame.display.set_mode(Config.SCREEN.size)
|
||||
|
||||
@ -1,21 +1,9 @@
|
||||
from loguru import logger
|
||||
from path import BASE_PATH
|
||||
|
||||
from .collections import Board, Font, Header, Position, Screen, Size, Tile
|
||||
from .color import ColorScheme
|
||||
from .enums import Direction
|
||||
|
||||
|
||||
def setup_logger() -> None:
|
||||
logger.add(
|
||||
BASE_PATH.joinpath(".logs", "game.log"),
|
||||
format="{time} | {level} | {message}",
|
||||
level="DEBUG" if BASE_PATH.joinpath("debug").exists() else "INFO",
|
||||
rotation="10 MB",
|
||||
compression="zip",
|
||||
)
|
||||
|
||||
|
||||
__all__ = [
|
||||
"Board",
|
||||
"ColorScheme",
|
||||
@ -24,7 +12,6 @@ __all__ = [
|
||||
"Position",
|
||||
"Size",
|
||||
"Tile",
|
||||
"setup_logger",
|
||||
"Header",
|
||||
"Screen",
|
||||
]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user