class EnemyTower(GameObject): def __init__(self, x, y): GameObject.__init__(self, x, y) # 1 load image self.image_urls = [ "assets/images/sprite/enemy/tower/tower1.png", "assets/images/sprite/enemy/tower/tower2.png", "assets/images/sprite/enemy/tower/tower3.png", "assets/images/sprite/enemy/tower/tower4.png" ] self.renderer = Animation(self.image_urls, True) self.frame_counter = FrameCounter(100) def update(self): self.frame_counter.run() if self.frame_counter.expired: for game_object in game_objects: if type(game_object) == Player: pygame.mixer.Channel(4).play( pygame.mixer.Sound("music/player/tower shoot.wav")) bullet_enemy = BulletEnemy(11 * 16, 15 * 16, game_object.x, game_object.y) add(bullet_enemy) self.frame_counter.reset() def render(self, canvas): GameObject.render(self, canvas)
def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/player-bullet.png") self.box_collider = BoxCollider(40, 40) self.velocity = (0, 0) self.returning = False self.counter = FrameCounter(60)
class Animation: def __init__(self, image_urls, loop=False, frame_delay=3): self.images = [ pygame.image.load(image_url) for image_url in image_urls ] self.image_index = 0 self.finished = False self.frame_counter = FrameCounter(frame_delay) self.loop = loop def render(self, canvas, x, y): if not self.finished or self.loop: # 1 Display current image current_image = self.images[self.image_index] width = current_image.get_width() height = current_image.get_height() render_pos = (x - width / 2, y - height / 2) canvas.blit(current_image, render_pos) # 2 Run frame counter self.frame_counter.run() # 3 If frame counter expires, change image if self.frame_counter.expired: self.frame_counter.reset() if self.image_index < len(self.images) - 1: self.image_index += 1 elif self.loop: self.image_index = 0 else: self.finished = True
def __init__(self, x, y, input_manager): GameObject.__init__(self, x, y) self.image = pygame.image.load('image/player.png') self.input_manager = input_manager self.shoot_lock = False self.counter = FrameCounter(30) self.hp = 10
class Carrot(GameObject): def __init__(self, x, y): GameObject.__init__(self, x, y) self.box_collider = BoxCollider(64, 32) self.renderer = Animation([ "images/carrot_animation/carrot1.png", "images/carrot_animation/carrot2.png", "images/carrot_animation/carrot3.png", "images/carrot_animation/carrot4.png", "images/carrot_animation/carrot5.png", "images/carrot_animation/carrot6.png" ], loop=True) self.spawn_counter = FrameCounter(50) def update(self): GameObject.update(self) self.spawn_counter.run() if self.spawn_counter.expired: self.x -= 20 self.deactivate_if_needed() # self.spawn_counter.reset() else: self.x -= 0 def deactivate_if_needed(self): if self.x + 64 < 0: self.spawn_counter.reset() self.deactivate()
def __init__(self, x, y): GameObject.__init__(self, x, y) self.renderer = Animation(["images/warning_sign.png"], loop=True) self.box_collider = BoxCollider(64, 64) self.count = FrameCounter(50) pygame.mixer.Channel(3).play( pygame.mixer.Sound("music/warning (1).wav"))
class GameEvent(game_object.GameObject): def __init__(self): game_object.GameObject.__init__(self, 0, 0) self.delay = FrameCounter(random.randint(200, 300)) self.platform_spawner = PlatformSpawner() game_object.add(self.platform_spawner) self.platform_flying_spawner = PlatformFlyingSpawner() game_object.add(self.platform_flying_spawner) self.platform_flying_spawner.counter.expired = True self.carrot_spawner = CarrotSpawner() game_object.add(self.carrot_spawner) self.items_spawner = ItemsSpawner() game_object.add(self.items_spawner) def update(self): self.delay.run() if self.delay.expired: self.platform_spawner.counter_blank.reset() self.platform_flying_spawner.counter.reset() self.delay.reset()
class Animation: def __init__(self, images_url, loop=False): self.images = [ pygame.image.load(images_url) for images_url in images_url ] self.image_index = 0 self.finished = False self.frame_counter = FrameCounter(10) self.loop = loop def render(self, canvas, x, y): if not self.finished or self.loop: current_image = self.images[self.image_index] width = current_image.get_width() height = current_image.get_height() render_pos = (x - width / 2, y - height / 2) canvas.blit(current_image, render_pos) self.frame_counter.run() if self.frame_counter.expired: self.frame_counter.reset() if self.image_index < len(self.images) - 1: self.image_index += 1 elif self.loop: self.image_index = 0 else: self.finished = True
def __init__(self): GameObject.__init__(self, 0, 0) self.counter_continue = FrameCounter(20) self.counter_blank = FrameCounter(game_object.blank_time) self.renderer = None self.is_spawning = True self.counter_blank.expired = True
def __init__(self, images_url, loop=False): self.images = [ pygame.image.load(images_url) for images_url in images_url ] self.image_index = 0 self.finished = False self.frame_counter = FrameCounter(10) self.loop = loop
def __init__(self, image_urls, loop=False, frame_delay=3): self.images = [ pygame.image.load(image_url) for image_url in image_urls ] self.image_index = 0 self.finished = False self.frame_counter = FrameCounter(frame_delay) self.loop = loop
def __init__(self, x, y, input_manager): GameObject.__init__(self, x, y) self.input_manager = input_manager self.shoot_lock = False self.counter = FrameCounter(30) self.renderer = PlayerAnimator() self.dx = 0 self.dy = 0
def __init__(self, x, y, input_manager): GameObject.__init__(self, x, y) self.input_manager = input_manager self.image = pygame.image.load("images/player/player1.png") self.counter1 = FrameCounter(120) self.counter2 = FrameCounter(120) self.has_shoot1 = True self.has_shoot2 = True self.dog_count = 0 self.box_collider = BoxCollider(70, 70)
class Player(GameObject): def __init__(self, x, y, input_manager): GameObject.__init__(self, x, y) self.image = pygame.image.load('image/player.png') self.input_manager = input_manager self.shoot_lock = False self.counter = FrameCounter(30) self.hp = 10 def update(self): GameObject.update(self) self.move() self.shoot() def move(self): dx = 0 dy = 0 if self.input_manager.right_pressed: if self.x + 3 > 775: dx = 0 else: dx += 3 if self.input_manager.left_pressed: if self.x - 3 < 27: dx = 0 else: dx -= 3 if self.input_manager.down_pressed: if self.y + 3 > 600: dy = 0 else: dy += 3 if self.input_manager.up_pressed: if self.y - 3 < 40: dy = 0 else: dy -= 3 self.x += dx self.y += dy def shoot(self): if self.input_manager.x_pressed and not self.shoot_lock: game_object.recycle(PlayerBullet, self.x, self.y - 40) self.shoot_lock = True if self.shoot_lock: self.counter.run() if self.counter.expired: self.shoot_lock = False self.counter.reset()
def update(self): GameObject.update(self) self.frame_counter.run() if tower_defense.game_object.hasTower == True: if self.frame_counter.flag: tower_defense.game_object.hasEnemy = True enemy = Enemy(425, 0) add(enemy) self.frame_counter.reset() if tower_defense.game_object.score >= 60 and tower_defense.game_object.score < 65: self.frame_counter = FrameCounter(15)
def __init__(self, x, y): GameObject.__init__(self, x, y) # 1 load image self.image_urls = [ "assets/images/sprite/enemy/tower/tower1.png", "assets/images/sprite/enemy/tower/tower2.png", "assets/images/sprite/enemy/tower/tower3.png", "assets/images/sprite/enemy/tower/tower4.png" ] self.renderer = Animation(self.image_urls, True) self.frame_counter = FrameCounter(100)
class EnemySpawner(GameObject): def __init__(self): GameObject.__init__(self, 0, 0) self.counter = FrameCounter(100) # 2 / 0.017 def update(self): self.counter.run() if self.counter.expired: enemy = Enemy(100, 0) game_object.add(enemy) self.counter.reset()
class Enemy(GameObject): def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/enemy/bacteria1.png") self.box_collider = BoxCollider(40, 40) self.counter = FrameCounter(70) self.returning = False self.velocity = (0, 0) self.pushed = False # not stun self.stun_timer = FrameCounter(20) self.stun_timer.count = 20 def update(self): GameObject.update(self) self.move() def move(self): if self.stun_timer.expired: try: px, py = game_object.position distance = (get_distance((self.x, self.y), (px, py))) self.velocity = ((-px + self.x) / distance * -1, (-py + self.y) / distance * -1) except ZeroDivisionError: pass else: self.stun_timer.run() print(self.stun_timer.count) self.return_to_player() vx, vy = self.velocity # print(self.velocity) self.x += vx self.y += vy def return_to_player(self): if self.is_active and self.returning: try: px, py = game_object.position distance = (get_distance((self.x, self.y), (px, py))) # print(distance) self.velocity = ((-px + self.x) / distance * -4, (-py + self.y) / distance * -4) except ZeroDivisionError: pass def clean(self): self.velocity = (0, 0) self.returning = False self.pushed = False
def __init__(self, x, y): GameObject.__init__(self, x, y) self.box_collider = BoxCollider(32, 32) self.renderer = PlayerAnimator() self.frame_counter = FrameCounter(120) self.counter = FrameCounter(120) self.black_screen = False self.dx = 0 self.dy = 0 self.win = False self.step = 8 self.overlap = False
def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/enemy.png") self.box_collider = BoxCollider(100, 100) self.returning = False self.velocity = (0, 0) self.counter = FrameCounter(100) self.spawn_lock = False # not stun self.stun_timer = FrameCounter(90) self.stun_timer.count = 90
def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/enemy/bacteria1.png") self.box_collider = BoxCollider(40, 40) self.counter = FrameCounter(70) self.returning = False self.velocity = (0, 0) self.pushed = False # not stun self.stun_timer = FrameCounter(20) self.stun_timer.count = 20
class Shot1(GameObject): def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/player-bullet.png") self.box_collider = BoxCollider(40, 40) self.velocity = (0, 0) self.returning = False self.counter = FrameCounter(60) def update(self): GameObject.update(self) self.move() self.physics() self.return_to_player() def move(self): self.vx, self.vy = self.velocity self.y += self.vy self.x += self.vx # self.counter.reset() self.counter.run() if self.counter.expired: self.returning = True self.counter.reset() def physics(self): if self.is_active: dog = game_object.collide_with(self.box_collider, Dog) if dog is not None: # self.deactivate() # dog.deactivate() self.returning = True dog.returning = True dog.stun_timer.reset() enemy = game_object.collide_with(self.box_collider, Enemy) if enemy is not None: self.returning = True enemy.returning = True def return_to_player(self): if self.is_active and self.returning: try: px, py = game_object.position distance = (get_distance((self.x, self.y), (px, py))) self.velocity = ((-px + self.x) / distance * -5, (-py + self.y) / distance * -5) except ZeroDivisionError: pass def clean(self): self.returning = False self.velocity = (0, 0)
def __init__(self, x, y): GameObject.__init__(self, x, y) self.box_collider = BoxCollider(64, 32) self.renderer = Animation([ "images/carrot_animation/carrot1.png", "images/carrot_animation/carrot2.png", "images/carrot_animation/carrot3.png", "images/carrot_animation/carrot4.png", "images/carrot_animation/carrot5.png", "images/carrot_animation/carrot6.png" ], loop=True) self.spawn_counter = FrameCounter(50)
def __init__(self, x, y): GameObject.__init__(self, x, y) self.box_collider = BoxCollider(32, 32) self.renderer = EnemyAnimator() self.direct = True self.frame_counter = FrameCounter(120) self.black_screen = False self.counter = FrameCounter(120) self.dy = 8 self.dx = 0 self.overlap = False self.directory = [1, 2, 3, 4] self.step = 8
class DogSpawner(GameObject): def __init__(self, x, y): GameObject.__init__(self, x, y) self.frame_counter = FrameCounter(700) def update(self): self.frame_counter.run() if self.frame_counter.expired: dog = self.spawn() self.frame_counter.reset() def spawn(self): return game_object.recycle(Dog, self.x, self.y)
class BlackScreen(GameObject): def __init__(self, x=0, y=0): GameObject.__init__(self, x, y) self.counter = FrameCounter(120) self.frame_counter = FrameCounter(120) self.screen = True self.box_collider = BoxCollider(800, 640) def update(self): GameObject.update(self) self.counter.run() if self.counter.expired: self.frame_counter.run() self.screen = False if self.frame_counter.expired: self.screen = True self.counter.reset() self.frame_counter.reset() def render(self, canvas): if not self.screen: BLACK = (0, 0, 0) rect = (0, 0, 800, 640) pygame.draw.rect(canvas, BLACK, rect, 1) canvas.fill(BLACK)
def __init__(self, x, y): GameObject.__init__(self, x, y) self.image = pygame.image.load("images/doge.png") self.box_collider = BoxCollider(70, 70) self.returning = False self.velocity = (0, 0) self.counter = FrameCounter(200) self.spawn_lock = False self.run_setup = [(3, 0), (0, -3), (-3, 0), (0, 3)] # not stun self.stun_timer = FrameCounter(10) self.stun_timer.count = 10 self.index = 0
class CarrotSpawner(GameObject): def __init__(self): GameObject.__init__(self, 0, 0) self.image = None self.spawn_counter = FrameCounter(200) def update(self): self.spawn_counter.run() if self.spawn_counter.expired: ran_y = random.randint(200, 600) # print(warning_sign.x) game_object.recycle(WarningSign, 1200, ran_y) game_object.recycle(Carrot, 1365, ran_y) self.spawn_counter.reset()
class EnemySpawner(GameObject): def __init__(self): GameObject.__init__(self, 0, 0) self.counter = FrameCounter(2 // 0.017) def update(self): self.counter.run() if self.counter.expired: enemy = self.spawn() # game_object.add(enemy) self.counter.reset() def spawn(self): return game_object.recycle(Enemy, 300, 100)
class EnemySpawner(GameObject): def __init__(self, x, y): GameObject.__init__(self, 0, 200) self.frame_counter = FrameCounter(tower_defense.game_object.wave) def update(self): GameObject.update(self) self.frame_counter.run() if tower_defense.game_object.hasTower == True: if self.frame_counter.flag: tower_defense.game_object.hasEnemy = True enemy = Enemy(425, 0) add(enemy) self.frame_counter.reset() if tower_defense.game_object.score >= 60 and tower_defense.game_object.score < 65: self.frame_counter = FrameCounter(15)