You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
#!/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()
|