class BoardViewTests(TestCase): EMPTY_BOARD = [[EMPTY_INNER_BOARD, EMPTY_INNER_BOARD, EMPTY_INNER_BOARD], [EMPTY_INNER_BOARD, EMPTY_INNER_BOARD, EMPTY_INNER_BOARD], [EMPTY_INNER_BOARD, EMPTY_INNER_BOARD, EMPTY_INNER_BOARD]] def setUp(self): self.boardView = BoardView() self.testBoard = self.EMPTY_BOARD def test_init_should_add_empty_board_to_board_view(self): self.assertEqual(BoardView.EMPTY_BOARD, self.boardView.boardViewString) def test_UpdateBoard_should_add_a_character_to_boardViewString(self): self.testBoard[1][1] = self.testBoard[1][1].replace('1', 'X') self.boardView.UpdateBoard(1, 1, 0, 0, 'X') self.assertEqual(self.testBoard, self.boardView.boardViewString) def test_PrintBoard_should_print_an_empty_board(self): self.assertEqual(EMPTY_BOARD_TO_PRINT, self.boardView.GetFormattedBoard()) def test_PrintBoard_should_print_the_board_with_one_character(self): self.boardView.UpdateBoard(1, 1, 0, 0, 'X') self.assertEqual(BOARD_WITH_ONE_CHAR, self.boardView.GetFormattedBoard())
def start(self): innerBoards = [[InnerBoard(), InnerBoard(), InnerBoard()], [InnerBoard(), InnerBoard(), InnerBoard()], [InnerBoard(), InnerBoard(), InnerBoard()]] overallBoard = InnerBoard() mainBoard = Board(innerBoards) boardView = BoardView() playerOneNoughtCross = NoughtCross( input("Player 1, please input your symbol.\r\n")) playerTwoNoughtCross = NoughtCross( input("Player 2, please input your symbol.\r\n")) playerCharacters = [playerOneNoughtCross, playerTwoNoughtCross] currentPlayer = 2 playerSwitchValue = -1 xBoard, yBoard = 1, 1 print("Enter \"tl\" for the top left position.") while not self.gameIsFinished: print(boardView.GetFormattedBoard()) currentPlayer += playerSwitchValue playerSwitchValue *= -1 validMove = False while not validMove: print("Player {}'s go.".format(currentPlayer)) userInput = input("Where do you want to go?\r\n").lower() if userInput.startswith('t'): yInput = 0 if userInput.startswith('m'): yInput = 1 if userInput.startswith('b'): yInput = 2 if userInput.endswith('l'): xInput = 0 if userInput.endswith('m'): xInput = 1 if userInput.endswith('r'): xInput = 2 moveReturnValue = mainBoard.TakeTurn( xBoard, yBoard, int(xInput), int(yInput), playerCharacters[currentPlayer - 1]) validMove = (moveReturnValue == InnerBoard.ERROR_NO_ERROR) if not validMove: print("INVALID MOVE!\r\n") boardView.UpdateBoard(xBoard, yBoard, xInput, yInput, playerCharacters[currentPlayer - 1].type) self.CheckForWin(currentPlayer, mainBoard, overallBoard, playerCharacters, xBoard, yBoard) if (self.gameIsFinished): print(boardView.GetFormattedBoard()) print("Player {} wins!.".format(currentPlayer)) xBoard = xInput yBoard = yInput