コード例 #1
0
def test_griddlers_board_clear():
    board = GriddlersBoard(rows=2, columns=3)
    board[0, 0] = CellMark.FILLED
    board[0, 1] = CellMark.FILLED
    board[1, 0] = CellMark.CROSSED
    board[1, 2] = CellMark.FILLED
    board.clear()

    assert str(board) == "___\n___"
コード例 #2
0
def test_griddlers_board_get_rows_and_columns():
    board = GriddlersBoard(rows=2, columns=3)
    board[0, 0] = CellMark.FILLED
    board[0, 1] = CellMark.FILLED
    board[1, 0] = CellMark.CROSSED
    board[1, 2] = CellMark.FILLED

    assert str(board) == "OO_\nX_O"

    assert board.get_row(0) == CellsLine.parse_line("OO_")
    assert board.get_row(1) == CellsLine.parse_line("X_O")

    assert board.get_column(0) == CellsLine.parse_line("OX")
    assert board.get_column(1) == CellsLine.parse_line("O_")
    assert board.get_column(2) == CellsLine.parse_line("_O")
コード例 #3
0
def test_set_invalid_value():
    board = GriddlersBoard(rows=2, columns=3)
    with pytest.raises(ValueError,
                       match="^Can only set marks on board. Got 4$"):
        board[1, 2] = 4
コード例 #4
0
def test_set_too_big_column():
    board = GriddlersBoard(rows=2, columns=3)
    with pytest.raises(
            ValueError,
            match="^Column number should be between 0 and 2. Got 3$"):
        board[1, 3] = CellMark.FILLED
コード例 #5
0
def test_griddlers_board_init():
    board = GriddlersBoard(rows=2, columns=3)

    assert str(board) == "___\n___"
コード例 #6
0
def test_set_too_big_row():
    board = GriddlersBoard(rows=2, columns=3)
    with pytest.raises(ValueError,
                       match="^Row number should be between 0 and 1. Got 3$"):
        board[3, 1] = CellMark.FILLED
コード例 #7
0
def test_griddlers_board_set_column():
    board = GriddlersBoard(rows=2, columns=3)
    board.set_column(0, CellsLine.parse_line("OX"))

    assert str(board) == "O__\nX__"
コード例 #8
0
def test_griddlers_board_set_cell():
    board = GriddlersBoard(rows=2, columns=3)
    board[0, 1] = CellMark.FILLED

    assert str(board) == "_O_\n___"
コード例 #9
0
ファイル: griddlers_game.py プロジェクト: saroad2/griddlers
 def __init__(self, rows_instructions: List[List[int]],
              columns_instructions: List[List[int]]):
     self.rows_instructions = rows_instructions
     self.columns_instructions = columns_instructions
     self.board = GriddlersBoard(rows=len(self.rows_instructions),
                                 columns=len(self.columns_instructions))
コード例 #10
0
ファイル: griddlers_game.py プロジェクト: saroad2/griddlers
class GriddlersGame:
    def __init__(self, rows_instructions: List[List[int]],
                 columns_instructions: List[List[int]]):
        self.rows_instructions = rows_instructions
        self.columns_instructions = columns_instructions
        self.board = GriddlersBoard(rows=len(self.rows_instructions),
                                    columns=len(self.columns_instructions))

    @property
    def rows(self):
        return self.board.rows

    @property
    def columns(self):
        return self.board.columns

    @property
    def is_complete(self):
        return self.board.is_completed

    @property
    def is_won(self):
        for row, row_instructions in self.iterate_rows():
            if [section.length
                    for section in row.filled_sections] != row_instructions:
                return False
        for column, column_instructions in self.iterate_columns():
            if [section.length for section in column.filled_sections
                ] != column_instructions:
                return False
        return True

    def get_row_and_instructions(self, row_index: int):
        return self.board.get_row(row_index), self.rows_instructions[row_index]

    def get_column_and_instructions(self, column_index: int):
        return (self.board.get_column(column_index),
                self.columns_instructions[column_index])

    def iterate_rows(self):
        for i in range(self.rows):
            yield self.get_row_and_instructions(i)

    def iterate_columns(self):
        for i in range(self.rows):
            yield self.get_row_and_instructions(i)

    def set_row(self, row_index: int, row: CellsLine):
        self.board.set_row(row_index=row_index, row=row)

    def set_column(self, column_index: int, column: CellsLine):
        self.board.set_column(column_index=column_index, column=column)

    def clear(self):
        self.board.clear()

    @classmethod
    def load_from_file(cls, path: Union[str, Path]) -> "GriddlersGame":
        with open(path, mode="r") as pd:
            data = json.load(pd)
        return GriddlersGame(**data)

    def board_string(self):
        return str(self.board)