agent walking correctly among boxes
This commit is contained in:
parent
ef8dd038a6
commit
020b1aa6a1
97
agent.py
97
agent.py
@ -1,47 +1,57 @@
|
|||||||
from mesa import Agent, Model
|
from mesa import Agent
|
||||||
import random
|
import random
|
||||||
|
|
||||||
def dice(number):
|
|
||||||
return random.randint(1,number)
|
|
||||||
|
|
||||||
class Chest(Agent):
|
def dice(number):
|
||||||
|
return random.randint(1, number)
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
self.gold = 3*dice(6)
|
self.gold=3*dice(6)
|
||||||
|
self.isBox=True
|
||||||
|
|
||||||
|
def step(self):
|
||||||
|
pass
|
||||||
|
|
||||||
class Creature(Agent):
|
class Creature(Agent):
|
||||||
def __init__(self, unique_id, model):
|
def __init__(self, unique_id, model):
|
||||||
super().__init__(unique_id, model)
|
super().__init__(unique_id, model)
|
||||||
self.strength = 3
|
self.strength = 3
|
||||||
self.agility = 3
|
self.agility = 3
|
||||||
self.wisdom = 2
|
self.wisdom = 2
|
||||||
self.maxHealth = 10
|
self.maxHealth = 10
|
||||||
self.health = 10
|
self.health = 10
|
||||||
|
|
||||||
self.gold = dice(6)
|
self.gold = dice(6)
|
||||||
self.attack_method = 1
|
self.attack_method = 1
|
||||||
|
|
||||||
def meleeAttack(self,opponent):
|
def meleeAttack(self, opponent):
|
||||||
attackValue = self.strength + dice(6)
|
attackValue = self.strength + dice(6)
|
||||||
defenseValue = max(opponent.strength,opponent.agility)
|
defenseValue = max(opponent.strength, opponent.agility)
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
def rangeAttack(self,opponent):
|
|
||||||
|
def rangeAttack(self, opponent):
|
||||||
attackValue = self.agility + dice(6)
|
attackValue = self.agility + dice(6)
|
||||||
defenseValue = opponent.agility
|
defenseValue = opponent.agility
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
def magicAttack(self,opponent):
|
|
||||||
|
def magicAttack(self, opponent):
|
||||||
attackValue = self.wisdom + dice(6)
|
attackValue = self.wisdom + dice(6)
|
||||||
defenseValue = opponent.wisdom
|
defenseValue = opponent.wisdom
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
def defaultAttack(self,opponent):
|
|
||||||
|
def defaultAttack(self, opponent):
|
||||||
if self.attack_method == 1:
|
if self.attack_method == 1:
|
||||||
self.meleeAttack(opponent)
|
self.meleeAttack(opponent)
|
||||||
elif self.attack_method == 2:
|
elif self.attack_method == 2:
|
||||||
@ -49,16 +59,19 @@ class Creature(Agent):
|
|||||||
else:
|
else:
|
||||||
self.magicAttack(opponent)
|
self.magicAttack(opponent)
|
||||||
|
|
||||||
|
|
||||||
class Player(Agent):
|
class Player(Agent):
|
||||||
def __init__(self, unique_id, model):
|
def __init__(self, unique_id, model):
|
||||||
super().__init__(unique_id, model)
|
super().__init__(unique_id, model)
|
||||||
self.strength = 3
|
self.strength = 3
|
||||||
self.agility = 3
|
self.agility = 3
|
||||||
self.wisdom = 3
|
self.wisdom = 3
|
||||||
self.maxHealth = 20
|
self.maxHealth = 20
|
||||||
self.health = 20
|
self.health = 20
|
||||||
self.gold = 0
|
self.gold = 0
|
||||||
|
self.isBox=False
|
||||||
|
|
||||||
|
|
||||||
def move(self):
|
def move(self):
|
||||||
possible_steps = self.model.grid.get_neighborhood(
|
possible_steps = self.model.grid.get_neighborhood(
|
||||||
self.pos,
|
self.pos,
|
||||||
@ -66,28 +79,31 @@ class Player(Agent):
|
|||||||
include_center=False)
|
include_center=False)
|
||||||
new_position = self.random.choice(possible_steps)
|
new_position = self.random.choice(possible_steps)
|
||||||
self.model.grid.move_agent(self, new_position)
|
self.model.grid.move_agent(self, new_position)
|
||||||
|
|
||||||
def meleeAttack(self,opponent):
|
def meleeAttack(self, opponent):
|
||||||
attackValue = self.strength + dice(6)
|
attackValue = self.strength + dice(6)
|
||||||
defenseValue = max(opponent.strength,opponent.agility)
|
defenseValue = max(opponent.strength, opponent.agility)
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
def rangeAttack(self,opponent):
|
|
||||||
|
def rangeAttack(self, opponent):
|
||||||
attackValue = self.agility + dice(6)
|
attackValue = self.agility + dice(6)
|
||||||
defenseValue = opponent.agility
|
defenseValue = opponent.agility
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
def magicAttack(self,opponent):
|
|
||||||
|
def magicAttack(self, opponent):
|
||||||
attackValue = self.wisdom + dice(6)
|
attackValue = self.wisdom + dice(6)
|
||||||
defenseValue = opponent.wisdom
|
defenseValue = opponent.wisdom
|
||||||
damage = attackValue - defenseValue
|
damage = attackValue - defenseValue
|
||||||
if damage > 0:
|
if damage > 0:
|
||||||
opponent.health = opponent.health - damage
|
opponent.health = opponent.health - damage
|
||||||
|
|
||||||
|
|
||||||
def fightOrFlight(self, opponent):
|
def fightOrFlight(self, opponent):
|
||||||
combat = True
|
combat = True
|
||||||
while combat:
|
while combat:
|
||||||
@ -135,17 +151,18 @@ class Player(Agent):
|
|||||||
self.gold = self.gold + opponent.gold
|
self.gold = self.gold + opponent.gold
|
||||||
opponent.gold = 0
|
opponent.gold = 0
|
||||||
opponent.model.grid.remove_agent(opponent)
|
opponent.model.grid.remove_agent(opponent)
|
||||||
|
|
||||||
|
|
||||||
def step(self):
|
def step(self):
|
||||||
if self.health > 0:
|
if self.health > 0:
|
||||||
self.move()
|
self.move()
|
||||||
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[1],Chest):
|
if isinstance(cellmates[0], Box):
|
||||||
self.gold = self.gold + cellmates[1].gold
|
self.gold = self.gold + cellmates[0].gold
|
||||||
cellmates[1].gold = 0
|
cellmates[1].gold = 0
|
||||||
else:
|
else:
|
||||||
opponent = cellmates[1]
|
opponent = cellmates[1]
|
||||||
fightOrFlight(self,opponent)
|
self.fightOrFlight(opponent)
|
||||||
|
|
||||||
|
|
||||||
|
22
model.py
22
model.py
@ -1,5 +1,5 @@
|
|||||||
from mesa import Model, Agent
|
from mesa import Model, Agent
|
||||||
from agent import Player
|
from agent import Player, Box
|
||||||
from mesa.time import RandomActivation
|
from mesa.time import RandomActivation
|
||||||
from mesa.space import MultiGrid
|
from mesa.space import MultiGrid
|
||||||
#from mesa.datacollection import DataCollector
|
#from mesa.datacollection import DataCollector
|
||||||
@ -39,22 +39,4 @@ class GameMap(Model):
|
|||||||
|
|
||||||
def step(self):
|
def step(self):
|
||||||
self.schedule.step()
|
self.schedule.step()
|
||||||
# self.datacollector.collect(self) #na razie niepotrzebne
|
# self.datacollector.collect(self) #na razie niepotrzebne
|
||||||
|
|
||||||
|
|
||||||
class Box(Agent):
|
|
||||||
def __init__(self, unique_id, model):
|
|
||||||
super().__init__(unique_id, model)
|
|
||||||
# self.x_coor = random.randrange(1, x + 1) # pola 1-10, zmienić na 0-9?
|
|
||||||
# self.y_coor = random.randrange(1, y + 1)
|
|
||||||
self.closed = True
|
|
||||||
self.content = 'unknown'
|
|
||||||
self.isBox=True
|
|
||||||
|
|
||||||
def open(self):
|
|
||||||
self.closed = False
|
|
||||||
self.content = random.choice(
|
|
||||||
possible_contents) # lepiej od razu przypisać content zamiast w ogóle dawać unknown?
|
|
||||||
|
|
||||||
def step(self):
|
|
||||||
pass
|
|
Loading…
Reference in New Issue
Block a user