#!/usr/bin/env python3 import sys import pygame from classes.towers.bubbler import Bubbler from classes.enemies.ogre import Ogre from classes.settings import Settings from classes.levels import Levels from classes.map import Map settings = Settings() levels = Levels() map = Map() # Init pygame and set up screen. pygame.init() screen = pygame.display.set_mode(settings.size) # Storage of towers and projectiles towers = [] enemies = [] projectiles = [] while True: for event in pygame.event.get(): pressedKeys = pygame.key.get_pressed() if event.type == pygame.QUIT: sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: newTowerCoordinates = map.canBuildOnCooardinate(event.pos, towers) if newTowerCoordinates: towers.append(Bubbler(newTowerCoordinates)) if event.type == pygame.KEYDOWN: if pressedKeys[pygame.K_SPACE]: enemies.append(Ogre(settings.enemyStart)) # Spawn enemies according to the level newEnemy = levels.get_enemy() if newEnemy: enemies.append(newEnemy) # Draw map to screen screen = map.draw(screen) # Draw all enemies for enemy in enemies: # If move return false, remove the projectile if not enemy.move(): enemies.remove(enemy) continue # Remove enemies that got through to base if enemy.inBase: enemies.remove(enemy) # If enemy got low health, remove it if enemy.get_health() <= 0: enemies.remove(enemy) continue screen = enemy.draw(screen) # Draw all the towers on the screen for tower in towers: projectile = None # Try to shoot (if we got an enemy) if len(enemies) > 0: projectile = tower.shoot(enemies[0].rect) # If successfull, store projectile if projectile is not None: projectiles.append(projectile) # Draw the tower screen = tower.draw(screen) # Draw, move and remove projectiles on the screen for projectile in projectiles: # If move return false, remove the projectile if not projectile.move(): projectiles.remove(projectile) continue # If projectile collides with an enemy, projectile # will deal damage to the enemy and then we remove # the projectile if projectile.collidesWith(enemies): projectiles.remove(projectile) continue # Draw the projectile screen = projectile.draw(screen) # Draw screen pygame.display.flip()