1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
""" tui/tui.py - runko käyttöliittymälle """
# pylint: disable = multiple-imports
from .static import Action
from .kbd import Kbd, NoKbd
from .ansi_draw import AnsiDraw, SuppressDraw
class Tui():
""" Tui - Luokka käyttäjän interaktiota varten """
# pylint: disable = too-many-arguments, too-many-instance-attributes
def __init__(self,
bot = None,
autoplay = False,
interactive = True,
suppress = False,
height = 9,
level_name = "outo lauta"):
# jos ei ole bottia pitää olla interaktiivinen
if bot is None:
autoplay = False
interactive = True
suppress = False
# jos ei mitään näytetä ei voi olla interaktiivinen
# pylint: disable = pointless-statement
(interactive := False) if suppress else ()
# automaattipeli pitää olla päällä jos ei interaktiivinen
(autoplay := True) if not interactive else ()
self.autoplay = autoplay
self.interactive = interactive
self.suppress = suppress
self.height = height
self.level_name = level_name
self.bot = bot(uncertain=not self.interactive) if bot else None
self.kbd = Kbd() if self.interactive else NoKbd()
if self.suppress:
self.draw = SuppressDraw()
else:
self.draw = AnsiDraw(height=self.height)
def matrix_selector(self, matrix, x, y):
""" valinta matriisita """
# automaattipeli avaa botin vinkit heti
if self.autoplay:
action, x, y = self.bot.hint(matrix, x, y)
if action != Action.NOOP:
self.draw.matrix(matrix, -1, -1)
return Action.OPEN if action==Action.SAFE else action, x, y
# ilman näppiskäsittelijää voidaan lopettaa
if not self.interactive:
return Action.QUIT, 0, 0
w, h = len(matrix), len(matrix[0])
while True:
self.draw.matrix(matrix, x, y)
action, x, y = self.kbd.read_matrix_action(w, h, x, y)
match action:
case Action.QUIT:
return (action, x, y)
case Action.OPEN | Action.FLAG | Action.BOMB | Action.SAFE:
if matrix[x][y] >= 10:
return (action, x, y)
case Action.HINT:
if self.bot is not None:
return self.bot.hint(matrix, x, y)
def game_over(self, matrix, x, y):
""" tehtävät kun kuolee """
self.draw.matrix(matrix, x, y)
self.draw.status_line(
f"{self.level_name}: " +
f"{'K' if self.suppress else 'Peli ohitse! Kuolit!':<30}"
)
self.kbd.read_action()
def game_win(self, matrix, x, y):
""" tehtävät kun voittaa """
self.draw.matrix(matrix, x, y)
self.draw.status_line(
f"{self.level_name}: " +
f"{'V' if self.suppress else 'Peli ohitse! Voitit!':<30}"
)
self.kbd.read_action()
def game_end(self, matrix):
""" tehtävät ihan pelin lopuksi """
if self.interactive:
self.draw.matrix(matrix, -1, -1)
self.draw.status_line(
f"{self.level_name}: " +
f"{'Kiitos!':<30}"
)
|