diff options
author | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-01-31 13:52:45 +0200 |
---|---|---|
committer | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-01-31 13:52:45 +0200 |
commit | 7262e21e996ab1589384b43c90d9202e29a69f36 (patch) | |
tree | 37e6773c36ae6a2d410d3c3e03d97634c6df7cc1 | |
parent | de4daa463d75403144ac63d3cd94aebf74fa0cb2 (diff) |
Reforming command line parameters & keyboard help.
-rw-r--r-- | __main__.py | 110 | ||||
-rw-r--r-- | app.py | 18 | ||||
-rw-r--r-- | tui/__init__.py | 2 | ||||
-rw-r--r-- | tui/static.py | 33 |
4 files changed, 97 insertions, 66 deletions
diff --git a/__main__.py b/__main__.py index 902d92b..8f60946 100644 --- a/__main__.py +++ b/__main__.py @@ -3,71 +3,99 @@ import sys from argparse import ArgumentParser from app import App +from tui import KEY_DESCRIPTIONS + parser = ArgumentParser( prog='miinaharava', description='Klassisen miinaharavapelin terminaali toteutus.', + add_help=False ) -parser.add_argument( +level_group = parser.add_argument_group('Vaikeustaso') +level_group.add_argument( '-i', '--intermediate', - help='Asettaa keskivaikean vaikeustaso (oletus on aloittelija)', + help='keskivaikea (oletus on aloittelija)', action='store_true' ) -parser.add_argument( +level_group.add_argument( '-e', '--expert', - help='Asettaa edistyneen vaikeustason (vaatii 100 merkkiä leveän terminaalin)', + help='edistynyt (vaatii 100 merkkiä leveän terminaalin)', action='store_true' ) -parser.add_argument( - '-s', '--simple', - help='Käytä yksinkertaisempaa vain yhtä pistettä tutkivaa bottia', - action='store_true' + + +custom_group = parser.add_argument_group('Mukautettu vaikeustaso') +def board_size(wxh_string): + """ parser for dimensions. throws error on bad input""" + w, h = wxh_string.split('x') + return (int(w), int(h)) +custom_group.add_argument( + '-s', '--size', + metavar='<S>', + type= board_size, + dest='size', + help='Pelikentän koko, missä <S> on {leveys}x{korkeus}.' +) +custom_group.add_argument( + '-m', '--mines', + metavar='<M>', + type=int, + dest='mines', + help='Säätää pelilaulla olevien pommien määrän <M>:ksi.', ) -parser.add_argument( + + +hint_group = parser.add_argument_group('Tekoäly') +hint_group.add_argument( '-a', '--auto', - help='Antaa botin pelata automaattisesti', - action='store_true' + dest='autoplay', + default=0, + action='count', + help='Pelaa tekoälyn vihjeet. [-aa] Pelaa myös epävarmat.' ) -parser.add_argument( - '-u', '--uncertain', - help='Antaa botille luvan tehdä myös epävarmoja valintoja (asettaa myös -a asetuksen)', - action='store_true' +hint_group.add_argument( + '-b', '--bot', metavar='<B>', + choices=range(2), + type=int, + default=2, + help='Valitsee tekoälyn <B>, missä: 0: Ei tekoälyä 1: Yksinkertainen, 2: DSSP (oletus)', ) -parser.add_argument( + +batch_group = parser.add_argument_group('Automatisointi') +batch_group.add_argument( '-q', '--quiet', - help='Tulostaa minimaalisesti (asettaa myös -a ja -u asetukset)', + help='Tulostaa minimaalisesti (asettaa myös [-aa])', action='store_true' ) -parser.add_argument( - '-c', - metavar='COUNT', +batch_group.add_argument( + '-c', '--count', + metavar='<C>', type=int, dest='count', - help='Suorittaa ohelmaa COUNT kertaa ja tulostaa voitto-osuuden.', -) -parser.add_argument( - '-w', - metavar='WIDTH', - type=int, - dest='width', - help='Mukautaa pelilaudan leveydelle WIDTH. (resetoi vaikeustason)', + help='Suorittaa ohelmaa <C> kertaa ja tulostaa voitto-osuuden.', ) -parser.add_argument( - '-H', - metavar='HEIGHT', - type=int, - dest='height', - help='Mukautaa pelilaudan korkeudelle HEIGTH. (resetoi vaikeustason)', + +misc_group = parser.add_argument_group('Sekalaista') +misc_group.add_argument( + '-h', '--help', + help='Tulostaa tämän viestin', + action='store_true' ) -parser.add_argument( - '-m', - metavar='MINES', - type=int, - dest='mines', - help='Säätää pelilaulla olevien pommien määrän MINES:ksi. (resetoi vaikeustason)', +misc_group.add_argument( + '-k', '--keys', + help='Tulostaa pelin näppäinkartan.', + action='store_true' ) args = parser.parse_args() +if args.help: + parser.print_help() + sys.exit() + +if args.keys: + print(end=KEY_DESCRIPTIONS) + sys.exit() + if args.count is None: app = App(args) is_win = app.run() @@ -77,7 +105,7 @@ if args.count is None: win_count = 0 run_count = args.count -args.uncertain=True +args.autoplay = 2 for i in range(run_count): print(end=f" \rSuoritus {i+1:>6}/{run_count} ") print(end=f"({100*win_count/(i if i else 1):.1f}%)..") @@ -1,5 +1,5 @@ """ app.py - pääohjelma """ -from board import Board, Level, LevelSpecs +from board import Board, Level from tui import Tui from game import Game from bots import SimpleBot, DSSPBot @@ -14,18 +14,20 @@ class App: # pylint: disable = multiple-statements if args.intermediate: board_opts['level'] = Level.INTERMEDIATE if args.expert: board_opts['level'] = Level.EXPERT - if args.width: board_opts['width'] = args.width - if args.height: board_opts['height'] = args.height if args.mines: board_opts['mines'] = args.mines + if args.size: + board_opts['width'] = args.size[0] + board_opts['height'] = args.size[1] - if args.simple: tui_opts['bot'] = SimpleBot - tui_opts['autoplay'] = args.auto - tui_opts['interactive'] = not args.uncertain + if args.bot==0: tui_opts['bot'] = None + if args.bot==1: tui_opts['bot'] = SimpleBot + tui_opts['autoplay'] = args.autoplay > 0 + tui_opts['interactive'] = args.autoplay != 2 tui_opts['suppress'] = args.quiet - tui_opts['height'] = LevelSpecs[board_opts['level']][1] self.board = Board(**board_opts) - tui_opts['level_name']=self.board.get_level_name() + tui_opts['level_name'] = self.board.get_level_name() + tui_opts['height'] = self.board.get_height() self.ui = Tui(**tui_opts) self.game = Game(self.board,self.ui) diff --git a/tui/__init__.py b/tui/__init__.py index c1c5b91..0c8d632 100644 --- a/tui/__init__.py +++ b/tui/__init__.py @@ -1,3 +1,3 @@ """ tui - hoitaa käyttäjälle katseltavaa ja havaitsee syötteet """ from .tui import Tui -from .static import Action +from .static import Action, KEY_DESCRIPTIONS diff --git a/tui/static.py b/tui/static.py index fba5525..60442c0 100644 --- a/tui/static.py +++ b/tui/static.py @@ -30,24 +30,25 @@ ActionKeys = { "\033[": Action.NOOP, "\033": Action.QUIT, "t": Action.SAFE, "w": Action.UP, "a": Action.LEFT, "s": Action.DOWN, "d": Action.RIGHT, " ": Action.OPEN, "\n": Action.OPEN, - "f": Action.FLAG, "m": Action.FLAG, "q": Action.QUIT, - "p": Action.MINE, "x": Action.MINE, "o": Action.SAFE, - "l": Action.QUIT, "?": Action.HINT, "b": Action.HINT + "l": Action.QUIT, "?": Action.HINT, "b": Action.HINT, + "f": Action.FLAG, "q": Action.QUIT, "m": Action.MINE, + "\t": Action.FLAG, "9": Action.MINE, "0": Action.SAFE } -KEY_DESCRIPTIONS = """ -Liikkuminen: - YLÖS,ALAS,VASEN,OIKEA,PGDN,PGUP,HOME,END,w,a,s,d -Merkitseminen: - m - merkitse - p,x - pommi - t,o - turvallinen -Avaaminen: - ENTER, SPACE -Vinkki: - ?, b - pyydä botilta vihje -Lopetus: - l,q,ESC +KEY_DESCRIPTIONS = """Näppäinasettelu: + + YLÖS, ALAS, VASEN, OIKEA, PGDN, PGUP, HOME, END, w, a, s, d + Kursorin liikuttaminen pelilaudalla + + ENTER, SPACE Avaa laatta + + f, TAB Vaihda laatan merkintää + m, 9 Merkitse miinaksi + t, 0 Merkitse turvalliseksi + + ?, b Vihje tekoälyltä + + l, q, ESC Pelin lopetus """ @dataclass |