summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.py34
-rw-r--r--board/board.py4
-rw-r--r--game/game.py37
-rw-r--r--tests/test_board.py11
-rw-r--r--tui/tui.py36
5 files changed, 95 insertions, 27 deletions
diff --git a/app.py b/app.py
index 8778881..be711b0 100644
--- a/app.py
+++ b/app.py
@@ -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
diff --git a/tui/tui.py b/tui/tui.py
index 5108d36..06a5c6e 100644
--- a/tui/tui.py
+++ b/tui/tui.py
@@ -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()