maze_python/maze.py
2025-06-29 16:42:26 +08:00

122 lines
5.0 KiB
Python

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)