def test_blocky(): block = generate_board(0, 750) blocky = _block_to_squares(block) assert isinstance(blocky, list) assert blocky[0][0] in COLOUR_LIST assert blocky[0][1] == (0, 0) assert blocky[0][2] == 750 print(block) main_block = Block((0, 0), 200, colour=None, level=0, max_depth=2) child_block_1 = Block((100, 0), 100, colour=COLOUR_LIST[0], level=1, max_depth=2) child_block_2 = Block((0, 0), 100, colour=COLOUR_LIST[1], level=1, max_depth=2) child_block_3 = Block((0, 100), 100, colour=COLOUR_LIST[2], level=1, max_depth=2) child_block_4 = Block((100, 100), 100, colour=COLOUR_LIST[3], level=1, max_depth=2) main_block.children = [child_block_1, child_block_2, child_block_3, child_block_4] blocky = _block_to_squares(main_block) assert len(blocky) == 4 assert blocky[0][0] in COLOUR_LIST assert blocky[0][1] == (100, 0) assert blocky[0][2] == 100 assert blocky[1][0] in COLOUR_LIST assert blocky[1][1] == (0, 0) assert blocky[1][2] == 100 assert blocky[2][0] in COLOUR_LIST assert blocky[2][1] == (0, 100) assert blocky[2][2] == 100 assert blocky[3][0] in COLOUR_LIST assert blocky[3][1] == (100, 100) assert blocky[3][2] == 100
def test_depth_5_2(): random.seed(1002) board = generate_board(5, BOARD_SIZE) copy = board.create_copy() assert board == copy assert id(board) != id(copy) for i in range(len(board.children)): assert id(board.children[i]) != id(copy.children[i])
def test_unit_board(): random.seed(1) board = generate_board(1, BOARD_SIZE) goal = BlobGoal(COLOUR_LIST[1]) player = RandomPlayer(1, goal) player._proceed = True move = player.generate_move(board) print(move) player2 = SmartPlayer(1, goal, 1) player2._proceed = True move2 = player2.generate_move(board) print(move2)
def __init__(self, max_depth: int, num_human: int, num_random: int, smart_players: List[int]) -> None: """Initialize this game, as described in the Assignment 2 handout. Precondition: 2 <= max_depth <= 5 """ board = generate_board(max_depth, BOARD_SIZE) players = create_players(num_human, num_random, smart_players) self._renderer = Renderer(BOARD_SIZE) self._data = GameData(board, players) self._state = MainState(self._data)
def test_create_copy() -> None: """ Test create copy for deep copy """ b1 = generate_board(5, 750) b2 = b1.create_copy() assert b1 == b2 assert b1 is not b2 b3 = copy.deepcopy(b1) assert b2 is not b3 assert b2 == b3
def test_depth_5_board(renderer): random.seed(1002) board = generate_board(5, BOARD_SIZE) renderer.draw_board(_block_to_squares(board)) renderer.save_to_file('board_5_ref.png') renderer.clear() goal1 = BlobGoal(COLOUR_LIST[0]) # blue goal2 = BlobGoal(COLOUR_LIST[1]) # red player1 = RandomPlayer(1, goal1) player2 = RandomPlayer(2, goal2) player1._proceed = True move1 = player1.generate_move(board) move1_block = move1[2] to_do = _get_block(board, move1_block.position, move1_block.level) assert move1[0] == "swap" and move1[1] == 0 assert to_do.swap(0) renderer.draw_board(_block_to_squares(board)) renderer.save_to_file('board_5_move1.png') renderer.clear() afterfirst1 = goal1.score(board) afterfirst2 = goal2.score(board) player2._proceed = True move2 = player2.generate_move(board) move2_block = move2[2] to_do_2 = _get_block(board, move2_block.position, move2_block.level) assert move2[0] == "smash" assert to_do_2.smash() renderer.draw_board(_block_to_squares(board)) renderer.save_to_file('board_5_move2.png') renderer.clear() aftersecond1 = goal1.score(board) aftersecond2 = goal2.score(board) player1._proceed = True move3 = player1.generate_move(board) move3_block = move3[2] to_do_3 = _get_block(board, move3_block.position, move3_block.level) assert move3[0] == "rotate" and move3[1] == 3 assert to_do_3.rotate(3) renderer.draw_board(_block_to_squares(board)) renderer.save_to_file('board_5_move3.png') renderer.clear() afterthird1 = goal1.score(board) afterthird2 = goal2.score(board)
def test_block(): block = generate_board(4, 750) assert len(block.children) == 4 assert block.max_depth == 4 assert block.level == 0 assert block.colour is None assert block.size == 750 block = block.children[0] assert block.level == 1 assert block.size == 375 for c in block.children: if len(c.children) == 0: assert c.smashable() is True else: assert c.smashable() is False block = generate_board(0, 750) assert block.colour is not None assert len(block.children) == 0 assert block.level == 0 assert block.max_depth == 0 assert block.size == 750 assert block.smash() is False assert block.swap(0) is False assert block.swap(1) is False assert block.rotate(1) is False assert block.rotate(3) is False block = generate_board(1, 750) assert block.colour is None assert len(block.children) == 4 assert block.children[0].size == 375 assert block.children[1].colour is not None assert block.children[2].colour is not None assert block.children[3].colour is not None assert block.children[1].position == (0, 0) assert block.children[0].position == (375, 0) assert block.children[2].position == (0, 375) assert block.children[3].position == (375, 375) assert block.children[0].smashable() is False assert block.children[1].smash() is False assert block.children[2].smashable() is False assert block.children[3].smash() is False block = generate_board(4, 750) block_copy = block.create_copy() assert block == block_copy block.swap(1) for i, j in zip(block.children, block_copy.children): assert i.position == j.position block.swap(0) for i, j in zip(block.children, block_copy.children): assert i.position == j.position main_block = Block((0, 0), 200, colour=None, level=0, max_depth=2) child_block_1 = Block((100, 0), 100, colour=COLOUR_LIST[0], level=1, max_depth=2) child_block_2 = Block((0, 0), 100, colour=COLOUR_LIST[1], level=1, max_depth=2) child_block_3 = Block((0, 100), 100, colour=COLOUR_LIST[2], level=1, max_depth=2) child_block_4 = Block((100, 100), 100, colour=COLOUR_LIST[3], level=1, max_depth=2) main_block.children = [child_block_1, child_block_2, child_block_3, child_block_4] assert main_block.swap(1) assert main_block.children[0].colour == COLOUR_LIST[3] assert main_block.children[1].colour == COLOUR_LIST[2] assert main_block.children[3].colour == COLOUR_LIST[0] assert main_block.children[2].colour == COLOUR_LIST[1] assert main_block.swap(1) assert main_block.swap(0) assert main_block.children[0].colour == COLOUR_LIST[1] assert main_block.children[3].colour == COLOUR_LIST[2] assert main_block.children[1].colour == COLOUR_LIST[0] assert main_block.children[2].colour == COLOUR_LIST[3] assert main_block.swap(0) assert main_block.rotate(1) assert main_block.children[0].colour == COLOUR_LIST[1] assert main_block.children[1].colour == COLOUR_LIST[2] assert main_block.children[2].colour == COLOUR_LIST[3] assert main_block.children[3].colour == COLOUR_LIST[0] assert main_block.rotate(3) assert main_block.children[0].colour == COLOUR_LIST[0] assert main_block.children[1].colour == COLOUR_LIST[1] assert main_block.children[2].colour == COLOUR_LIST[2] assert main_block.children[3].colour == COLOUR_LIST[3] block = generate_board(1, 750) assert block.children[0].paint(BLACK) assert block.paint(BLACK) is False block.children[0].paint(COLOUR_LIST[0]) block.children[1].paint(COLOUR_LIST[0]) block.children[2].paint(COLOUR_LIST[0]) assert block.combine() assert len(block.children) == 0
def test_generate_move_random_player() -> None: b2 = generate_board(3, 750) P = RandomPlayer(2, PerimeterGoal(COLOUR_LIST[2])) P._proceed = True assert P.generate_move(b2)[0] in ['swap', 'rotate', 'paint', 'combine', 'smash']
def test_create_copy() -> None: b2 = generate_board(3, 750) copy = b2.create_copy() assert b2 == copy # Deep copy assert id(b2) != id(copy)
def unit_board4X4(): board = generate_board(0, 4) return board
def unit_board_8X8(): board = generate_board(1, 8) return board
def unit_board_16X16(): board = generate_board(2, 16) return board
def game_board2(): random.seed(1) board = generate_board(5, BOARD_SIZE) return board
def game_board(): random.seed(1001) board = generate_board(3, BOARD_SIZE) return board
def block_lowest(): unit = generate_board(0, 1) return unit