From ae57dacc625b9ded6fad48e9197b4a29ad692173 Mon Sep 17 00:00:00 2001 From: Aineopintojen-harjoitustyo-Algoritmit-j Date: Mon, 5 Feb 2024 07:46:04 +0200 Subject: Adding option for delaying autoplay. --- app.py | 1 + bots/bot.py | 8 +++++++- cmdline.py | 9 +++++++-- tests/test_app.py | 1 + tui/tui.py | 19 ++++++++++++++----- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app.py b/app.py index cb79568..8553fe5 100644 --- a/app.py +++ b/app.py @@ -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): diff --git a/cmdline.py b/cmdline.py index 8df3408..533c40f 100644 --- a/cmdline.py +++ b/cmdline.py @@ -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='', type=int, dest='mines', - help='Säätää pelilaulla olevien pommien määrän :ksi.', + help='Säätää pelilaulla olevien miinojen määrän :ksi.', ) @@ -58,6 +58,11 @@ hint_group.add_argument( default=2, help='Valitsee tekoälyn , missä: 0: Ei tekoälyä 1: Yksinkertainen, 2: DSSP (oletus)', ) +hint_group.add_argument( + '-d', '--delay', metavar='', + type=float, + help='Odottaa ennen tekoälyn siirtoa 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], diff --git a/tui/tui.py b/tui/tui.py index d32af71..6b3eb33 100644 --- a/tui/tui.py +++ b/tui/tui.py @@ -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 -- cgit v1.2.3