Exemplo n.º 1
0
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
Exemplo n.º 2
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()
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
	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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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))
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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))
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
	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)
Exemplo n.º 12
0
 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))
Exemplo n.º 13
0
 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))
Exemplo n.º 14
0
 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))
Exemplo n.º 15
0
    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())
Exemplo n.º 16
0
	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)
Exemplo n.º 17
0
 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))
Exemplo n.º 18
0
	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
Exemplo n.º 19
0
	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)
Exemplo n.º 20
0
 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))
Exemplo n.º 21
0
 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
Exemplo n.º 22
0
 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)
Exemplo n.º 23
0
 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])
Exemplo n.º 24
0
 def testInvalidGetFromPosition(self):
     play_board = board.Board(3)
     self.assertRaises(board.InvalidBoardPosition,
                       play_board.GetFromPosition, -1)
     self.assertRaises(board.InvalidBoardPosition,
                       play_board.GetFromPosition, 9)
Exemplo n.º 25
0
 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])
Exemplo n.º 26
0
 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())
Exemplo n.º 27
0
 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))
Exemplo n.º 28
0
 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))
Exemplo n.º 29
0
 def testValidGetFromPosition(self):
     play_board = board.Board(3)
     play_board.SetPosition(1, board.BoardValue.X)
     self.assertEqual(board.BoardValue.X, play_board.GetFromPosition(1))
Exemplo n.º 30
0
 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)