diff options
-rw-r--r-- | app.py | 34 | ||||
-rw-r--r-- | board/board.py | 4 | ||||
-rw-r--r-- | game/game.py | 37 | ||||
-rw-r--r-- | tests/test_board.py | 11 | ||||
-rw-r--r-- | tui/tui.py | 36 |
5 files changed, 95 insertions, 27 deletions
@@ -1,35 +1,17 @@ """ app.py - pääohjelma """ from board.board import Board -from tui.tui import Tui, Action +from tui.tui import Tui +from game.game import Game # pylint: disable = too-few-public-methods class App: """ App - Luokka pääohjelmalle""" def __init__(self): - self.b = Board(13) - self.t = Tui() + self.board = Board() + self.ui = Tui() + self.game = Game(self.board,self.ui) def run(self): - """ käynnistää pääohjelman """ - x, y = 0, 0 - # Printataan tyhjää tilaa, jotta pelalauta mahtuu ruudulle - for _ in range(self.b.size): - print() - - while True: - action, x, y = self.t.matrix_selector(self.b.get_view(), x, y) - match action: - case Action.QUIT: - print("LOPETUS!") - break - case Action.OPEN: - if self.b.get_mask(x, y) and not self.b.make_guess(x, y): - self.t.draw_matrix(self.b.get_view(), -1, -1) - print("KUOLEMA!") - break - if self.b.is_winning(): - self.t.draw_matrix(self.b.get_view(), -1, -1) - print("VOITTO!") - break - case Action.FLAG: - self.b.flag_tile(x, y) + """ käynnistää pelin """ + while self.game.next(): + pass diff --git a/board/board.py b/board/board.py index 22885c7..82e6835 100644 --- a/board/board.py +++ b/board/board.py @@ -163,3 +163,7 @@ class Board(): self.masked[nx][ny] = 0 return True + + def reveal(self): + """ näytä koko lauta """ + self.masked = [[0 for _ in range(self.size)] for _ in range(self.size)] diff --git a/game/game.py b/game/game.py new file mode 100644 index 0000000..91c240f --- /dev/null +++ b/game/game.py @@ -0,0 +1,37 @@ +""" game/game.py - pelin etenemiseen liittyvä ohjaus """ +from tui.tui import Action + +class Game: + """ Game - peli """ + def __init__(self, board, ui): + self.board = board + self.ui = ui + self.x, self.y = self.ui.game_begin(self.board.size) + + + def __del__(self): + self.board.reveal() + self.ui.game_end(self.board.get_view()) + + + def next(self): + """ seuraava kiitos vai jotain muuta? """ + action, self.x, self.y = self.ui.matrix_selector( + self.board.get_view(), self.x, self.y + ) + match action: + case Action.QUIT: + return False + case Action.OPEN: + if self.board.get_mask(self.x, self.y): + if not self.board.make_guess(self.x, self.y): + self.ui.game_over( + self.board.get_view(), self.x, self.y + ) + return False + if self.board.is_winning(): + self.ui.game_win(self.board.get_view(), self.x, self.y) + return False + case Action.FLAG: + self.board.flag_tile(self.x, self.y) + return True diff --git a/tests/test_board.py b/tests/test_board.py index 0688005..d87e825 100644 --- a/tests/test_board.py +++ b/tests/test_board.py @@ -70,7 +70,7 @@ class TestBoardClass(unittest.TestCase): self.assertTrue(b.flag_tile(0,0)) self.assertEqual(b.get_mask(0,0), 10) - def test_flaf_tile_error_conditions(self): + def test_flag_tile_error_conditions(self): """ liputus ei onnistu jos avattu, alueen ulkopuolella, outo arvo """ b = Board(2) b.tiles=[[1,9],[9,9]] @@ -79,4 +79,13 @@ class TestBoardClass(unittest.TestCase): b.masked[0][0]=0 self.assertFalse(b.flag_tile(0,0)) self.assertFalse(b.flag_tile(2,2)) + + def test_reveal(self): + """ paljastuksen jälkeen näkyy laatat sellaisenaan """ + b = Board(2) + b.reveal() + t = b.tiles + v = b.get_view() + for i in range(2): + self.assertEqual(v[i],t[i])
\ No newline at end of file @@ -27,6 +27,7 @@ class Tui(): fd = sys.stdin.fileno() termios.tcsetattr(fd, termios.TCSAFLUSH, self.oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, self.oldflags) + print() def set_color(self, color): @@ -106,3 +107,38 @@ class Tui(): case Action.RIGHT: x = x+1 if x < len(matrix)-1 else x self.draw_matrix(matrix, x, y) + + + def show_board_with_text(self, matrix, x, y, text): + """ näyttää laudan, tekstin alla ja jää odottelemaan nappia """ + self.draw_matrix(matrix, x, y) + print(text) + self.cursor_up(1) + self.read_action() + + + def game_begin(self, size): + """ ruudun alustus ja lähtökoordinaatien määritys """ + for _ in range(size+1): + print() + self.cursor_up(1) + return size//2, size//2 + + + def game_over(self, matrix, x, y): + """ näyttää pelin lopputilanteen ja odottaa nappia """ + self.show_board_with_text(matrix, x, y, + "KUOLEMA! ...näppäimellä eteenpäin...") + + + def game_win(self, matrix, x, y): + """ näyttäää pelin lopputilanteen ja odottaa nappia """ + self.show_board_with_text(matrix, x, y, + "VOITTO! ...näppäimellä eteenpäin...") + + + def game_end(self, matrix): + """ pelin lopetus """ + self.show_board_with_text(matrix, -1, -1, + "PELI OHI! ...näppäimellä eteenpäin...") + print() |