class gameManager: def __init__(self): self.gameBoard = board() self.interpreter = boardInterpreter("labirinto.txt") self.pathFinder = APathFinder(self.gameBoard) self.geneticAlgo = GeneticAlgo() self.runGeneticCode = False self.showing = False self.findPath = True self.agentReady = False self.player = None self.otimizedGroup = None self.ResetGame() def GetBoard(self): return self.gameBoard def GenerateBoard(self, grid): self.gameBoard.SetBoard(grid) def CheckVictory(self): for bronzeKnight in self.bronzeKnights: if not (bronzeKnight.position[0] == self.gameBoard.finalSquare.position[0] and bronzeKnight.position[1] == self.gameBoard.finalSquare.position[1]): return False return True def MoveKnight(self, knight, movement): preMovePosX, preMovePosY = knight.GetPosition() if knight.Move(movement): x, y = knight.GetPosition() self.gameBoard.boardGrid[x][y].knights.append(knight) return True return False #Initilization Classes to run the game def StartGame(self, Grid): self.GenerateBoard(Grid) self.BuildGoldenKnightsList() self.BuildBronzeKnightsList() self.otimizedGroup = BronzeGroup([], self.bronzeKnights, self.goldenKnights) self.otimizedGroup.ReadBronzeGroup() for index in range(0, 12): goldenKnight = self.goldenKnights[index] self.gameBoard.boardGrid[5 + index][0].knights.append(goldenKnight) for bronzeKnight in self.bronzeKnights: bronzeKnight.position = self.gameBoard.initialSquare.position self.gameBoard.initialSquare.knights.append(bronzeKnight) self.knightSelect = knightSelection(self.bronzeKnights, BronzeKnightsNames, BronzeKnightsColors) self.pathFinder.FindPath([x.GetPosition() for x in self.goldenKnights]) if self.runGeneticCode: while not (self.geneticAlgo.done == True): self.geneticAlgo.Initialize(self.pathFinder.path, self.bronzeKnights, self.goldenKnights) self.geneticAlgo.Execute() def BuildGoldenKnightsList(self): for index in range(0, len(goldenKnight)): self.goldenKnights.append( athenaKnight(knightTypes.GOLDENKNIGHT, GoldenKnightsNames[index], goldenKnight[index], 1)) for index in range(0, len(self.goldenKnights)): for i in range(0, len(self.gameBoard.boardGrid)): for j in range(0, len(self.gameBoard.boardGrid[i])): if self.gameBoard.boardGrid[i][ j].squareType == squareTypes.CASA[index]: self.goldenKnights[index].position = (i, j) break def BuildBronzeKnightsList(self): for index in range(0, len(bronzeKnight)): self.bronzeKnights.append( athenaKnight(knightTypes.BRONZEKNIGHT, BronzeKnightsNames[index], bronzeKnight[index], 5)) def ResetGame(self): self.goldenKnights = [] self.bronzeKnights = [] self.knightSelectedIndex = -1 def ResetAgent(self): for knight in self.bronzeKnights: knight.position = self.gameBoard.initialSquare.position knight.restTime = 0 knight.energyPoints = 5 for knight in self.goldenKnights: knight.battle = False knight.energyPoints = 1 self.player.Reset() #GameManager Display functions and Listeners to input #Show gameboard, knight selection menu and Knights def Display(self, blockSize, offsetx, offsety): self.gameBoard.Display(blockSize, offsetx, offsety) self.showKnights(blockSize, offsetx, offsety) self.knightSelect.Display() if self.findPath: self.pathFinder.Display(blockSize, offsetx, offsety) else: #print("Custo estimado da solucao: " +self.geneticAlgo.solutionTime + self.pathFinder.pathCost) if self.player == None: self.player = Agent(self.goldenKnights, self.bronzeKnights, self.pathFinder.path, self.otimizedGroup, self.gameBoard.finalSquare.position) else: if not self.player.done and self.agentReady: self.player.ExecuteMovement() #Father class ProcessingPY checks if this is valid to receive clicks #Process knight selection menu and clicks on board def mousePressedListener(self, mousex, mousey): index = self.knightSelect.mousePressedListener(mousex, mousey) if index != -1: self.knightSelectedIndex = index print("Knight selected index " + str(index)) if not self.player == None: self.player.ShowKnightStats(index) if self.gameBoard.mousePressedListener(mousex, mousey) == 0: return 0 return 1 #Just used to test knights movement def keyPressedListener(self, keyValue): print("Key pressed " + str(keyValue)) self.pathFinder.keyPressedListener(keyValue) if keyValue == "a": return self.MoveKnight( self.bronzeKnights[self.knightSelectedIndex], (-1, 0)) if keyValue == "w": return self.MoveKnight( self.bronzeKnights[self.knightSelectedIndex], (0, -1)) if keyValue == "d": return self.MoveKnight( self.bronzeKnights[self.knightSelectedIndex], (1, 0)) if keyValue == "s": return self.MoveKnight( self.bronzeKnights[self.knightSelectedIndex], (0, 1)) if keyValue == "x": self.findPath = not self.findPath if keyValue == "c": if not self.player == None: if self.player.done: print(self.player.currentCost) if keyValue == "z": self.agentReady = not self.agentReady if keyValue == "n": self.ResetAgent() return False def showKnights(self, blockSize, offsetX, offsetY): for knightIndex in range(0, len(self.bronzeKnights)): fill(BronzeKnightsColors[knightIndex][0], BronzeKnightsColors[knightIndex][1], BronzeKnightsColors[knightIndex][2]) rect( offsetX / 2 + blockSize * self.bronzeKnights[knightIndex].position[0], offsetY / 2 + blockSize * self.bronzeKnights[knightIndex].position[1], blockSize, blockSize) for goldenKnight in range(0, len(self.goldenKnights)): fill(0, 0, 0) textAlign(CENTER) #text(goldenKnight,offsetX/2 +blockSize/2 + blockSize * self.goldenKnights[goldenKnight].position[0],offsetY/2 + (blockSize+1) * self.goldenKnights[goldenKnight].position[1])#blockSize,blockSize) text( goldenKnight, offsetX / 2 + blockSize * self.goldenKnights[goldenKnight].position[0], offsetY / 2 + blockSize * self.goldenKnights[goldenKnight].position[1])