diff options
author | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-02-05 07:46:04 +0200 |
---|---|---|
committer | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-02-05 07:46:04 +0200 |
commit | ae57dacc625b9ded6fad48e9197b4a29ad692173 (patch) | |
tree | 0e284eae461e02d8e7be9233235c8e6c70241737 | |
parent | a7fe2d0dff18abd253db3f2f999259a281b09630 (diff) |
Adding option for delaying autoplay.
-rw-r--r-- | app.py | 1 | ||||
-rw-r--r-- | bots/bot.py | 8 | ||||
-rw-r--r-- | cmdline.py | 9 | ||||
-rw-r--r-- | tests/test_app.py | 1 | ||||
-rw-r--r-- | tui/tui.py | 19 |
5 files changed, 30 insertions, 8 deletions
@@ -27,6 +27,7 @@ class App: tui_opts['autoplay'] = args.autoplay > 0 tui_opts['interactive'] = args.autoplay != 2 tui_opts['suppress'] = args.quiet + tui_opts['delay'] = args.delay self.board = Board(**board_opts) tui_opts['level_name'] = self.board.get_level_name() diff --git a/bots/bot.py b/bots/bot.py index cc09936..51151e0 100644 --- a/bots/bot.py +++ b/bots/bot.py @@ -31,7 +31,13 @@ class Bot(): return Action.NOOP, 0, 0 def saved_hints(self): - """ onko muuveja varastossa """ + """ poistetaan auenneet laatat ja palautetaan onko muuveja """ + for tile in list(self.safe_tiles): + if self.known_tile(tile): + self.safe_tiles.remove(tile) + for tile in list(self.mine_tiles): + if self.known_tile(tile): + self.mine_tiles.remove(tile) return self.safe_tiles or self.mine_tiles def hint(self, matrix, cursor_x, cursor_y): @@ -24,7 +24,7 @@ level_group.add_argument( custom_group = parser.add_argument_group('Mukautettu vaikeustaso') def board_size(wxh_string): - """ parser for dimensions. throws error on bad input""" + """ parsija laudan koolle, että on varmasti muotoa {leveys}x{korkeys} """ w, h = wxh_string.split('x') return (int(w), int(h)) custom_group.add_argument( @@ -39,7 +39,7 @@ custom_group.add_argument( metavar='<M>', type=int, dest='mines', - help='Säätää pelilaulla olevien pommien määrän <M>:ksi.', + help='Säätää pelilaulla olevien miinojen määrän <M>:ksi.', ) @@ -58,6 +58,11 @@ hint_group.add_argument( default=2, help='Valitsee tekoälyn <B>, missä: 0: Ei tekoälyä 1: Yksinkertainen, 2: DSSP (oletus)', ) +hint_group.add_argument( + '-d', '--delay', metavar='<D>', + type=float, + help='Odottaa ennen tekoälyn siirtoa <D> sadasosasekuntia.', +) batch_group = parser.add_argument_group('Automatisointi') batch_group.add_argument( diff --git a/tests/test_app.py b/tests/test_app.py index cae4e30..ba97a90 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -30,6 +30,7 @@ class TestAppClass(unittest.TestCase): size = None bot = None quiet = None + delay = None sure_win_board = [ [0,0,0,0,0,0,0,0,0], @@ -1,5 +1,6 @@ """ tui/tui.py - runko käyttöliittymälle """ # pylint: disable = multiple-imports +from time import sleep from .static import Action from .kbd import Kbd, NoKbd from .ansi_draw import AnsiDraw, SuppressDraw @@ -14,7 +15,8 @@ class Tui(): interactive = True, suppress = False, height = 9, - level_name = "outo lauta"): + level_name = "outo lauta", + delay = 0): # jos ei ole bottia pitää olla interaktiivinen if bot is None: @@ -23,17 +25,22 @@ class Tui(): suppress = False # jos ei mitään näytetä ei voi olla interaktiivinen - # pylint: disable = pointless-statement - (interactive := False) if suppress else () + if suppress: + interactive = False # automaattipeli pitää olla päällä jos ei interaktiivinen - (autoplay := True) if not interactive else () + if not interactive: + autoplay = True + + if delay and delay not in range(0,500): + delay = 50 self.autoplay = autoplay self.interactive = interactive self.suppress = suppress self.height = height self.level_name = level_name + self.delay = delay self.bot = bot(uncertain=not self.interactive) if bot else None @@ -51,7 +58,9 @@ class Tui(): if self.autoplay: action, x, y = self.bot.hint(matrix, x, y) if action != Action.NOOP: - self.draw.matrix(matrix, -1, -1) + if self.delay: + self.draw.matrix(matrix, x, y) + sleep(self.delay/100) return Action.OPEN if action==Action.SAFE else action, x, y |