예제 #1
0
def tick(board: Board):
    new_board = Board(board.generation + 1, Size(board.rows, board.cols))
    for r in range(board.rows):
        for c in range(board.cols):
            if board[r][c] == "*":
                live_count = board.get_live_neigbour_count(r, c)
                if live_count == 2 or live_count == 3:
                    new_board[r][c] = "*"
                else:
                    new_board[r][c] = "."
            else:
                live_count = board.get_live_neigbour_count(r, c)
                if live_count == 3:
                    new_board[r][c] = "*"
                else:
                    new_board[r][c] = "."
    return new_board
def test_count_two_live_neighbours():
    """We should be able to count our live neighbours"""
    row_one = Mock(Row)
    row_one.__getitem__ = Mock()

    row_one_cellstates = [".", "*", "."]

    def get_row_one_cell(key):
        return row_one_cellstates[key]

    row_one.__getitem__.side_effect = get_row_one_cell

    row_two = Mock(Row)
    row_two.__getitem__ = Mock()

    row_two_cellstates = [".", "*", "."]

    def get_row_two_cell(key):
        return row_two_cellstates[key]

    row_two.__getitem__.side_effect = get_row_two_cell

    row_three = Mock(Row)
    row_three.__getitem__ = Mock()

    row_three_cellstates = [".", "*", "."]

    def get_row_three_cell(key):
        return row_three_cellstates[key]

    row_three.__getitem__.side_effect = get_row_three_cell

    board = Board(0, Size(3, 3), [row_one, row_two, row_three])

    assert board.get_live_neigbour_count(0, 1) == 1
    assert board.get_live_neigbour_count(1, 1) == 2
    assert board.get_live_neigbour_count(2, 1) == 1