Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
---------------------------------enemies.py--------------------------------- import pygame import random from message import * from projectile import * class Enemy(pygame.sprite.Sprite): def __init__(self, path, pos, level): super().__init__() self.path = path self.image = pygame.image.load(path) self.imagePath = path self.rect = self.image.get_rect() self.rect.center = pos self.heading = None self.movement = pygame.math.Vector2(0, 2) self.movement.rotate_ip(random.randint(0, 360)) self.level = level self.health = 10 self.attack_damage = 3 self.defense = 1 self.reload = 20 self.target = None self.projectile_cooldown = 180 # 3 seconds at 60fps self.projectile_timer = random.randint(0, self.projectile_cooldown) # staggered firing def update(self): if pygame.sprite.collide_rect(self, self.level.player) and self.level.player.alive: self.target = self.level.player else: self.target = None if self.target is not None: self.reload -= 1 if self.reload == 0: self.reload = 60 self.attack(self.target) return self.rect.move_ip(self.movement) if len(pygame.sprite.spritecollide(self, self.level.walls, False)) >= 1: self.movement.rotate_ip(180) self.rect.move_ip(self.movement) self.movement.rotate_ip(random.randint(0, 360)) self.projectile_timer = self.projectile_timer - 1 if self.projectile_timer <= 0: self.projectile_timer = self.projectile_cooldown self.fire_projectiles() def fire_projectiles(self): directions = [ (0, -1), # up (0, 1), # down (-1, 0), # left (1, 0), # right ] for dir in directions: projectile = Projectile( pos=self.rect.center, direction=dir, speed=4, damage=2, level=self.level, imagepath='images/fireball.gif' ) self.level.projectiles.add(projectile) def attack(self, player): player.defend(self.attack_damage) def defend(self, damage): if random.randint(1, 20) > self.defense: self.health -= damage if self.health <= 0: self.kill() if len(self.level.enemies) == 0 and not self.level.exit.unlocked: self.level.messages.add(Message("Level Cleared,", (self.rect.centerx, self.rect.centery-30))) self.level.messages.add(Message("Exit Unlocked!", self.rect.center)) self.level.exit.unlock() return True
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)