class HalmaGame: def __init__(self, board, player, player2): self.player1 = player self.player2 = player2 self.board = board # command line arguments given by main self.bSize = board.bSize self.tLimit = board.timeLimit self.hPlayer = board.whatSide self.filename = None self.boardArray = [] # call a window creator class # create GUI (main window, configured columns/ frames, etc..) self.gui = GUI(self.tLimit, self.board, self) self.root = self.gui.root # create blank board using getGameArray return gameArray = board.boardArray self.gui.createBoard(self, gameArray) # main function that runs all the game logic on a click by click basis def buttonClicked(self, row, column): print(str(row) + ", " + str(column)) if self.board.gameWon: return # if the end turn button has been clicked reset player and switch turn if self.board.endTurnHappened: if self.player1.turn: self.player1.endTurn() self.player2.turn = True else: self.player2.endTurn() self.player1.turn = True # set the board end clicked to false self.board.endTurnHappened = False # check whos turn it is if self.player1.turn: #self.gui.enableButtons(True) # check if they got a pice if self.player1.gotPiece: # if the player is clicking an already clicked piece if (self.player1.piece[0] == row and self.player1.piece[1] == column): # check if the player has jumped a piece already if (self.player1.hasHopped): # call move generator again. self.player1.moveGenerator((row, column)) else: if not self.player1.madeMove: pass # no more valid moves to move too. elif self.player1.isValidMoves((row, column)): # update the board object and the ui self.board.updateBoard(self.player1.piece, (row, column)) self.gui.updateGUI(self.board, self.player1.piece, (row, column), self.boardArray) self.gui.highlight(self.boardArray[row][column], "highlight", self.player1.whatSide) self.player1.piece = (row, column) self.player1.madeMove = True else: print(self.player1.lastPos) print(f"{row}, {column}") if self.player1.lastPos == (row, column): self.player1.madeMove = False self.board.updateBoard(self.player1.piece, self.player1.lastPos) self.gui.updateGUI(self.board, self.player1.piece, self.player1.lastPos, self.boardArray) self.gui.highlight(self.boardArray[row][column], "unhighlight", self.player1.whatSide) self.gui.highlight( self.boardArray[self.player1.piece[0]][ self.player1.piece[1]], "unhighlight", self.player1.whatSide) self.player1.resetPlayer() else: self.gui.setStatusString( "Invalid move to move, select again") else: # check if the click position is a piece to move if self.player1.isValidPiece((row, column)): self.player1.lastPos = (row, column) # generate all the moves that piece can move to self.player1.moveGenerator((row, column)) self.player1.piece = (row, column) self.player1.gotPiece = True self.gui.highlight(self.boardArray[row][column], "highlight", self.player1.whatSide) else: self.gui.setStatusString( "Invalid piece to move. Please select a valid piece") # check if game won before continuing if (self.player1.turn): print(f"It is {self.player1.whatSide}'s turn.") if (self.board.winCondition(self.player1.whatSide, False)): self.gui.setStatusString("Player 1 has won") else: if (self.board.winCondition(self.player2.whatSide, False)): self.gui.setStatusString( "Player 2 has won") # CHANGE TO COMPUTER HAS WON def checkForComputer(self): # check if end turn happened if self.board.endTurnHappened: if self.player1.turn: self.player1.endTurn() self.player2.turn = True else: self.player2.endTurn() self.player1.turn = True # set the board end clicked to false self.board.endTurnHappened = False # if it is not player's turn if self.player2.turn: self.computerMove() def computerMove(self): computer = self.player2 bestBoardValue, bestBoardMove, prunes, numMoves = computer.boardStates( self.gui) piece = bestBoardMove[0] pieceCoord = piece.boardPos moveCoord = bestBoardMove[1] self.board.updateBoard(piece.boardPos, moveCoord) self.gui.updateGUI(self.board, pieceCoord, moveCoord, self.boardArray) # highlight the move made self.gui.highlight(self.boardArray[pieceCoord[0]][pieceCoord[1]], "highlight", self.player2.whatSide) self.gui.highlight(self.boardArray[moveCoord[0]][moveCoord[1]], "highlight", self.player2.whatSide) computer.piece = moveCoord if self.player1.turn: won = self.board.winCondition(self.player1.whatSide, False) print(won) if won: self.gui.setStatusString("Player 1 has won") else: won = self.board.winCondition(self.player2.whatSide, False) print(won) if (won): self.gui.setStatusString( "Player 2 has won") # CHANGE TO COMPUTER HAS WON self.gui.endTurnClicked()