From d77f74ca596e69a8240f841b82f56951895c34e3 Mon Sep 17 00:00:00 2001 From: Mateusz Drabek Date: Mon, 12 Apr 2021 23:42:09 +0200 Subject: [PATCH] added moveFwd() and rotate() to agent --- agent2.py | 86 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/agent2.py b/agent2.py index 857cb6c..be7bfbd 100644 --- a/agent2.py +++ b/agent2.py @@ -1,8 +1,10 @@ from mesa import Agent import random + def dice(number): - return random.randint(1,number) + return random.randint(1, number) + class Wall(Agent): def __init__(self, unique_id, model): @@ -11,28 +13,32 @@ class Wall(Agent): def step(self): pass + class Box(Agent): def __init__(self, unique_id, model): super().__init__(unique_id, model) - self.gold=3*dice(6) - self.isBox=True - self.isCreature=False + self.gold = 3 * dice(6) + self.isBox = True + self.isCreature = False def step(self): pass - + + class Weapon(): - def __init__(self,name,type,damage): + def __init__(self, name, type, damage): self.name = name self.type = type self.damage = damage - + + class Armor(): - def __init__(self,name,defence,mp): + def __init__(self, name, defence, mp): self.name = name self.defence = defence self.mag_protection = mp - + + class Creature(Agent): def __init__(self, unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g): super().__init__(unique_id, model) @@ -46,31 +52,30 @@ class Creature(Agent): self.weapon1 = weap self.armor = arm self.isBox = False - self.isCreature=True + self.isCreature = True - - def meleeAttack(self,opponent): + def meleeAttack(self, opponent): attackValue = self.strength + dice(6) defenseValue = opponent.strength + opponent.armor.defence damage = attackValue - defenseValue if damage > 0: opponent.health = opponent.health - (damage + self.weapon1.damage) - def rangeAttack(self,opponent): + def rangeAttack(self, opponent): attackValue = self.agility + dice(6) defenseValue = opponent.agility damage = attackValue - defenseValue if (damage > 0) and (damage + self.weapon1.damage - opponent.armor.defence > 0): opponent.health = opponent.health - (damage + self.weapon1.damage - opponent.armor.defence) - - def magicAttack(self,opponent): + + def magicAttack(self, opponent): attackValue = self.wisdom + dice(6) defenseValue = opponent.wisdom damage = attackValue - defenseValue if (damage > 0) and (damage + self.weapon1.damage - opponent.armor.mag_protection > 0): opponent.health = opponent.health - (damage + self.weapon1.damage - opponent.armor.mag_protection) - def defaultAttack(self,opponent): + def defaultAttack(self, opponent): if self.weapon1.type == "Meele": self.meleeAttack(opponent) elif self.weapon1.type == "Range": @@ -78,6 +83,7 @@ class Creature(Agent): else: self.magicAttack(opponent) + class Player(Creature): def __init__(self, unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g, w2, w3): super().__init__(unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g) @@ -94,8 +100,26 @@ class Player(Creature): self.armor = arm self.isBox = False self.isCreature = False + self.directions = [[0, 1], [1, 0], [0, -1], [-1, 0]] + self.direction = 0 - def move(self): + def rotate(self, clockwise=True): + if clockwise: + self.direction = (self.direction + 1) % 4 + else: + self.direction = (self.direction + 3) % 4 + + def moveFwd(self): + possible_steps = self.model.grid.get_neighborhood( + self.pos, + moore=False, + include_center=False) + new_position = ( + self.pos[0] + self.directions[self.direction][0], self.pos[1] + self.directions[self.direction][1]) + if new_position in possible_steps: + self.model.grid.move_agent(self, new_position) + + def move(self): # OLD possible_steps = self.model.grid.get_neighborhood( self.pos, moore=True, @@ -103,27 +127,27 @@ class Player(Creature): new_position = self.random.choice(possible_steps) self.model.grid.move_agent(self, new_position) - def meleeAttack(self,opponent): + def meleeAttack(self, opponent): attackValue = self.strength + dice(6) defenseValue = opponent.strength + opponent.armor.defence damage = attackValue - defenseValue if damage > 0: opponent.health = opponent.health - (damage + self.weapon1.damage) - def rangeAttack(self,opponent): + def rangeAttack(self, opponent): attackValue = self.agility + dice(6) defenseValue = opponent.agility damage = attackValue - defenseValue if (damage > 0) and (damage + self.weapon2.damage - opponent.armor.defence > 0): opponent.health = opponent.health - (damage + self.weapon2.damage - opponent.armor.defence) - - def magicAttack(self,opponent): + + def magicAttack(self, opponent): attackValue = self.wisdom + dice(6) defenseValue = opponent.wisdom damage = attackValue - defenseValue if (damage > 0) and (damage + self.weapon3.damage - opponent.armor.mag_protection > 0): opponent.health = opponent.health - (damage + self.weapon3.damage - opponent.armor.mag_protection) - + def fightOrFlight(self, opponent): combat = True while combat: @@ -180,8 +204,8 @@ class Player(Creature): opponent.gold = 0 opponent.model.grid.remove_agent(opponent) print("Fight won") - - def openChest(self,chest): + + def openChest(self, chest): self.gold = self.gold + chest.gold print("Chest opened. Gold inside:", chest.gold) chest.gold = 0 @@ -202,20 +226,20 @@ class Player(Creature): # buffer = self.weapon3 # self.weapon3 = chest.loot # chest.loot = buffer - + def step(self): if self.health > 0: - self.move() + self.moveFwd() + self.rotate(False) cellmates = self.model.grid.get_cell_list_contents([self.pos]) if len(cellmates) > 1: - if isinstance(cellmates[0],Box): + if isinstance(cellmates[0], Box): self.openChest(cellmates[0]) else: opponent = cellmates[0] print("Fighting") self.fightOrFlight(opponent) - print("HP: "+str(self.health)+" / "+str(self.maxHealth)) - print("Gold: "+str(self.gold)) + print("HP: " + str(self.health) + " / " + str(self.maxHealth)) + print("Gold: " + str(self.gold)) else: - print("HP: 0 / "+str(self.maxHealth)) - \ No newline at end of file + print("HP: 0 / " + str(self.maxHealth))