--- /dev/null
+from setup import *
+
+
+class Effect:
+ LIFE_TIME = 500
+ SPEED_RANGE = [150, 250]
+ RADIUS_RANGE = [0.25, 0.75]
+ DARKEN = {RED: DARK_RED, ORANGE: DARK_ORANGE, YELLOW: DARK_YELLOW, GREEN: DARK_GREEN, BLUE: DARK_BLUE, PURPLE: DARK_PURPLE}
+
+ def __init__(self, position, radius, color):
+ self.position = pygame.Vector2(position)
+ self.velocity = pygame.Vector2(random.random() - 0.5, random.random() - 0.5).normalize() * lerp(
+ self.SPEED_RANGE[0],self.SPEED_RANGE[1],random.random())
+ self.radius = radius * lerp(self.RADIUS_RANGE[0], self.RADIUS_RANGE[1], random.random())
+ self.time = self.LIFE_TIME
+ self.color = self.DARKEN[color]
+
+ def update(self, delta):
+ self.position += self.velocity * delta / 1000
+ self.time -= delta
+ if self.time <= 0:
+ return True
+
+ def draw(self, surf):
+ pygame.draw.circle(surf, self.color, self.position, self.radius)
RADIUS_RANGE = [25, 50]
+ COLORS = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE]
+
def __init__(self):
self.radius = lerp(self.RADIUS_RANGE[0], self.RADIUS_RANGE[1], random.random())
self.position = pygame.Vector2(lerp(self.SPAWN_RANGE[0], self.SPAWN_RANGE[1], random.random()),
lerp(self.HORIZONTAL_VELOCITY_RANGE[0], self.HORIZONTAL_VELOCITY_RANGE[1], random.random()),
lerp(self.VERTICAL_VELOCITY_RANGE[0], self.VERTICAL_VELOCITY_RANGE[1], random.random()))
self.acceleration = pygame.Vector2(0, self.GRAVITY)
+ self.color = random.choice(self.COLORS)
def update(self, delta):
self.velocity += self.acceleration * delta / 1000
pygame.Vector2(self.radius, self.radius))
def draw(self, surf):
- pygame.draw.circle(surf, GREEN, self.position, self.radius)
+ pygame.draw.circle(surf, self.color, self.position, self.radius)
from player import Player
from fruit import Fruit
from bomb import Bomb
+from effect import Effect
class Game:
BOMB_CHANCE = 0.1
+ EFFECT_COUNT_PER_FRUIT = 10
def __init__(self):
self.player = Player()
self.fruits = [Fruit()]
self.bombs = []
+ self.effects = []
self.wave = 1
def update(self, delta):
self.fruits.remove(fruit)
for hit in hits:
+ for i in range(self.EFFECT_COUNT_PER_FRUIT):
+ self.effects.append(Effect(hit.position, hit.radius, fruit.color))
self.fruits.remove(hit)
+ for effect in self.effects:
+ effect_status = effect.update(delta)
+ if effect_status:
+ self.effects.remove(effect)
+
for bomb in self.bombs:
bomb.update(delta)
if self.player.hits(bomb):
self.fruits.append(Fruit())
def draw(self, surf):
- screen.fill(WHITE)
+ screen.fill(BROWN)
+ for effect in self.effects:
+ effect.draw(surf)
for fruit in self.fruits:
fruit.draw(surf)
for bomb in self.bombs:
# colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
+
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
+ORANGE = (255, 165, 0)
+YELLOW = (255, 255, 0)
+PURPLE = (128, 0, 128)
+
+BROWN = (139, 69, 19)
+DARK_RED = (139, 0, 0)
+DARK_GREEN = (0, 100, 0)
+DARK_BLUE = (0, 0, 139)
+DARK_ORANGE = (255, 140, 0)
+DARK_YELLOW = (255, 215, 0)
+DARK_PURPLE = (75, 0, 130)
# commands
COMMAND_EXIT = 0