From d3b78122365e27ef84cd453c764a0a00fd5aea4e Mon Sep 17 00:00:00 2001 From: Vincents Xun Date: Fri, 26 Apr 2024 07:11:44 +0000 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- menu | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/menu b/menu index b0b0b5f..00d7016 100644 --- a/menu +++ b/menu @@ -98,6 +98,45 @@ class Cheese(pygame.sprite.Sprite): self.rect = self.image.get_rect() self.rect.topleft = (x, y) +class Villain(pygame.sprite.Sprite): + def __init__(self, x, y, player): + super().__init__() + self.image = pygame.image.load('villain.png').convert_alpha() + self.rect = self.image.get_rect() + self.rect.topleft = (x, y) + self.speed = 8 + self.player = player + + def move_towards_player(self, walls): + dx = self.player.rect.x - self.rect.x + dy = self.player.rect.y - self.rect.y + distance = max(abs(dx), abs(dy)) + dx = dx / distance if distance != 0 else 0 + dy = dy / distance if distance != 0 else 0 + dx *= self.speed + dy *= self.speed + self.move(dx, dy, walls) + + def move(self, dx, dy, walls): + old_rect = self.rect.copy() + self.rect.x += dx + self.rect.y += dy + for wall in walls: + if self.rect.colliderect(wall): + if dx > 0: + self.rect.right = wall.left + elif dx < 0: + self.rect.left = wall.right + elif dy > 0: + self.rect.bottom = wall.top + elif dy < 0: + self.rect.top = wall.bottom + if self.rect.collidelist(walls) != -1: + self.rect = old_rect + + def draw(self, surface): + surface.blit(self.image, self.rect) + def draw_maze(maze): walls = [] roads = [] # 存储道路的矩形列表 @@ -111,6 +150,9 @@ def draw_maze(maze): elif char == 'C': # Cheese roads.append(pygame.Rect(x * 32, y * 32, 32, 32)) screen.blit(pygame.image.load('cheese.png'), (x * 32, y * 32)) + elif char == 'V': # Villain + roads.append(pygame.Rect(x * 32, y * 32, 32, 32)) + screen.blit(pygame.image.load('villain.png'), (x * 32, y * 32)) return walls, roads def draw_menu():