From b06dbb3e0dc577a5fa4ca98857b1f121a6cac044 Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Fri, 2 Jun 2023 08:52:00 -0400 Subject: [PATCH] effect + multi color fruit --- effect.py | 25 +++++++++++++++++++++++++ fruit.py | 5 ++++- game.py | 14 +++++++++++++- setup.py | 12 ++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 effect.py diff --git a/effect.py b/effect.py new file mode 100644 index 0000000..6438368 --- /dev/null +++ b/effect.py @@ -0,0 +1,25 @@ +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) diff --git a/fruit.py b/fruit.py index 3357a9d..35059b6 100644 --- a/fruit.py +++ b/fruit.py @@ -9,6 +9,8 @@ class Fruit: 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()), @@ -17,6 +19,7 @@ class Fruit: 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 @@ -27,4 +30,4 @@ class Fruit: 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) diff --git a/game.py b/game.py index 5e91931..1762ccb 100644 --- a/game.py +++ b/game.py @@ -2,15 +2,18 @@ from setup import * 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): @@ -31,8 +34,15 @@ class Game: 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): @@ -50,7 +60,9 @@ class Game: 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: diff --git a/setup.py b/setup.py index 5147b9a..328ffd7 100644 --- a/setup.py +++ b/setup.py @@ -11,9 +11,21 @@ pygame.display.set_caption("Fruit Ninja") # 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 -- 2.54.0