from src.agent.map.gameMap import GameMap from mesa.visualization.modules import CanvasGrid from mesa.visualization.modules.TextVisualization import TextElement from mesa.visualization.ModularVisualization import ModularServer #from src.decisiontree import create_model from src.direction import Direction from collections import defaultdict def player_representation(agent): portrayal = {"Shape": "sprites/heroE.png", "Layer": 1} if agent.isPlayer and agent.direction==Direction.N: portrayal["Shape"] = "sprites/heroN.png" elif agent.isPlayer and agent.direction == Direction.W: portrayal["Shape"] = "sprites/heroW.png" elif agent.isPlayer and agent.direction == Direction.S: portrayal["Shape"] = "sprites/heroS.png" elif agent.isBox: portrayal["Shape"] = "sprites/box.png" portrayal["Layer"] = 0 elif agent.isCreature: if agent.name=='Goblin': portrayal["Shape"] = 'sprites/goblin.png' elif agent.name=='Skeleton': portrayal["Shape"] = 'sprites/skeletonArcher.png' return portrayal def chest_content(agent): if agent.isBox: portrayal = {"Shape": "sprites/coin.jpg", "Layer": 1} return portrayal grid = CanvasGrid(player_representation, 10, 10, 700, 700) image=CanvasGrid(chest_content, 1, 1, 200, 200) class PlayerStats(TextElement): def render(self, model): hp = str(model.get_hp()) position = str(model.get_position()) gold = str(model.get_gold()) return "Player hp: {}
Current position: {}
Player's gold: {}".format( hp, position, gold) # class ChestContent(CanvasGrid): # def render(self,model): # grid_state = defaultdict(list) # portrayal = self.chest_content(agent) # portrayal["x"] = 0 # portrayal["y"] = 0 # grid_state[portrayal["Layer"]].append(portrayal) # return # class FightStats(TextElement): # def render(self, model): # if model.player.combat: # return model.player.describe_situation(model.player.opponent, model.player.strategy) # else: # return "Not fighting" server = ModularServer(GameMap, [grid,PlayerStats()], "Map", {"x": 10, "y": 10}) #create_model() server.port = 8081 server.launch()