import random import pygame pygame.init() WIDTH, HEIGHT = 640, 480 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Sugarmania") clock = pygame.time.Clock() font = pygame.font.SysFont(None, 36) class ChaserEnemy: def __init__(self, avoid_rect): self.rect = pygame.Rect(0, 0, 36, 36) while True: self.rect.x = random.randint(0, WIDTH - 36) self.rect.y = random.randint(0, HEIGHT - 36) if abs(self.rect.x - avoid_rect.x) > 150 or abs(self.rect.y - avoid_rect.y) > 150: break self.speed = 2 self.spawn_timer = 60 def update(self, target): if self.rect.centerx < target.centerx: self.rect.x += self.speed elif self.rect.centerx > target.centerx: self.rect.x -= self.speed if self.rect.y < target.centery: self.rect.y += self.speed elif self.rect.centery > target.centery: self.rect.y -= self.speed class DasherEnemy: def __init__(self, avoid_rect): self.rect = pygame.Rect(0, 0, 36, 36) while True: self.rect.x = random.randint(0, WIDTH - 36) self.rect.y = random.randint(0, HEIGHT - 36) if abs(self.rect.x - avoid_rect.x) > 150 or abs(self.rect.y - avoid_rect.y) > 150: break self.x = float(self.rect.x) self.y = float(self.rect.y) self.vx = 0 self.vy = 0 self.state = "wait" self.timer = 90 self.spawn_timer = 60 def update(self, target): self.timer -= 1 if self.state == "wait": dx = target.centerx - self.rect.centerx dy = target.centery - self.rect.centery dist = max(1, (dx ** 2 + dy ** 2) ** 0,5) self.vx = dx / dist * 9 self.vy = dy / dist * 9 self.state = "dash" self.timer = 30 else: self.x += self.vx self.y += self.vy self.rect.x = int(self.x) self.rect.y = int(self.y) self.rect.clamp_ip(screen.get_rect()) self.x, self.y = float(self.rect.x), float(self.rect.y) if self.timer <= 0: self.state = "wait" self.timer = 90 class BouncerEnemy: def __init__(self, avoid_rect): self.rect = pygame.Rect(0, 0, 36, 36) while True: self.rect.x = random.randint(0, WIDTH - 36) self.rect.y = random.randint(0, HEIGHT - 36) if abs(self.rect.x - avoid_rect.x) > 150 or abs(self.rect.y - avoid_rect.y) > 150: break self.vx = random.choice([-3, -2, 2, 3]) self.vy = random.choice([-3, -2, 2, 3]) self.spawn_timer = 60 def update(self): self.rect.x += self.vx self.rect.y += self.vy if self.rect.left < 0 or self.rect.right > WIDTH: self.vx = -self.vx if self.rect.top < 0 or self.rect.bottom > HEIGHT: self.vy = -self.vy def enemy_for_level(level): #idk if I'll add the levels if level == 2: return ChaserEnemy if level == 3: return DasherEnemy if level == 4: return DasherEnemy return random.choice([BouncerEnemy, DasherEnemy, ChaserEnemy]) player_img = pygame.image.load("player.png").convert_alpha() player_img = pygame.transform.scale(player_img, (40, 60)) player = pygame.Rect(300, 220, 40, 60) speed = 5 Bouncer_img = pygame.image.load("Bouncer.png").convert_alpha() Bouncer_img = pygame.transform.scale(Bouncer_img, (30, 45)) Chaser_img = pygame.image.load("Chaser.png").convert_alpha() Chaser_img = pygame.transform.scale(Chaser_img, (30, 45)) Dasher_img = pygame.image.load("Dasher.png").convert_alpha() Dasher_img = pygame.transform.scale(Dasher_img, (30, 45)) sugar_img = pygame.image.load("honey.png").convert_alpha() sugar_img = pygame.transform.scale(sugar_img, (50, 50)) score = 0 Enemies = [] heart_img = pygame.image.load("Heart.png").convert_alpha() heart_img = pygame.transform.scale(heart_img,(40, 40)) def new_sugar(): return pygame.Rect(random.randint(0, WIDTH - 20), random.randint(0, HEIGHT - 20), 50, 50) #20,s sugar = new_sugar() lives = 3 hit_timer = 0 #game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False #movement keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] or keys[pygame.K_a]: player.x -= speed if keys[pygame.K_RIGHT] or keys[pygame.K_d]: player.x += speed if keys[pygame.K_UP] or keys[pygame.K_w]: player.y -= speed if keys[pygame.K_DOWN] or keys[pygame.K_s]: player.y += speed for enemy in Enemies: if enemy.spawn_timer > 0: enemy.spawn_timer -= 1 else: enemy.update() if hit_timer > 0: hit_timer -= 1 else: for enemy in Enemies: if enemy.spawn_timer <= 0 and player.colliderect(enemy.rect): lives -= 1 hit_timer = 90 break if lives <= 0: running = False #keep player in player.clamp_ip(screen.get_rect()) # score if player.colliderect(sugar): score += 1 sugar = new_sugar() if score % 10 == 0: Enemies.append(BouncerEnemy(player)) screen.fill((255, 228, 240)) # screen screen.blit(sugar_img, sugar) #sugar screen.blit(player_img, player) #player if hit_timer % 10 < 5: screen.blit(player_img, player) text = font.render(f"score: {score}", True, (90, 30, 60)) screen.blit(text, (10, 10)) for enemy in Enemies: if enemy.spawn_timer % 10 < 5: screen.blit(Bouncer_img, enemy.rect) screen.blit(player_img, player) if hit_timer > 0 and hit_timer % 10 < 5: red = player_img.copy() red.fill((255, 40, 40, 0), special_flags=pygame.BLEND_RGBA_ADD) screen.blit(red, player) for i in range(lives): screen.blit(heart_img, (10 + i * 35, 40)) pygame.display.flip() clock.tick(60) pygame.quit()