added moveFwd() and rotate() to agent

This commit is contained in:
Mateusz Drabek 2021-04-12 23:42:09 +02:00
parent 3917fbf26d
commit d77f74ca59

View File

@ -1,9 +1,11 @@
from mesa import Agent from mesa import Agent
import random import random
def dice(number): def dice(number):
return random.randint(1, number) return random.randint(1, number)
class Wall(Agent): class Wall(Agent):
def __init__(self, unique_id, model): def __init__(self, unique_id, model):
super().__init__(unique_id, model) super().__init__(unique_id, model)
@ -11,6 +13,7 @@ class Wall(Agent):
def step(self): def step(self):
pass pass
class Box(Agent): class Box(Agent):
def __init__(self, unique_id, model): def __init__(self, unique_id, model):
super().__init__(unique_id, model) super().__init__(unique_id, model)
@ -21,18 +24,21 @@ class Box(Agent):
def step(self): def step(self):
pass pass
class Weapon(): class Weapon():
def __init__(self, name, type, damage): def __init__(self, name, type, damage):
self.name = name self.name = name
self.type = type self.type = type
self.damage = damage self.damage = damage
class Armor(): class Armor():
def __init__(self, name, defence, mp): def __init__(self, name, defence, mp):
self.name = name self.name = name
self.defence = defence self.defence = defence
self.mag_protection = mp self.mag_protection = mp
class Creature(Agent): class Creature(Agent):
def __init__(self, unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g): def __init__(self, unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g):
super().__init__(unique_id, model) super().__init__(unique_id, model)
@ -48,7 +54,6 @@ class Creature(Agent):
self.isBox = False self.isBox = False
self.isCreature = True self.isCreature = True
def meleeAttack(self, opponent): def meleeAttack(self, opponent):
attackValue = self.strength + dice(6) attackValue = self.strength + dice(6)
defenseValue = opponent.strength + opponent.armor.defence defenseValue = opponent.strength + opponent.armor.defence
@ -78,6 +83,7 @@ class Creature(Agent):
else: else:
self.magicAttack(opponent) self.magicAttack(opponent)
class Player(Creature): class Player(Creature):
def __init__(self, unique_id, model, n, s, a, w, maxhp, hp, weap, arm, g, w2, w3): 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) 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.armor = arm
self.isBox = False self.isBox = False
self.isCreature = 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( possible_steps = self.model.grid.get_neighborhood(
self.pos, self.pos,
moore=True, moore=True,
@ -205,7 +229,8 @@ class Player(Creature):
def step(self): def step(self):
if self.health > 0: if self.health > 0:
self.move() self.moveFwd()
self.rotate(False)
cellmates = self.model.grid.get_cell_list_contents([self.pos]) cellmates = self.model.grid.get_cell_list_contents([self.pos])
if len(cellmates) > 1: if len(cellmates) > 1:
if isinstance(cellmates[0], Box): if isinstance(cellmates[0], Box):
@ -218,4 +243,3 @@ class Player(Creature):
print("Gold: " + str(self.gold)) print("Gold: " + str(self.gold))
else: else:
print("HP: 0 / " + str(self.maxHealth)) print("HP: 0 / " + str(self.maxHealth))