--- /dev/null
+from setup import *
+
+
+class ComboCounter:
+ LIFE_TIME = 1000
+
+ def __init__(self, position, combo):
+ self.position = pygame.Vector2(position)
+ self.velocity = pygame.Vector2(0, -1)
+ self.time = self.LIFE_TIME
+ self.combo = combo
+ self.text_surface = font.render(self.combo, True, BLACK)
+
+ def update(self, delta):
+ self.position += self.velocity * delta / 1000
+ self.time -= delta
+ if self.time <= 0:
+ return True
+
+ def draw(self, surf):
+ surf.blit(self.text_surface, self.position)
class Fruit:
- RADIUS_RANGE = [35 ,65]#[25, 50]
+ RADIUS_RANGE = [35, 65] # [25, 50]
HORIZONTAL_SPAWN_RANGE = [max(RADIUS_RANGE), WIDTH - max(RADIUS_RANGE)]
VERTICAL_SPAWN_RANGE = [HEIGHT + max(RADIUS_RANGE), HEIGHT * 2 + max(RADIUS_RANGE)]
VERTICAL_TARGET_RANGE = [max(RADIUS_RANGE), HEIGHT * 4 / 5]
- HORIZONTAL_TARGET_RANGE = [WIDTH / 6, WIDTH * 5/6]
+ HORIZONTAL_TARGET_RANGE = [WIDTH / 6, WIDTH * 5 / 6]
GRAVITY = 275
pygame.draw.circle(surf, self.color, self.position, self.radius)
pygame.draw.circle(surf, DARKEN[self.color], self.position, self.radius, self.OUTLINE_WIDTH)
-
# pygame.draw.circle(surf, BLACK, self.target, 10)
from fruit import Fruit
from bomb import Bomb
from effect import Effect
+from combo_counter import ComboCounter
class Game:
self.fruits = [Fruit()]
self.bombs = []
self.effects = []
+ self.combo_counters = []
self.wave = 1
self.score = 0
self.time_since_last_hit = 0
+ self.current_combo = 0
def update(self, delta):
for event in pygame.event.get():
if ((not -fruit.radius < fr.x < WIDTH + fruit.radius) or fr.y > HEIGHT) and fruit.velocity.y > 0:
self.fruits.remove(fruit)
self.time_since_last_hit += delta
+
+ if self.time_since_last_hit < self.COMBO_TIME:
+ self.score += self.current_combo
+ else:
+ self.current_combo = 0
for hit in hits:
for i in range(self.EFFECT_COUNT_PER_FRUIT):
self.effects.append(Effect(hit.position, hit.radius, hit.color))
if hit in self.fruits:
self.fruits.remove(hit)
self.score += 1
+ if self.time_since_last_hit < self.COMBO_TIME:
+ self.current_combo += 1
+ self.combo_counters.append(ComboCounter(hit.position, str(self.current_combo)))
+
self.time_since_last_hit = 0
- if self.time_since_last_hit < self.COMBO_TIME:
- self.score += len(hits)
for effect in self.effects:
effect_status = effect.update(delta)
if effect_status:
self.effects.remove(effect)
+ for combo in self.combo_counters:
+ combo_status = combo.update(delta)
+ if combo_status:
+ self.combo_counters.remove(combo)
+
for bomb in self.bombs:
bomb.update(delta)
if self.player.hits(bomb):
fruit.draw(surf)
for bomb in self.bombs:
bomb.draw(surf)
+ for combo in self.combo_counters:
+ combo.draw(surf)
self.player.draw(surf)
text_surf = font.render(str(self.score), True, BLACK)
- surf.blit(text_surf, (WIDTH - text_surf.get_width(), 0))
\ No newline at end of file
+ surf.blit(text_surf, (WIDTH - text_surf.get_width(), 0))
+ text_surf2 = font.render(f"TIME SINCE LAST HIT {round(self.time_since_last_hit / 1000, 1)}", True, BLACK)
+ surf.blit(text_surf2, (WIDTH - text_surf2.get_width(), text_surf.get_height()))
WHITE = (255, 255, 255)
LIGHT_GRAY = (211, 211, 211)
GRAY = (128, 128, 128)
-DARK_GRAY = (25,25,25)
+DARK_GRAY = (25, 25, 25)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
return weight * (end - start) + start
-font = pygame.font.SysFont("Arial", 50)
\ No newline at end of file
+font = pygame.font.SysFont("Arial", 50)