decision tree suspended, map enlargened, boxes with names
This commit is contained in:
parent
de2e2b7e00
commit
63c9ebaf0d
21
server.py
21
server.py
@ -4,6 +4,7 @@ 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):
|
||||
@ -25,8 +26,14 @@ def player_representation(agent):
|
||||
portrayal["Shape"] = 'sprites/skeletonArcher.png'
|
||||
return portrayal
|
||||
|
||||
grid = CanvasGrid(player_representation, 10, 10, 500, 500)
|
||||
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())
|
||||
@ -34,6 +41,14 @@ class PlayerStats(TextElement):
|
||||
gold = str(model.get_gold())
|
||||
return "Player hp: {}<br>Current position: {}<br>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:
|
||||
@ -41,9 +56,9 @@ class PlayerStats(TextElement):
|
||||
# else:
|
||||
# return "Not fighting"
|
||||
server = ModularServer(GameMap,
|
||||
[grid, PlayerStats()],
|
||||
[grid,PlayerStats()],
|
||||
"Map",
|
||||
{"x": 10, "y": 10})
|
||||
create_model()
|
||||
#create_model()
|
||||
server.port = 8081
|
||||
server.launch()
|
||||
|
@ -59,14 +59,17 @@ class Player(Creature):
|
||||
'e_armor_magic_protection':nominalize(opponent.get_armor_magic_protection(), 5),
|
||||
'e_attack_type':opponent.get_attack_type().upper(),
|
||||
'strategy':"PASS"}, index=[1])
|
||||
with localconverter(robjects.default_converter + pandas2ri.converter):
|
||||
r_dataframe = robjects.conversion.py2rpy(testcase)
|
||||
robjects.globalenv['r_dataframe']=r_dataframe
|
||||
result=robjects.r('predict(fights.id3, r_dataframe)')
|
||||
return result[0]
|
||||
# with localconverter(robjects.default_converter + pandas2ri.converter):
|
||||
# # r_dataframe = robjects.conversion.py2rpy(testcase)
|
||||
# # robjects.globalenv['r_dataframe']=r_dataframe
|
||||
# # print(r_dataframe)
|
||||
# # result=robjects.r('predict(fights.id3, r_dataframe)')
|
||||
# # print(result)
|
||||
# # return result[0]
|
||||
return 'MELEE'
|
||||
|
||||
def describe_situation(self, opponent, strategy):
|
||||
situation = pd.DataFrame({# 'p_strength': self.get_strength(),
|
||||
def describe_situation(self, opponent):
|
||||
situation = {# 'p_strength': self.get_strength(),
|
||||
# 'p_agility': self.get_agility(),
|
||||
# 'p_wisdom': self.get_wisdom(),
|
||||
# 'p_health': self.get_health(),
|
||||
@ -82,7 +85,7 @@ class Player(Creature):
|
||||
'e_damage': opponent.get_damage(),
|
||||
'e_armor_defence': opponent.get_armor_defence(),
|
||||
'e_armor_magic_protection': opponent.get_armor_magic_protection(),
|
||||
'e_attack_type': opponent.get_attack_type().upper()}, index=[1])
|
||||
'e_attack_type': opponent.get_attack_type().upper()}
|
||||
return situation
|
||||
|
||||
def melee_attack(self, opponent):
|
||||
@ -248,7 +251,7 @@ class Player(Creature):
|
||||
else:
|
||||
self.opponent = cellmates[0]
|
||||
self.strategy=self.predict_strategy(self.opponent)
|
||||
print("Current enemy stats:\n", self.describe_situation(self.opponent, self.strategy))
|
||||
print("Current enemy stats:\n", self.describe_situation(self.opponent))
|
||||
print("Strategy returned from the tree: ", self.strategy)
|
||||
self.fight_or_flight(self.opponent, self.strategy)
|
||||
else:
|
||||
|
@ -18,8 +18,7 @@ x = 10
|
||||
y = 10
|
||||
step_counter = 0
|
||||
boxes_number = 5
|
||||
creatures_number = 25
|
||||
|
||||
creatures_number = 35
|
||||
|
||||
class GameMap(Model):
|
||||
def __init__(self, x, y):
|
||||
@ -46,7 +45,7 @@ class GameMap(Model):
|
||||
pass
|
||||
|
||||
for i in range(self.boxes_number,
|
||||
self.boxes_number + self.creatures_number-10): # taki range, żeby każdy agent miał poprawne unique_id
|
||||
self.boxes_number + self.creatures_number-20): # taki range, żeby każdy agent miał poprawne unique_id
|
||||
# creature = Creature(i, self)
|
||||
creature = Creature(i, self, "Goblin",
|
||||
roll_the_dice(3), roll_the_dice(3), roll_the_dice(3), roll_the_dice(3), roll_the_dice(3),
|
||||
@ -59,9 +58,9 @@ class GameMap(Model):
|
||||
self.schedule.add(creature)
|
||||
else:
|
||||
pass
|
||||
for i in range(self.boxes_number + self.creatures_number-10, self.creatures_number): # taki range, żeby każdy agent miał poprawne unique_id
|
||||
for i in range(self.boxes_number + self.creatures_number-20, self.creatures_number): # taki range, żeby każdy agent miał poprawne unique_id
|
||||
creature = Creature(i, self, "Skeleton",
|
||||
roll_the_dice(5), roll_the_dice(5), roll_the_dice(5), roll_the_dice(5), roll_the_dice(5),
|
||||
roll_the_dice(7), roll_the_dice(7), roll_the_dice(7), roll_the_dice(7), roll_the_dice(7),
|
||||
WR4, A8, roll_the_dice(10))
|
||||
|
||||
x = self.random.randrange(self.grid.width)
|
||||
|
@ -1,7 +1,7 @@
|
||||
from mesa import Agent
|
||||
from .dice.dice import roll_the_dice
|
||||
|
||||
|
||||
chest_names=['c'+str(i)+'.jpg' for i in range(1,10)]
|
||||
class Box(Agent):
|
||||
def __init__(self, unique_id, model):
|
||||
super().__init__(unique_id, model)
|
||||
@ -12,3 +12,4 @@ class Box(Agent):
|
||||
|
||||
def step(self):
|
||||
pass
|
||||
|
||||
|
@ -61,8 +61,8 @@ class Creature(Agent):
|
||||
attack_value = self.agility + roll_the_dice(6)
|
||||
defense_value = opponent.agility
|
||||
damage = attack_value - defense_value
|
||||
if (damage > 0) and (damage + self.weapon1.damage - opponent.armor.defence > 0):
|
||||
opponent.health = opponent.health - (damage + self.weapon1.damage - opponent.armor.defence)
|
||||
if (damage > 0) and (damage + self.weapon1.get_damage() - opponent.armor.get_defence() > 0):
|
||||
opponent.health = opponent.health - (damage + self.weapon1.get_damage() - opponent.armor.get_defence())
|
||||
print("damage done by the monster: ", damage)
|
||||
def magic_attack(self, opponent):
|
||||
attack_value = self.wisdom + roll_the_dice(6)
|
||||
@ -74,7 +74,7 @@ class Creature(Agent):
|
||||
def default_attack(self, opponent):
|
||||
if self.weapon1.get_type() == "Meele":
|
||||
self.melee_attack(opponent)
|
||||
elif self.weapon1.get_type() == "Range":
|
||||
elif self.weapon1.get_type() == "Ranged":
|
||||
self.range_attack(opponent)
|
||||
else:
|
||||
self.magic_attack(opponent)
|
||||
|
@ -7,10 +7,12 @@ def create_model():
|
||||
robjects.r('WPM("refresh-cache")')
|
||||
robjects.r('WPM("install-package", "simpleEducationalLearningSchemes")')
|
||||
robjects.r('WPM("load-package", "simpleEducationalLearningSchemes")')
|
||||
#print("dupa")
|
||||
robjects.r('ID3<-make_Weka_classifier("weka/classifiers/trees/Id3")')
|
||||
robjects.r('fights<-read.arff("C:/Users/X260/Downloads/currentdata.arff")')
|
||||
robjects.r('fights.id3 <- ID3(strategy ~ p_strength + p_agility + p_wisdom+ p_health + '
|
||||
'p_melee_damage + p_ranged_damage + p_magic_damage + p_armor_defence + p_armor_magic_protection + '
|
||||
'e_strength+ e_agility + e_wisdom + e_health + e_damage + e_armor_defence + e_armor_magic_protection + '
|
||||
'e_attack_type, data = fights)')
|
||||
# robjects.r('.jcache(fights.id3)')
|
||||
# robjects.r('save(fights.id3, file="dectre.rda)')
|
||||
#todo: zapisać w rpythonie do pliku, raz zrobić i nie odpalać za każdym razem w serverze
|
@ -14,16 +14,16 @@ WM10 = Weapon("Axe", "Melee", 3)
|
||||
WM11 = Weapon("Axe", "Melee", 3)
|
||||
WM12 = Weapon("Battle axe", "Melee", 4)
|
||||
|
||||
WR1 = Weapon("Sling", "Range", 1)
|
||||
WR2 = Weapon("Sling", "Range", 1)
|
||||
WR3 = Weapon("Sling", "Range", 1)
|
||||
WR4 = Weapon("Bow", "Range", 2)
|
||||
WR5 = Weapon("Bow", "Range", 2)
|
||||
WR6 = Weapon("Bow", "Range", 2)
|
||||
WR7 = Weapon("Bow", "Range", 2)
|
||||
WR8 = Weapon("Longbow", "Range", 3)
|
||||
WR9 = Weapon("Longbow", "Range", 3)
|
||||
WR10 = Weapon("Crossbow", "Range", 4)
|
||||
WR1 = Weapon("Sling", "Ranged", 1)
|
||||
WR2 = Weapon("Sling", "Ranged", 1)
|
||||
WR3 = Weapon("Sling", "Ranged", 1)
|
||||
WR4 = Weapon("Bow", "Ranged", 2)
|
||||
WR5 = Weapon("Bow", "Ranged", 2)
|
||||
WR6 = Weapon("Bow", "Ranged", 2)
|
||||
WR7 = Weapon("Bow", "Ranged", 2)
|
||||
WR8 = Weapon("Longbow", "Ranged", 3)
|
||||
WR9 = Weapon("Longbow", "Ranged", 3)
|
||||
WR10 = Weapon("Crossbow", "Ranged", 4)
|
||||
|
||||
S1 = Weapon("Push", "Magic", 2)
|
||||
S2 = Weapon("Push", "Magic", 2)
|
||||
@ -61,7 +61,7 @@ A16 = Armor("Magical Plate Armor", 3, 2)
|
||||
# C10 = Box(A8)
|
||||
# C11 = Box(A12)
|
||||
# C12 = Box(A14)
|
||||
|
||||
#
|
||||
# Gracz = Player(1000, self, "Janusz",3,3,3,20,20,WM1,A1,0,WR1,S1)
|
||||
# def __init__(self, unique_id, model, n, s, a, w, max_hp, hp, weapon, arm, g):
|
||||
# M1 = Creature("Goblin",2,2,1,10,10,WM2,A2,dice(6))
|
||||
|
Loading…
Reference in New Issue
Block a user