def Main(): """Execution block. Returns: An integer that represents the exit_code the application exits with. """ x_wins = 0 o_wins = 0 draws = 0 user_exit = False interact.Welcome() try: while not user_exit: dimension = int(interact.GrabDimension()) play_board = board.Board(dimension) has_won = board.BoardValue.NONE while 1: interact.DisplayBoard(play_board) you_next_move = interact.GrabMove(play_board) play_board.SetPosition(you_next_move, board.BoardValue.X) interact.DisplayYouMove(you_next_move) # Check if won: has_won = play_board.IsWinner() if has_won != board.BoardValue.NONE: break i_next_move = strategy.GetNextMove(play_board, board.BoardValue.O) play_board.SetPosition(i_next_move, board.BoardValue.O) interact.DisplayIMove(i_next_move) # Check if won: has_won = play_board.IsWinner() if has_won != board.BoardValue.NONE: break interact.DisplayBoard(play_board) interact.DisplayWinner(has_won) if has_won == board.BoardValue.X: x_wins += 1 elif has_won == board.BoardValue.O: o_wins += 1 else: draws += 1 user_exit = not interact.PlayAgain() interact.Summarize(x_wins, o_wins, draws) except Exception as ex: print "Unexpected Exception has occurred: %s" % ex traceback.print_exc() return 1 return 0
def test_return_animation(self): """ execution scenarios: - self.view.animate_return(self.ray_coords): True/False - len(self.board.columns[self.ray_coords['position']].figures) == 0 - self.board.columns[self.ray_coords['position']].figures[-1].fits(self.player.captured_figure) == True - self.board.columns[self.ray_coords['position']].figures[-1].empty is True """ # set object state mock_view = mock.Mock() mock_view.animate_return.return_value = False mock_player = mock.Mock() mock_player.capture_figure.return_value = figure.Figure() mock_mq = mock.Mock() mock_broker = mock.Mock() test_ctrl = controller.Controller(mock_view, mock_player, mock_mq, mock_broker) test_ctrl.board = board.Board() test_ctrl.ray_coords = {'position': 3} # setup scenario mock_view.animate_return.return_value = True # execute method test_ctrl.return_animation() # assert expected results (nothing happens) # TODO: actual assertions # setup scenario mock_view.animate_return.return_value = False # execute method test_ctrl.return_animation()
def welcome_listener(self, inputs): # check for and handle events single_player_button, online_multi_button, settings_button = inputs for event in pygame.event.get(): if event.type == pygame.QUIT: self.loop_finished = True elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: self.keyword = "confirm_exit" self.draw_again = True elif event.type == pygame.MOUSEBUTTONUP: mouse_x, mouse_y = event.pos if single_player_button.rect.collidepoint((mouse_x, mouse_y)): self.keyword = 'game' self.draw_again = True print('[#] Game START!') self.board = board.Board() self.board.setup() elif online_multi_button.rect.collidepoint((mouse_x, mouse_y)): self.keyword = 'online_setup' self.draw_again = True # print('[#] Opponent: {}'.format(self.opponent)) elif settings_button.rect.collidepoint((mouse_x, mouse_y)): self.keyword = 'settings' self.draw_again = True
def test_create_columns(self): # set object state test_board = board.Board() # execute method test_board.create_columns() # assert expected outcome self.assertEqual(len(test_board.columns), 7)
def test_capture_animation(self): """ execution scenarios: - self.view.animate_return(self.ray_coords): True/False """ # set object state mock_view = mock.Mock() mock_player = mock.Mock() mock_player.capture_figure.return_value = figure.Figure() mock_mq = mock.Mock() mock_broker = mock.Mock() test_ctrl = controller.Controller(mock_view, mock_player, mock_mq, mock_broker) test_ctrl.board = board.Board() test_ctrl.ray_coords = {'position': 3} # setup scenario mock_view.animate_return.return_value = False # execute method test_ctrl.capture_animation() # assert expected results self.assertTrue(mock_view.animate_return.called) self.assertTrue(mock_player.capture_figure.called) # setup scenario mock_player = mock.Mock() # reset mock player test_ctrl.player = mock_player mock_view = mock.Mock() # reset mock view test_ctrl.view = mock_view mock_view.animate_return.return_value = True # execute method test_ctrl.capture_animation() # assert expected results self.assertTrue(mock_view.animate_return.called) self.assertFalse(mock_player.capture_figure.called)
def testIsColumnPossible(self): play_board = board.Board(3) self.assertEqual(0, play_board.IsColumnPossible(0, board.BoardValue.X)) play_board.SetPosition(2, board.BoardValue.O) self.assertEqual(-1, play_board.IsColumnPossible(2, board.BoardValue.X)) self.assertEqual(1, play_board.IsColumnPossible(2, board.BoardValue.O))
def testInvalidSetCoordinates(self): play_board = board.Board(3) self.assertRaises(board.InvalidBoardPosition, play_board.SetCoordinates, -1, -1, board.BoardValue.X) self.assertRaises(board.InvalidBoardPosition, play_board.SetCoordinates, 9, 9, board.BoardValue.X)
def testIsAscendingDiagonalPossible(self): play_board = board.Board(3) self.assertEqual( 0, play_board.IsAscendingDiagonalPossible(board.BoardValue.X)) play_board.SetPosition(2, board.BoardValue.O) self.assertEqual( -1, play_board.IsAscendingDiagonalPossible(board.BoardValue.X)) self.assertEqual( 1, play_board.IsAscendingDiagonalPossible(board.BoardValue.O))
def testToCoordinates(self): play_board = board.Board(3) for position in xrange(9): self.assertEqual((int(position / 3), int(position % 3)), play_board.ToCoordinates(position)) self.assertRaises(board.InvalidBoardPosition, play_board.ToCoordinates, -1) self.assertRaises(board.InvalidBoardPosition, play_board.ToCoordinates, 9)
def testToPosition(self): play_board = board.Board(3) for position in xrange(9): self.assertEqual( position, play_board.ToPosition(int(position / 3), int(position % 3))) self.assertRaises(board.InvalidBoardPosition, play_board.ToPosition, -1, -1) self.assertRaises(board.InvalidBoardPosition, play_board.ToPosition, 10, 10)
def test_setup(self): # set state test_board = board.Board() test_board.create_columns = mock.Mock() test_board.update_counts = mock.Mock() # execute method test_board.setup() # assert expected outcome self.assertTrue(test_board.create_columns.called) self.assertTrue(test_board.update_counts.called)
def testGetCornerValue(self): play_board = board.Board(3) for position in xrange(9): if position in (0, 2, 6, 8): self.assertEqual( heuristics.Heuristic.CORNER, heuristics.GetCornerValue(position, play_board)) else: self.assertEqual( heuristics.Heuristic.INVALID, heuristics.GetCornerValue(position, play_board))
def testGetCenterValue(self): play_board = board.Board(3) for position in xrange(9): if position == 4: self.assertEqual( heuristics.Heuristic.CENTER, heuristics.GetCenterValue(position, play_board)) else: self.assertEqual( heuristics.Heuristic.INVALID, heuristics.GetCenterValue(position, play_board))
def testGetLocalityValue(self): play_board = board.Board(3) self.assertEqual( heuristics.Heuristic.INVALID, heuristics.GetLocalityValue(1, play_board, board.BoardValue.X)) play_board.SetPosition(0, board.BoardValue.X) play_board.SetPosition(2, board.BoardValue.X) self.assertEqual( heuristics.Heuristic.LOCALITY * 2, heuristics.GetLocalityValue(1, play_board, board.BoardValue.O)) self.assertEqual( heuristics.Heuristic.INVALID, heuristics.GetLocalityValue(1, play_board, board.BoardValue.X))
def testIsWinner(self): play_board = board.Board(3) self.assertEqual(board.BoardValue.NONE, play_board.IsWinner()) # Test winner case. play_board.SetPosition(0, board.BoardValue.X) play_board.SetPosition(1, board.BoardValue.X) play_board.SetPosition(2, board.BoardValue.X) self.assertEqual(board.BoardValue.X, play_board.IsWinner()) # Test a draw case. play_board = board.Board(3) play_board.SetPosition(0, board.BoardValue.X) play_board.SetPosition(1, board.BoardValue.O) play_board.SetPosition(2, board.BoardValue.X) play_board.SetPosition(3, board.BoardValue.X) play_board.SetPosition(4, board.BoardValue.O) play_board.SetPosition(5, board.BoardValue.X) play_board.SetPosition(6, board.BoardValue.O) play_board.SetPosition(7, board.BoardValue.X) play_board.SetPosition(8, board.BoardValue.O) self.assertIsNone(play_board.IsWinner())
def test_update_counts(self): # set object state test_board = board.Board() test_board.setup() # pre-execution counters my_figure_count = 0 my_longest = 0 for column in test_board.columns: my_figure_count += column.occupancy() if column.occupancy() > my_longest: my_longest = column.occupancy() # execute method test_board.update_counts() # assert expected outcome self.assertEqual(my_figure_count, test_board.figure_count) self.assertEqual(my_longest, test_board.longest_column_count)
def testGetRelativeColumnHeuristic(self): play_board = board.Board(3) self.assertEqual( heuristics.Heuristic.INVALID, heuristics._GetRelativeColumnHeuristic(1, play_board, board.BoardValue.X)) play_board.SetPosition(0, board.BoardValue.X) play_board.SetPosition(6, board.BoardValue.X) self.assertEqual( heuristics.Heuristic.INVALID, heuristics._GetRelativeColumnHeuristic(3, play_board, board.BoardValue.O)) self.assertEqual( 4 + heuristics.Heuristic.LINE, heuristics._GetRelativeColumnHeuristic(3, play_board, board.BoardValue.X))
def test_eliminate_targets(self): # TODO: create extra testing scenarios # set state test_board = board.Board() test_board.setup() for c in test_board.columns: c.figures = [] for i in range(3): test_board.columns[0].figures.append(figure.Figure('square')) test_targets = [(0, 2), (0, 1), (0, 0)] # execute method result = test_board.eliminate_targets(test_targets) # assert expected outcome self.assertIsNotNone(result) self.assertEqual(len(test_board.columns[0].figures), 0) self.assertEqual(result, 6) # 3 squares, each 2 points
def test_add_row(self): # count all figures in board test_board = board.Board() test_board.setup() # get count on figures in columns before = 0 for column in test_board.columns: before += column.occupancy() # execute method test_board.add_row() # assert expected outcome # count all figures in board after = 0 for column in test_board.columns: after += column.occupancy() # 1 row == 7 figures self.assertEqual(after, before + 7)
def testGetDiagonalHeuristic(self): play_board = board.Board(3) self.assertEqual( heuristics.Heuristic.INVALID, heuristics._GetDiagonalHeuristic(1, play_board, board.BoardValue.X)) play_board.SetPosition(0, board.BoardValue.X) play_board.SetPosition(2, board.BoardValue.X) play_board.SetPosition(6, board.BoardValue.X) self.assertEqual( 6, heuristics._GetDiagonalHeuristic(4, play_board, board.BoardValue.X)) self.assertEqual( heuristics.Heuristic.INVALID, heuristics._GetDiagonalHeuristic(8, play_board, board.BoardValue.O)) self.assertEqual( 1, heuristics._GetDiagonalHeuristic(8, play_board, board.BoardValue.X))
def find_match(self): # checks for opponent from broker and responds accordingly opponent = self.broker.negotiate_match() if opponent: self.player.online = 'playing' self.opponent = opponent self.keyword = "game" self.draw_again = True print('[#] Game START!') print(f'[#] Opponent: {self.opponent}') self.board = board.Board() self.board.setup() else: text = "waiting message goes here" # set text for wait-screen if self.player.online == 'available': text = 'Waiting for challengers' self.draw_again = True elif self.player.online == 'ready': text = 'Get ready to start' self.draw_again = True self.txt_msg = text
def testInvalidSetCoordinatesAlreadyTaken(self): play_board = board.Board(3) play_board.SetCoordinates(0, 0, board.BoardValue.X) self.assertRaises(board.InvalidBoardSetting, play_board.SetCoordinates, 0, 0, board.BoardValue.O)
def testValidSetCoordinates(self): play_board = board.Board(3) play_board.SetCoordinates(0, 1, board.BoardValue.X) self.assertEqual(board.BoardValue.X, play_board._board[0][1])
def testInvalidGetFromPosition(self): play_board = board.Board(3) self.assertRaises(board.InvalidBoardPosition, play_board.GetFromPosition, -1) self.assertRaises(board.InvalidBoardPosition, play_board.GetFromPosition, 9)
def testValidSetPosition(self): play_board = board.Board(3) play_board.SetPosition(1, board.BoardValue.X) self.assertEqual(board.BoardValue.X, play_board._board[0][1])
def testIsFull(self): play_board = board.Board(3) for position in xrange(9): self.assertFalse(play_board.IsFull()) play_board.SetPosition(position, board.BoardValue.X) self.assertTrue(play_board.IsFull())
def testIsValidMoveFromPosition(self): play_board = board.Board(3) self.assertTrue(play_board.IsValidMoveFromPosition(1)) play_board.SetPosition(1, board.BoardValue.X) self.assertFalse(play_board.IsValidMoveFromPosition(1))
def testIsValidMoveFromCoordinates(self): play_board = board.Board(3) self.assertTrue(play_board.IsValidMoveFromCoordinates(0, 1)) play_board.SetCoordinates(0, 1, board.BoardValue.X) self.assertFalse(play_board.IsValidMoveFromCoordinates(0, 1))
def testValidGetFromPosition(self): play_board = board.Board(3) play_board.SetPosition(1, board.BoardValue.X) self.assertEqual(board.BoardValue.X, play_board.GetFromPosition(1))
def testInvalidGetFromCoordinates(self): play_board = board.Board(3) self.assertRaises(board.InvalidBoardPosition, play_board.GetFromCoordinates, -1, -1) self.assertRaises(board.InvalidBoardPosition, play_board.GetFromCoordinates, 9, 9)