diff --git a/assets/females/1.png b/assets/females/1.png new file mode 100644 index 0000000..5921d00 Binary files /dev/null and b/assets/females/1.png differ diff --git a/assets/females/10.png b/assets/females/10.png new file mode 100644 index 0000000..6a32ba8 Binary files /dev/null and b/assets/females/10.png differ diff --git a/assets/females/11.png b/assets/females/11.png new file mode 100644 index 0000000..efbebe5 Binary files /dev/null and b/assets/females/11.png differ diff --git a/assets/females/12.png b/assets/females/12.png new file mode 100644 index 0000000..0341c23 Binary files /dev/null and b/assets/females/12.png differ diff --git a/assets/females/13.png b/assets/females/13.png new file mode 100644 index 0000000..f49010c Binary files /dev/null and b/assets/females/13.png differ diff --git a/assets/females/14.png b/assets/females/14.png new file mode 100644 index 0000000..0bfdd95 Binary files /dev/null and b/assets/females/14.png differ diff --git a/assets/females/15.png b/assets/females/15.png new file mode 100644 index 0000000..d5042ae Binary files /dev/null and b/assets/females/15.png differ diff --git a/assets/females/16.png b/assets/females/16.png new file mode 100644 index 0000000..7079103 Binary files /dev/null and b/assets/females/16.png differ diff --git a/assets/females/2.png b/assets/females/2.png new file mode 100644 index 0000000..54c0571 Binary files /dev/null and b/assets/females/2.png differ diff --git a/assets/females/3.png b/assets/females/3.png new file mode 100644 index 0000000..7cd1b50 Binary files /dev/null and b/assets/females/3.png differ diff --git a/assets/females/4.png b/assets/females/4.png new file mode 100644 index 0000000..796a23c Binary files /dev/null and b/assets/females/4.png differ diff --git a/assets/females/5.png b/assets/females/5.png new file mode 100644 index 0000000..c6edacd Binary files /dev/null and b/assets/females/5.png differ diff --git a/assets/females/6.png b/assets/females/6.png new file mode 100644 index 0000000..76c8e0a Binary files /dev/null and b/assets/females/6.png differ diff --git a/assets/females/7.png b/assets/females/7.png new file mode 100644 index 0000000..fbc1a1c Binary files /dev/null and b/assets/females/7.png differ diff --git a/assets/females/8.png b/assets/females/8.png new file mode 100644 index 0000000..17f5cfb Binary files /dev/null and b/assets/females/8.png differ diff --git a/assets/females/9.png b/assets/females/9.png new file mode 100644 index 0000000..edef666 Binary files /dev/null and b/assets/females/9.png differ diff --git a/assets/females/original.png b/assets/females/original.png new file mode 100644 index 0000000..7f58107 Binary files /dev/null and b/assets/females/original.png differ diff --git a/assets/males/1.png b/assets/males/1.png new file mode 100644 index 0000000..54c8312 Binary files /dev/null and b/assets/males/1.png differ diff --git a/assets/males/10.png b/assets/males/10.png new file mode 100644 index 0000000..05c85f9 Binary files /dev/null and b/assets/males/10.png differ diff --git a/assets/males/11.png b/assets/males/11.png new file mode 100644 index 0000000..7368c3a Binary files /dev/null and b/assets/males/11.png differ diff --git a/assets/males/12.png b/assets/males/12.png new file mode 100644 index 0000000..cb191a7 Binary files /dev/null and b/assets/males/12.png differ diff --git a/assets/males/13.png b/assets/males/13.png new file mode 100644 index 0000000..74b439c Binary files /dev/null and b/assets/males/13.png differ diff --git a/assets/males/14.png b/assets/males/14.png new file mode 100644 index 0000000..0436d52 Binary files /dev/null and b/assets/males/14.png differ diff --git a/assets/males/15.png b/assets/males/15.png new file mode 100644 index 0000000..ac3fceb Binary files /dev/null and b/assets/males/15.png differ diff --git a/assets/males/16.png b/assets/males/16.png new file mode 100644 index 0000000..cd603c4 Binary files /dev/null and b/assets/males/16.png differ diff --git a/assets/males/2.png b/assets/males/2.png new file mode 100644 index 0000000..c0a09b4 Binary files /dev/null and b/assets/males/2.png differ diff --git a/assets/males/3.png b/assets/males/3.png new file mode 100644 index 0000000..8d2d527 Binary files /dev/null and b/assets/males/3.png differ diff --git a/assets/males/4.png b/assets/males/4.png new file mode 100644 index 0000000..26846de Binary files /dev/null and b/assets/males/4.png differ diff --git a/assets/males/5.png b/assets/males/5.png new file mode 100644 index 0000000..e7fb1db Binary files /dev/null and b/assets/males/5.png differ diff --git a/assets/males/6.png b/assets/males/6.png new file mode 100644 index 0000000..a23d156 Binary files /dev/null and b/assets/males/6.png differ diff --git a/assets/males/7.png b/assets/males/7.png new file mode 100644 index 0000000..ab8fe6b Binary files /dev/null and b/assets/males/7.png differ diff --git a/assets/males/8.png b/assets/males/8.png new file mode 100644 index 0000000..8e0a29b Binary files /dev/null and b/assets/males/8.png differ diff --git a/assets/males/9.png b/assets/males/9.png new file mode 100644 index 0000000..a95aa84 Binary files /dev/null and b/assets/males/9.png differ diff --git a/assets/males/original.png b/assets/males/original.png new file mode 100644 index 0000000..ab66ea1 Binary files /dev/null and b/assets/males/original.png differ diff --git a/src/front/front.py b/src/front/front.py index 40d4cf9..2adc244 100644 --- a/src/front/front.py +++ b/src/front/front.py @@ -88,6 +88,12 @@ class Front: self.tile_images = {} self._load_tile_images() + # 加载avatar头像图像 + self.male_avatars = [] + self.female_avatars = [] + self.avatar_images = {} # avatar_id -> 图像surface + self._load_avatar_images() + self.clock = pygame.time.Clock() def add_events(self, new_events: List[Event]): @@ -352,18 +358,37 @@ class Front: hovered = None min_dist = float("inf") + # 确保新的avatar也有头像分配 + self._assign_avatar_images() + for avatar_id, avatar in self.simulator.avatars.items(): cx, cy = self._avatar_center_pixel(avatar) - radius = max(8, self.tile_size // 3) - # 绘制Avatar - pygame.draw.circle(self.screen, self.colors["avatar"], (cx, cy), radius) - - # 检测悬停 - dist = math.hypot(mouse_x - cx, mouse_y - cy) - if dist <= radius and dist < min_dist: - hovered = avatar - min_dist = dist + # 尝试使用头像图片 + avatar_image = self.avatar_images.get(avatar_id) + if avatar_image: + # 计算头像图片的位置(居中显示) + image_rect = avatar_image.get_rect() + image_x = cx - image_rect.width // 2 + image_y = cy - image_rect.height // 2 + + # 绘制头像图片 + self.screen.blit(avatar_image, (image_x, image_y)) + + # 检测悬停(使用图片的矩形区域) + if image_rect.collidepoint(mouse_x - image_x, mouse_y - image_y): + hovered = avatar + min_dist = 0 # 如果鼠标在图片内,设为最优先 + else: + # 回退到圆点显示 + radius = max(8, self.tile_size // 3) + pygame.draw.circle(self.screen, self.colors["avatar"], (cx, cy), radius) + + # 检测悬停(使用圆形区域) + dist = math.hypot(mouse_x - cx, mouse_y - cy) + if dist <= radius and dist < min_dist: + hovered = avatar + min_dist = dist return hovered @@ -411,7 +436,7 @@ class Front: def _draw_tooltip_for_avatar(self, avatar: Avatar): """绘制Avatar的tooltip""" lines = [ - f"{avatar.name}#{avatar.id}", + f"{avatar.name}", f"性别: {avatar.gender}", f"年龄: {avatar.age}", f"境界: {str(avatar.cultivation_progress)}", @@ -465,6 +490,59 @@ class Front: scaled_image = pygame.transform.scale(image, (self.tile_size, self.tile_size)) self.tile_images[tile_type] = scaled_image + def _load_avatar_images(self): + """加载avatar头像图像""" + import os + import random + pygame = self.pygame + + # 加载男性头像 + male_dir = "assets/males" + if os.path.exists(male_dir): + for filename in os.listdir(male_dir): + # 只加载数字序号的png文件,跳过original.png + if filename.endswith('.png') and filename != 'original.png' and filename.replace('.png', '').isdigit(): + image_path = os.path.join(male_dir, filename) + try: + image = pygame.image.load(image_path) + # 调大一倍的头像大小 + avatar_size = max(32, self.tile_size * 4 // 3) + scaled_image = pygame.transform.scale(image, (avatar_size, avatar_size)) + self.male_avatars.append(scaled_image) + except pygame.error: + continue # 跳过无法加载的图片 + + # 加载女性头像 + female_dir = "assets/females" + if os.path.exists(female_dir): + for filename in os.listdir(female_dir): + # 只加载数字序号的png文件,跳过original.png + if filename.endswith('.png') and filename != 'original.png' and filename.replace('.png', '').isdigit(): + image_path = os.path.join(female_dir, filename) + try: + image = pygame.image.load(image_path) + # 调大一倍的头像大小 + avatar_size = max(32, self.tile_size * 4 // 3) + scaled_image = pygame.transform.scale(image, (avatar_size, avatar_size)) + self.female_avatars.append(scaled_image) + except pygame.error: + continue # 跳过无法加载的图片 + + # 为每个现有的avatar分配头像 + self._assign_avatar_images() + + def _assign_avatar_images(self): + """为每个avatar分配头像图片""" + import random + + for avatar_id, avatar in self.simulator.avatars.items(): + if avatar_id not in self.avatar_images: + if avatar.gender == Gender.MALE and self.male_avatars: + self.avatar_images[avatar_id] = random.choice(self.male_avatars) + elif avatar.gender == Gender.FEMALE and self.female_avatars: + self.avatar_images[avatar_id] = random.choice(self.female_avatars) + # 如果没有可用的头像,则使用None,后续会画圆点作为fallback + def _create_fallback_surface(self, tile_type): """创建默认的fallback surface""" fallback_surface = self.pygame.Surface((self.tile_size, self.tile_size)) diff --git a/temp/female/no_border_1.png b/temp/female/no_border_1.png new file mode 100644 index 0000000..3a8f072 Binary files /dev/null and b/temp/female/no_border_1.png differ diff --git a/temp/female/no_border_10.png b/temp/female/no_border_10.png new file mode 100644 index 0000000..5268274 Binary files /dev/null and b/temp/female/no_border_10.png differ diff --git a/temp/female/no_border_11.png b/temp/female/no_border_11.png new file mode 100644 index 0000000..125b01f Binary files /dev/null and b/temp/female/no_border_11.png differ diff --git a/temp/female/no_border_12.png b/temp/female/no_border_12.png new file mode 100644 index 0000000..d493219 Binary files /dev/null and b/temp/female/no_border_12.png differ diff --git a/temp/female/no_border_13.png b/temp/female/no_border_13.png new file mode 100644 index 0000000..6062fdc Binary files /dev/null and b/temp/female/no_border_13.png differ diff --git a/temp/female/no_border_14.png b/temp/female/no_border_14.png new file mode 100644 index 0000000..4bd0a3b Binary files /dev/null and b/temp/female/no_border_14.png differ diff --git a/temp/female/no_border_15.png b/temp/female/no_border_15.png new file mode 100644 index 0000000..7621682 Binary files /dev/null and b/temp/female/no_border_15.png differ diff --git a/temp/female/no_border_16.png b/temp/female/no_border_16.png new file mode 100644 index 0000000..b9f0d70 Binary files /dev/null and b/temp/female/no_border_16.png differ diff --git a/temp/female/no_border_2.png b/temp/female/no_border_2.png new file mode 100644 index 0000000..37d8fa4 Binary files /dev/null and b/temp/female/no_border_2.png differ diff --git a/temp/female/no_border_3.png b/temp/female/no_border_3.png new file mode 100644 index 0000000..7ac9979 Binary files /dev/null and b/temp/female/no_border_3.png differ diff --git a/temp/female/no_border_4.png b/temp/female/no_border_4.png new file mode 100644 index 0000000..20c92a1 Binary files /dev/null and b/temp/female/no_border_4.png differ diff --git a/temp/female/no_border_5.png b/temp/female/no_border_5.png new file mode 100644 index 0000000..9c35d61 Binary files /dev/null and b/temp/female/no_border_5.png differ diff --git a/temp/female/no_border_6.png b/temp/female/no_border_6.png new file mode 100644 index 0000000..774ace6 Binary files /dev/null and b/temp/female/no_border_6.png differ diff --git a/temp/female/no_border_7.png b/temp/female/no_border_7.png new file mode 100644 index 0000000..a2195fe Binary files /dev/null and b/temp/female/no_border_7.png differ diff --git a/temp/female/no_border_8.png b/temp/female/no_border_8.png new file mode 100644 index 0000000..f5a4160 Binary files /dev/null and b/temp/female/no_border_8.png differ diff --git a/temp/female/no_border_9.png b/temp/female/no_border_9.png new file mode 100644 index 0000000..423c5a0 Binary files /dev/null and b/temp/female/no_border_9.png differ diff --git a/temp/male/no_border_1.png b/temp/male/no_border_1.png new file mode 100644 index 0000000..c175e4f Binary files /dev/null and b/temp/male/no_border_1.png differ diff --git a/temp/male/no_border_10.png b/temp/male/no_border_10.png new file mode 100644 index 0000000..f2874c1 Binary files /dev/null and b/temp/male/no_border_10.png differ diff --git a/temp/male/no_border_11.png b/temp/male/no_border_11.png new file mode 100644 index 0000000..d1b7fe5 Binary files /dev/null and b/temp/male/no_border_11.png differ diff --git a/temp/male/no_border_12.png b/temp/male/no_border_12.png new file mode 100644 index 0000000..d75f231 Binary files /dev/null and b/temp/male/no_border_12.png differ diff --git a/temp/male/no_border_13.png b/temp/male/no_border_13.png new file mode 100644 index 0000000..ebe68e7 Binary files /dev/null and b/temp/male/no_border_13.png differ diff --git a/temp/male/no_border_14.png b/temp/male/no_border_14.png new file mode 100644 index 0000000..6d7c7c1 Binary files /dev/null and b/temp/male/no_border_14.png differ diff --git a/temp/male/no_border_15.png b/temp/male/no_border_15.png new file mode 100644 index 0000000..f452225 Binary files /dev/null and b/temp/male/no_border_15.png differ diff --git a/temp/male/no_border_16.png b/temp/male/no_border_16.png new file mode 100644 index 0000000..ec641cd Binary files /dev/null and b/temp/male/no_border_16.png differ diff --git a/temp/male/no_border_2.png b/temp/male/no_border_2.png new file mode 100644 index 0000000..78f5230 Binary files /dev/null and b/temp/male/no_border_2.png differ diff --git a/temp/male/no_border_3.png b/temp/male/no_border_3.png new file mode 100644 index 0000000..b526aba Binary files /dev/null and b/temp/male/no_border_3.png differ diff --git a/temp/male/no_border_4.png b/temp/male/no_border_4.png new file mode 100644 index 0000000..c903b0e Binary files /dev/null and b/temp/male/no_border_4.png differ diff --git a/temp/male/no_border_5.png b/temp/male/no_border_5.png new file mode 100644 index 0000000..5110e4f Binary files /dev/null and b/temp/male/no_border_5.png differ diff --git a/temp/male/no_border_6.png b/temp/male/no_border_6.png new file mode 100644 index 0000000..b26d789 Binary files /dev/null and b/temp/male/no_border_6.png differ diff --git a/temp/male/no_border_7.png b/temp/male/no_border_7.png new file mode 100644 index 0000000..97d7fda Binary files /dev/null and b/temp/male/no_border_7.png differ diff --git a/temp/male/no_border_8.png b/temp/male/no_border_8.png new file mode 100644 index 0000000..bf98ba7 Binary files /dev/null and b/temp/male/no_border_8.png differ diff --git a/temp/male/no_border_9.png b/temp/male/no_border_9.png new file mode 100644 index 0000000..10a6dcb Binary files /dev/null and b/temp/male/no_border_9.png differ diff --git a/temp/processed_female/1.png b/temp/processed_female/1.png new file mode 100644 index 0000000..5921d00 Binary files /dev/null and b/temp/processed_female/1.png differ diff --git a/temp/processed_female/10.png b/temp/processed_female/10.png new file mode 100644 index 0000000..6a32ba8 Binary files /dev/null and b/temp/processed_female/10.png differ diff --git a/temp/processed_female/11.png b/temp/processed_female/11.png new file mode 100644 index 0000000..efbebe5 Binary files /dev/null and b/temp/processed_female/11.png differ diff --git a/temp/processed_female/12.png b/temp/processed_female/12.png new file mode 100644 index 0000000..0341c23 Binary files /dev/null and b/temp/processed_female/12.png differ diff --git a/temp/processed_female/13.png b/temp/processed_female/13.png new file mode 100644 index 0000000..f49010c Binary files /dev/null and b/temp/processed_female/13.png differ diff --git a/temp/processed_female/14.png b/temp/processed_female/14.png new file mode 100644 index 0000000..0bfdd95 Binary files /dev/null and b/temp/processed_female/14.png differ diff --git a/temp/processed_female/15.png b/temp/processed_female/15.png new file mode 100644 index 0000000..d5042ae Binary files /dev/null and b/temp/processed_female/15.png differ diff --git a/temp/processed_female/16.png b/temp/processed_female/16.png new file mode 100644 index 0000000..7079103 Binary files /dev/null and b/temp/processed_female/16.png differ diff --git a/temp/processed_female/2.png b/temp/processed_female/2.png new file mode 100644 index 0000000..54c0571 Binary files /dev/null and b/temp/processed_female/2.png differ diff --git a/temp/processed_female/3.png b/temp/processed_female/3.png new file mode 100644 index 0000000..7cd1b50 Binary files /dev/null and b/temp/processed_female/3.png differ diff --git a/temp/processed_female/4.png b/temp/processed_female/4.png new file mode 100644 index 0000000..796a23c Binary files /dev/null and b/temp/processed_female/4.png differ diff --git a/temp/processed_female/5.png b/temp/processed_female/5.png new file mode 100644 index 0000000..c6edacd Binary files /dev/null and b/temp/processed_female/5.png differ diff --git a/temp/processed_female/6.png b/temp/processed_female/6.png new file mode 100644 index 0000000..76c8e0a Binary files /dev/null and b/temp/processed_female/6.png differ diff --git a/temp/processed_female/7.png b/temp/processed_female/7.png new file mode 100644 index 0000000..fbc1a1c Binary files /dev/null and b/temp/processed_female/7.png differ diff --git a/temp/processed_female/8.png b/temp/processed_female/8.png new file mode 100644 index 0000000..17f5cfb Binary files /dev/null and b/temp/processed_female/8.png differ diff --git a/temp/processed_female/9.png b/temp/processed_female/9.png new file mode 100644 index 0000000..edef666 Binary files /dev/null and b/temp/processed_female/9.png differ diff --git a/temp/processed_male/1.png b/temp/processed_male/1.png new file mode 100644 index 0000000..54c8312 Binary files /dev/null and b/temp/processed_male/1.png differ diff --git a/temp/processed_male/10.png b/temp/processed_male/10.png new file mode 100644 index 0000000..05c85f9 Binary files /dev/null and b/temp/processed_male/10.png differ diff --git a/temp/processed_male/11.png b/temp/processed_male/11.png new file mode 100644 index 0000000..7368c3a Binary files /dev/null and b/temp/processed_male/11.png differ diff --git a/temp/processed_male/12.png b/temp/processed_male/12.png new file mode 100644 index 0000000..cb191a7 Binary files /dev/null and b/temp/processed_male/12.png differ diff --git a/temp/processed_male/13.png b/temp/processed_male/13.png new file mode 100644 index 0000000..74b439c Binary files /dev/null and b/temp/processed_male/13.png differ diff --git a/temp/processed_male/14.png b/temp/processed_male/14.png new file mode 100644 index 0000000..0436d52 Binary files /dev/null and b/temp/processed_male/14.png differ diff --git a/temp/processed_male/15.png b/temp/processed_male/15.png new file mode 100644 index 0000000..ac3fceb Binary files /dev/null and b/temp/processed_male/15.png differ diff --git a/temp/processed_male/16.png b/temp/processed_male/16.png new file mode 100644 index 0000000..cd603c4 Binary files /dev/null and b/temp/processed_male/16.png differ diff --git a/temp/processed_male/2.png b/temp/processed_male/2.png new file mode 100644 index 0000000..c0a09b4 Binary files /dev/null and b/temp/processed_male/2.png differ diff --git a/temp/processed_male/3.png b/temp/processed_male/3.png new file mode 100644 index 0000000..8d2d527 Binary files /dev/null and b/temp/processed_male/3.png differ diff --git a/temp/processed_male/4.png b/temp/processed_male/4.png new file mode 100644 index 0000000..26846de Binary files /dev/null and b/temp/processed_male/4.png differ diff --git a/temp/processed_male/5.png b/temp/processed_male/5.png new file mode 100644 index 0000000..e7fb1db Binary files /dev/null and b/temp/processed_male/5.png differ diff --git a/temp/processed_male/6.png b/temp/processed_male/6.png new file mode 100644 index 0000000..a23d156 Binary files /dev/null and b/temp/processed_male/6.png differ diff --git a/temp/processed_male/7.png b/temp/processed_male/7.png new file mode 100644 index 0000000..ab8fe6b Binary files /dev/null and b/temp/processed_male/7.png differ diff --git a/temp/processed_male/8.png b/temp/processed_male/8.png new file mode 100644 index 0000000..8e0a29b Binary files /dev/null and b/temp/processed_male/8.png differ diff --git a/temp/processed_male/9.png b/temp/processed_male/9.png new file mode 100644 index 0000000..a95aa84 Binary files /dev/null and b/temp/processed_male/9.png differ