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}
+
+ OUTLINE_WIDTH = 1
def __init__(self, position, radius, color):
self.position = pygame.Vector2(position)
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]
+ self.color = DARKEN[color]
+ self.outline_color = color
def update(self, delta):
self.position += self.velocity * delta / 1000
def draw(self, surf):
pygame.draw.circle(surf, self.color, self.position, self.radius)
+ pygame.draw.circle(surf, self.outline_color, self.position, self.radius, self.OUTLINE_WIDTH)
+import pygame
+
from setup import *
class Fruit:
- SPAWN_RANGE = [WIDTH / 5, WIDTH * 4 / 5]
- VERTICAL_VELOCITY_RANGE = [-500, -300]
- HORIZONTAL_VELOCITY_RANGE = [-150, 150]
- GRAVITY = 275
-
RADIUS_RANGE = [25, 50]
- COLORS = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE]
+ HORIZONTAL_SPAWN_RANGE = [WIDTH / 5, WIDTH * 4 / 5]
+ VERTICAL_SPAWN_RANGE = [HEIGHT + max(RADIUS_RANGE), HEIGHT*2 + max(RADIUS_RANGE) ]
+
+ VERTICAL_TARGET_RANGE = [HEIGHT / 5, HEIGHT * 2/3]
+ HORIZONTAL_TARGET_RANGE = [WIDTH / 5, WIDTH * 4 / 5]
+
+ GRAVITY = 275
+ COLORS = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE]
+ OUTLINE_WIDTH =3
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()),
- HEIGHT - self.radius)
- self.velocity = pygame.Vector2(
- 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.target = pygame.Vector2(lerp(self.HORIZONTAL_TARGET_RANGE[0], self.HORIZONTAL_TARGET_RANGE[1], random.random()),lerp(self.VERTICAL_TARGET_RANGE[0], self.VERTICAL_TARGET_RANGE[1], random.random()))
+ self.position = pygame.Vector2(lerp(self.HORIZONTAL_SPAWN_RANGE[0], self.HORIZONTAL_SPAWN_RANGE[1], random.random()),
+ lerp(self.VERTICAL_SPAWN_RANGE[0], self.VERTICAL_SPAWN_RANGE[1], random.random()))
self.acceleration = pygame.Vector2(0, self.GRAVITY)
+
+
+ dy = self.target.y-self.position.y
+ dx = self.target.x-self.position.x
+ t = (-2 / self.GRAVITY * dy)**0.5
+ self.velocity = pygame.Vector2(dx/t, -(-2 * self.GRAVITY * dy)**0.5)
+
self.color = random.choice(self.COLORS)
def update(self, delta):
def draw(self, surf):
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)
if self.player.hits(fruit):
hits.append(fruit)
fr = fruit.get_rect()
- if (not -fruit.radius < fr.x < WIDTH + fruit.radius) or fr.y > HEIGHT:
+ if ((not -fruit.radius < fr.x < WIDTH + fruit.radius) or fr.y > HEIGHT) and fruit.velocity.y > 0:
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.effects.append(Effect(hit.position, hit.radius, hit.color))
self.fruits.remove(hit)
for effect in self.effects:
if self.player.hits(bomb):
return COMMAND_START
br = bomb.get_rect()
- if (not -bomb.RADIUS < br.x < WIDTH + bomb.RADIUS) or br.y > HEIGHT:
+ if ((not -bomb.RADIUS < br.x < WIDTH + bomb.RADIUS) or br.y > HEIGHT) and bomb.velocity.y > 0:
self.bombs.remove(bomb)
if len(self.fruits) == 0 and len(self.bombs) == 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)
+DARKEN = {RED: DARK_RED, ORANGE: DARK_ORANGE, YELLOW: DARK_YELLOW, GREEN: DARK_GREEN, BLUE: DARK_BLUE, PURPLE: DARK_PURPLE}
+LIGHTEN = {RED: ORANGE, ORANGE: YELLOW, YELLOW: GREEN, GREEN: BLUE, BLUE: PURPLE, PURPLE: RED}
# commands
COMMAND_EXIT = 0