Example #1
0
 def __init__(self, game, pos1, pos2, speed, sizeScale=1):
     pygame.sprite.Sprite.__init__(self)
     self.game = game
     self.image = pygame.transform.scale(Enemy.orig_image,
                                         Enemy.size * sizeScale)
     self.rect = self.image.get_rect(center=pos1)
     self.pos1, self.pos2 = vector.Vector(pos1), vector.Vector(pos2)
     self.dist = (self.pos2 - self.pos1).length()
     self.speed = speed
     self.direction = (self.pos2 - self.pos1).normalized()
     self.state = Enemy.toP2
Example #2
0
 def update(self):
     self.rect.move_ip(self.direction * self.speed)
     if self.state == Enemy.toP2 and (vector.Vector(self.rect.center) -
                                      self.pos1).length() >= self.dist:
         self.direction *= -1
         self.state = Enemy.toP1
     elif self.state == Enemy.toP1 and (vector.Vector(self.rect.center) -
                                        self.pos2).length() >= self.dist:
         self.direction *= -1
         self.state = Enemy.toP2
     if self.rect.colliderect(self.game.player):
         self.game.restartLevel()
Example #3
0
    def loadLevel(self, path):
        screenRect = self.game.screen.get_rect()
        tree = xml.etree.ElementTree.parse(path)
        root = tree.getroot()
        # level.name=root.get("name")
        size = _makeVec(root.get("size"))

        scale = min(screenRect.width / size.x,
                    screenRect.height / size.y)
        levelRect = pygame.Rect((0, 0), size * scale)
        levelRect.center = screenRect.center
        offset = vector.Vector(levelRect.topleft)

        self.game.player = self.makePlayer(_makeVec(root.get("playerPos")), scale, offset)
        self.game.orig_player_pos = self.game.player.rect.center

        for element in root.iterfind("wall"):
            self.makeWall(_makeVec(element.get("pos")),
                _makeVec(element.get("size")),
                scale, offset)
        for element in root.iterfind("enemy"):
            self.makeEnemy(_makeVec(element.get("pos1")),
                _makeVec(element.get("pos2")),
                int(element.get("speed")),
                scale, offset)
        for element in root.iterfind("food"):
            self.makeFood(_makeVec(element.get("pos")),
                scale, offset)
        for element in root.iterfind("target"):
            self.makeTarget(_makeVec(element.get("pos")),
                _makeVec(element.get("size")),
                scale, offset)
Example #4
0
class Enemy(pygame.sprite.Sprite):
    size = vector.Vector(16, 16)
    orig_image = pygame.image.load(
        os.path.join("resources", "img", "Enemy.png"))
    toP1, toP2 = 1, 2

    def __init__(self, game, pos1, pos2, speed, sizeScale=1):
        pygame.sprite.Sprite.__init__(self)
        self.game = game
        self.image = pygame.transform.scale(Enemy.orig_image,
                                            Enemy.size * sizeScale)
        self.rect = self.image.get_rect(center=pos1)
        self.pos1, self.pos2 = vector.Vector(pos1), vector.Vector(pos2)
        self.dist = (self.pos2 - self.pos1).length()
        self.speed = speed
        self.direction = (self.pos2 - self.pos1).normalized()
        self.state = Enemy.toP2

    def update(self):
        self.rect.move_ip(self.direction * self.speed)
        if self.state == Enemy.toP2 and (vector.Vector(self.rect.center) -
                                         self.pos1).length() >= self.dist:
            self.direction *= -1
            self.state = Enemy.toP1
        elif self.state == Enemy.toP1 and (vector.Vector(self.rect.center) -
                                           self.pos2).length() >= self.dist:
            self.direction *= -1
            self.state = Enemy.toP2
        if self.rect.colliderect(self.game.player):
            self.game.restartLevel()
Example #5
0
class Food(pygame.sprite.Sprite):
    size = vector.Vector(8, 8)
    orig_image = pygame.image.load(os.path.join("resources", "img",
                                                "Food.png"))

    def __init__(self, game, pos, sizeScale=1):
        pygame.sprite.Sprite.__init__(self)
        self.game = game
        self.image = pygame.transform.scale(Food.orig_image,
                                            Food.size * sizeScale)
        self.rect = self.image.get_rect(center=pos)

    def update(self):
        if self.rect.colliderect(self.game.player):
            self.kill()
Example #6
0
class Player(pygame.sprite.Sprite):
    size = vector.Vector(16, 16)
    orig_image = pygame.image.load(
        os.path.join("resources", "img", "Player.png"))
    orig_speed = 5

    def __init__(self, game, pos, sizeScale=1):
        pygame.sprite.Sprite.__init__(self)
        self.game = game
        self.image = Player.orig_image
        self.rect = self.image.get_rect(center=pos)
        self.speed = Player.orig_speed
        self.scale(sizeScale)

    def scale(self, scale):
        self.image = pygame.transform.scale(Player.orig_image,
                                            Player.size * scale)
        self.rect = self.image.get_rect(center=self.rect.center)
        self.speed = Player.orig_speed * scale

    def update(self):
        if self.game.pressedKeys[pygame.K_UP]:
            self.move(0, -self.speed)
        elif self.game.pressedKeys[pygame.K_DOWN]:
            self.move(0, self.speed)
        if self.game.pressedKeys[pygame.K_RIGHT]:
            self.move(self.speed, 0)
        elif self.game.pressedKeys[pygame.K_LEFT]:
            self.move(-self.speed, 0)

    def move(self, x, y):
        self.rect.move_ip(x, y)
        for wall in pygame.sprite.spritecollide(self, self.game.walls, False):
            if x > 0:
                self.rect.right = wall.rect.left
            elif x < 0:
                self.rect.left = wall.rect.right
            if y > 0:
                self.rect.bottom = wall.rect.top
            elif y < 0:
                self.rect.top = wall.rect.bottom
Example #7
0
def _makeVec(x, sep="x"):
    return vector.Vector(int(i) for i in x.split(sep))
Example #8
0
 def makeTarget(self, pos, size, scale=1, offset=vector.Vector(0, 0)):
     sprite = sprites.Target(self.game, pos * scale + offset, size * scale)
     self.game.all.add(sprite)
     self.game.targets.add(sprite)
     return sprite
Example #9
0
 def makeFood(self, pos, scale=1, offset=vector.Vector(0, 0)):
     sprite = sprites.Food(self.game, pos * scale + offset, scale)
     self.game.all.add(sprite)
     self.game.food.add(sprite)
     return sprite
Example #10
0
 def makeEnemy(self, pos1, pos2, speed, scale=1, offset=vector.Vector(0, 0)):
     sprite = sprites.Enemy(self.game, pos1 * scale + offset, pos2 * scale + offset, speed * scale, scale)
     self.game.all.add(sprite)
     self.game.enemies.add(sprite)
     return sprite
Example #11
0
 def makeWall(self, pos, size, scale=1, offset=vector.Vector(0, 0)):
     sprite = sprites.Wall(self.game, pos * scale + offset, size * scale)
     self.game.all.add(sprite)
     self.game.walls.add(sprite)
     return sprite