88 lines
3.5 KiB
Python
88 lines
3.5 KiB
Python
import pygame
|
|
from maze_generator import MazeGenerator
|
|
from SourceCollector import SourceCollector
|
|
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(filename=None, maze=self.generater.maze)
|
|
sn = obj.build_a_tree()
|
|
obj.dfs(sn)
|
|
|
|
# player.find_path()
|
|
self.grid = obj.gen_maze(sn.dp_path)
|
|
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))
|
|
continue
|
|
if self.grid[y][x].startswith('g'):
|
|
screen.blit(coin_texture, (x * tile_size, y * tile_size))
|
|
continue
|
|
if self.grid[y][x].startswith('t'):
|
|
screen.blit(trap_texture, (x * tile_size, y * tile_size))
|
|
continue
|
|
if self.grid[y][x].startswith('p') or self.grid[y][x].startswith('-'):
|
|
font = pygame.font.SysFont(None, tile_size // 2)
|
|
num = int(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 num:
|
|
text = font.render(str(num), True, (0, 0, 0))
|
|
text_rect = text.get_rect(center=center)
|
|
screen.blit(text, text_rect)
|
|
continue
|
|
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)
|
|
continue
|
|
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)
|
|
continue
|
|
|
|
pygame.draw.line(screen, (0, 0, 0), (self.maze_size, 0), (self.maze_size, self.maze_size), 5)
|
|
|