import pygame from maze_generator import MazeGenerator from SourceCollector import SourceCollector from tanxin import * import time class Maze: def __init__(self, wall_size, maze_size, file_name): self.wall_size = wall_size self.maze_size = maze_size self.size = int(maze_size / wall_size) self.file_name = file_name self.grid = [] self.generater = MazeGenerator(self.size, self.file_name) def generate(self): seed = int(time.time() * 1000) % (2**32) self.generater.generate(seed=seed) obj = SourceCollector(maze=self.generater.maze) obj.run() self.grid = obj.output_list() print(self.grid) def export_to_csv(self, filename): self.generater.export_to_csv(filename=filename) def draw(self, screen, wall_texture, coin_texture, trap_texture): tile_size = wall_texture.get_width() if len(self.grid) == 0: return for y in range(self.size): for x in range(self.size): if self.grid[y][x] == '1': screen.blit(wall_texture, (x * tile_size, y * tile_size)) if self.grid[y][x].startswith('g'): screen.blit(coin_texture, (x * tile_size, y * tile_size)) font = pygame.font.SysFont(None, tile_size // 2) path = self.grid[y][x].rfind('p') if path == -1: continue path = self.grid[y][x][path+1:] center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 text = font.render(path, True, (255, 255, 255)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) if self.grid[y][x].startswith('t'): screen.blit(trap_texture, (x * tile_size, y * tile_size)) font = pygame.font.SysFont(None, tile_size // 2) path = self.grid[y][x].rfind('p') if path == -1: continue path = self.grid[y][x][path+1:] center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 text = font.render(path, True, (255, 255, 255)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) if self.grid[y][x].startswith('|') or self.grid[y][x].startswith('-'): font = pygame.font.SysFont(None, tile_size // 2) num = 12 center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 pygame.draw.circle(screen, (255, 215, 0), center, radius) if num: text = font.render(str(num), True, (0, 0, 0)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) if self.grid[y][x].startswith('s'): font = pygame.font.SysFont(None, tile_size // 2) text = "s" center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 pygame.draw.circle(screen, (255, 215, 0), center, radius) if text: text = font.render(text, True, (0, 0, 0)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) if self.grid[y][x].startswith('e'): font = pygame.font.SysFont(None, tile_size // 2) text = "e" center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 pygame.draw.circle(screen, (255, 215, 0), center, radius) if text: text = font.render(text, True, (0, 0, 0)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) if self.grid[y][x].startswith('p'): font = pygame.font.SysFont(None, tile_size // 2) text = self.grid[y][x][1:] center = (x * tile_size + tile_size // 2, y * tile_size + tile_size // 2) radius = tile_size // 3 pygame.draw.circle(screen, (255, 215, 0), center, radius) if text: text = font.render(text, True, (0, 0, 0)) text_rect = text.get_rect(center=center) screen.blit(text, text_rect) pygame.draw.line(screen, (0, 0, 0), (self.maze_size, 0), (self.maze_size, self.maze_size), 5)