X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=erdslangetjie%2Fplayer.py;h=7c80263243c094b611b432c1ab70053e9510c3be;hb=6bbed02caa01687a8d55c8ac36ec761a3025db93;hp=6fc26e887dcd2a4e057293e3dbe204b49024acd3;hpb=191d328780140fad352f168ecb03069f10b4459b;p=erdslangetjie.git diff --git a/erdslangetjie/player.py b/erdslangetjie/player.py index 6fc26e8..7c80263 100644 --- a/erdslangetjie/player.py +++ b/erdslangetjie/player.py @@ -3,28 +3,81 @@ from erdslangetjie.data import load_image -class PlayerSprite(object): +class GameSprite(object): def __init__(self): self.pos = (0, 0) self.sprite = None - def move(self, direction): - self.pos = (self.pos[0] + direction[0], self.pos[1] + direction[1]) - def get_image(self): return self.sprite + def get_texture(self): + return self.sprite.texture + + +class FigureSprite(GameSprite): + + def can_move(self, direction, level): + '''Check if we can move in the given direction''' + cand_pos = (self.pos[0] + direction[0], self.pos[1] + direction[1]) + return not level.blocked(cand_pos) + -class ThePlayer(PlayerSprite): +class ThePlayer(FigureSprite): def __init__(self): super(ThePlayer, self).__init__() self.sprite = load_image('sprites/player.png') + def move(self, direction, level): + if self.can_move(direction, level): + self.pos = (self.pos[0] + direction[0], self.pos[1] + direction[1]) + return True + return False -class Nemesis(PlayerSprite): + +class Nemesis(FigureSprite): def __init__(self): - super(ThePlayer, self).__init__() + super(Nemesis, self).__init__() self.sprite = load_image('sprites/nemesis.png') + self.reset_pos() + self.deadends = [] + self.been = [] + + def move(self, level, player_pos): + if not self.on_board(): + # Advance towards the map a step at a time + self.pos = (self.pos[0] + 1, self.pos[1]) + if self.on_board(): + self.pos = level.enter_pos + return False + # AI goes here + # First, if we're standing next to a gate, we attack it + neighbours = [(self.pos[0] + 1, self.pos[1]), + (self.pos[0] - 1, self.pos[1]), + (self.pos[0], self.pos[1] + 1), + (self.pos[0], self.pos[1] - 1)] + for cand in neighbours: + if level.is_gate(cand) and level.blocked(cand): + level.damage_gate(cand) + return True + steps = 0 + self.been.append(self.pos) + for direction in [(1, 0), (-1, 0), (0, -1), (0, 1)]: + new_pos = (self.pos[0] + direction[0], self.pos[1] + direction[1]) + if self.can_move(direction, level) and new_pos not in self.been: + self.pos = new_pos + self.been.append(new_pos) + steps += 1 + break + if steps == 0: + self.been = [] + return True + + def reset_pos(self): + self.pos = (-10, 0) + + def on_board(self): + return self.pos[0] >= 0