120 lines
3.6 KiB
Python
120 lines
3.6 KiB
Python
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
|
|
|
|
|
|
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
|
|
|
|
sugar_img = pygame.image.load("honey.png").convert_alpha()
|
|
sugar_img = pygame.transform.scale(sugar_img, (50, 50))
|
|
score = 0
|
|
def new_sugar():
|
|
return pygame.Rect(random.randint(0, WIDTH - 20),
|
|
random.randint(0, HEIGHT - 20), 50, 50) #20,s
|
|
sugar = new_sugar()
|
|
|
|
|
|
#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
|
|
|
|
#keep player in
|
|
player.clamp_ip(screen.get_rect())
|
|
|
|
# score
|
|
if player.colliderect(sugar):
|
|
score += 1
|
|
sugar = new_sugar()
|
|
|
|
screen.fill((255, 228, 240)) #screen
|
|
screen.blit(sugar_img, sugar) #sugar
|
|
screen.blit(player_img, player) #player
|
|
text = font.render(f"score: {score}", True, (90, 30, 60))
|
|
screen.blit(text, (10, 10))
|
|
|
|
pygame.display.flip()
|
|
clock.tick(60)
|
|
|
|
pygame.quit()
|
|
|