This commit is contained in:
Yohann D'ANELLO 2020-12-18 17:46:38 +01:00
parent e1918ab066
commit 0394c5d15d
5 changed files with 27 additions and 22 deletions

View File

@ -54,31 +54,32 @@ class Sunflower(FriendlyEntity):
"""
return [_("Flower power!!"), _("The sun is warm today")]
class Familiar(FightingEntity):
"""
A friendly familiar that helps the player defeat monsters.
"""
def __init__(self, maxhealth: int = 25,
def __init__(self, maxhealth: int = 25,
*args, **kwargs) -> None:
super().__init__(*args, **kwargs)
super().__init__(maxhealth=maxhealth, *args, **kwargs)
self.target = None
def act(self, p: Player, m : Map) :
def act(self, p: Player, m: Map) -> None:
"""
By default, the familiar tries to stay at distance at most 2 of the
player and if a monster comes in range 3, it focuses on the monster
and attacks it.
"""
if self.target == None:
if self.target is None:
self.target = p
if self.target == p:
for entity in m.entities:
if (self.y - entity.y) ** 2 + (self.x - entity.x) ** 2 <= 9 and \
if (self.y - entity.y) ** 2 + (self.x - entity.x) ** 2 <= 9 and\
isinstance(entity, Monster):
self.target = entity
entity.paths = dict() #Allows the paths to be calculated.
entity.paths = dict() # Allows the paths to be calculated.
break
# Familiars move according to a Dijkstra algorithm
# that targets their target.
# If they can not move and are already close to their target,
@ -90,9 +91,9 @@ class Familiar(FightingEntity):
if moved:
break
if self.distance_squared(self.target) <= 1 and \
not isinstance(self.target, Player):
not isinstance(self.target, Player):
self.map.logs.add_message(self.hit(self.target))
if self.target.dead :
if self.target.dead:
self.target.paths = None
self.target = None
break
@ -106,7 +107,8 @@ class Familiar(FightingEntity):
if move():
break
class Trumpet(Familiar) :
class Trumpet(Familiar):
"""
A class of familiars.
"""

View File

@ -60,13 +60,15 @@ class Monster(FightingEntity):
for move in moves:
if move():
break
def move(self, y: int, x:int) -> None:
def move(self, y: int, x: int) -> None:
"""
Overwrites the move function to recalculate paths.
"""
super().move(y, x)
self.recalculate_paths()
class Tiger(Monster):
"""
A tiger monster.

View File

@ -2,7 +2,6 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from random import randint
from typing import Dict, Tuple
from ..interfaces import FightingEntity, InventoryHolder

View File

@ -63,9 +63,9 @@ class Map:
"""
Registers a new entity in the map.
"""
if entity.is_familiar() :
self.entities.insert(1,entity)
else :
if entity.is_familiar():
self.entities.insert(1, entity)
else:
self.entities.append(entity)
entity.map = self
@ -100,7 +100,8 @@ class Map:
@staticmethod
def load(filename: str) -> "Map":
"""
Reads a file that contains the content of a map, and builds a Map object.
Reads a file that contains the content of a map,
and builds a Map object.
"""
with open(filename, "r") as f:
file = f.read()
@ -162,7 +163,7 @@ class Map:
for entity in self.entities:
if entity.is_familiar():
entity.act(p, self)
else :
else:
entity.act(self)
def save_state(self) -> dict:
@ -307,7 +308,7 @@ class Entity:
Uses Dijkstra algorithm to calculate best paths for other entities to
go to this entity. If self.paths is None, does nothing.
"""
if self.paths == None :
if self.paths is None:
return
distances = []
predecessors = []
@ -352,7 +353,7 @@ class Entity:
self.paths[(y, x)] = [p for d, p in sorted(
[(distances[i][(y, x)], predecessors[i][(y, x)])
for i in range(len(distances)) if (y, x) in predecessors[i]])]
def act(self, m: Map) -> None:
"""
Defines the action the entity will do at each tick.
@ -422,7 +423,7 @@ class Entity:
from squirrelbattle.entities.monsters import Tiger, Hedgehog, \
Rabbit, TeddyBear
from squirrelbattle.entities.friendly import Merchant, Sunflower, \
Trumpet
Trumpet
return [BodySnatchPotion, Bomb, Heart, Hedgehog, Rabbit, TeddyBear,
Sunflower, Tiger, Merchant, Trumpet]

View File

@ -13,7 +13,8 @@ from .translations import gettext as _
class Settings:
"""
This class stores the settings of the game.
Settings can be obtained by using for example settings.TEXTURE_PACK directly.
Settings can be obtained by using for example settings.TEXTURE_PACK
directly.
The comment can be obtained by using settings.get_comment('TEXTURE_PACK').
We can set the setting by simply using settings.TEXTURE_PACK = 'new_key'
"""