]> Skullheadx's Git Forge - fruit-ninja.git/commitdiff
effect + multi color fruit
authorSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Fri, 2 Jun 2023 12:52:00 +0000 (08:52 -0400)
committerSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Fri, 2 Jun 2023 12:52:00 +0000 (08:52 -0400)
effect.py [new file with mode: 0644]
fruit.py
game.py
setup.py

diff --git a/effect.py b/effect.py
new file mode 100644 (file)
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)
index 3357a9df0b6687a0a9349439a8c3d9ca27948d00..35059b65ed0ca64189ed5c6b36f219ab4ca52c7d 100644 (file)
--- 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 5e919312614be8c43013808aaac5f12e259330f3..1762ccb3471bb604868f2dbf18938e0b1ac3c4f7 100644 (file)
--- 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:
index 5147b9aaba0b49581e0b5e2310220f7cfbbb75a9..328ffd7a93efa4ff1e7dba94df416ab71cb4969b 100644 (file)
--- 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