class Program(object): def __init__(self): self.tablero = Tablero(80, 80) self.screen = pygame.display.set_mode((len(self.tablero.matrix[0]) * 10, len(self.tablero.matrix) * 10 + 32), pygame.DOUBLEBUF) pygame.display.set_caption("Pathfinder") self.clock = pygame.time.Clock() self.pausa = True self.velocidad = 100 self.velocidad_algoritmo = 8 # a star self.pathfinder = PathFinder(self.tablero) # cursor self.cursor = Cursor(self.tablero, self.pathfinder) #fuente pygame.font.init() self.fuente = pygame.font.SysFont("default", 24) self.texto = self.fuente.render("Pausado", True, (255, 0, 255)) self.texto_algo = self.fuente.render("Velocidad: " + str(self.velocidad_algoritmo), True, (255, 0, 255)) def draw_matriz(self): for linea in self.tablero.matrix: for casilla in linea: if casilla.estado == "D": pygame.draw.rect(self.screen, (100, 40, 0), casilla.rect) elif casilla.estado == "A": pygame.draw.rect(self.screen, (255, 255, 0), casilla.rect) elif casilla.estado == "B": pygame.draw.rect(self.screen, (0, 255, 100), casilla.rect) else: pygame.draw.rect(self.screen, (20, 170, 170), casilla.rect) for posibles in self.pathfinder.open_list: pygame.draw.rect(self.screen, (0, 0, 0), posibles.rect) if self.pathfinder.encontrado: for casillas in self.pathfinder.ruta: pygame.draw.rect(self.screen, (0, 255, 0), casillas.rect) else: for analizados in self.pathfinder.closed_list: pygame.draw.rect(self.screen, (255, 255, 240), analizados.rect) def execute(self): self.salir = False while not self.salir: self.clock.tick(self.velocidad) # eventos de teclado for event in pygame.event.get(): if event.type == pygame.QUIT: self.salir = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: self.pausa = True # submenu if self.pausa: while self.pausa: self.clock.tick(self.velocidad) for event in pygame.event.get(): if event.type == pygame.QUIT: self.pausa = False self.salir = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: self.pausa = False if event.key == pygame.K_2: if self.velocidad_algoritmo < 30: self.velocidad_algoritmo += 1 if event.key == pygame.K_1: if self.velocidad_algoritmo > 0: self.velocidad_algoritmo -= 1 if event.key == pygame.K_d: if self.cursor.modo_borrar: self.cursor.modo_borrar = False self.texto = self.fuente.render("Pausado", True, (255, 0, 255)) else: self.cursor.modo_borrar = True self.texto = self.fuente.render("Pausado Modo borrar paredes", True, (255, 0, 255)) if event.key == pygame.K_r: self.tablero.matrix = self.tablero.rellenaRandom() self.pathfinder.reset() self.tablero.reset_ab() if pygame.key.get_pressed()[pygame.K_l] and pygame.key.get_pressed()[pygame.K_n]: self.tablero = Tablero(80, 80) self.pathfinder = PathFinder(self.tablero) self.cursor = Cursor(self.tablero, self.pathfinder) #updates self.cursor.update() self.cursor.changeState() self.texto_algo = self.fuente.render("Velocidad: " + str(self.velocidad_algoritmo), True, (255, 0, 255)) # draws self.screen.fill((0, 0, 0)) self.draw_matriz() self.screen.blit(self.texto, (8, self.screen.get_height() - 28)) self.screen.blit(self.texto_algo, (self.screen.get_width() - 200, self.screen.get_height() - 28)) pygame.draw.rect(self.screen, (250, 0, 0), self.cursor.rect) pygame.display.update() #pathfinder #self.pathfinder.run2() for i in range(self.velocidad_algoritmo): self.pathfinder.run() # el que funciona # updates self.cursor.update() # draws self.screen.fill((0, 0, 0)) self.draw_matriz() pygame.display.update()
def main(): if (not pygame.init()): return -1 x = 3 y = 3 #matrix = [[pygame.Rect(x,y,h,w) for i in range(50)] for j in range(50)] #Ordenar rectangulos en forma de cuadricula matrix = [] for i in range(80): linea = [] for j in range(110): celula = Cell(x, y) linea.append(celula) x += 9 matrix.append(linea) x = 3 y += 9 cursor1 = Cursor() pygame.mouse.set_visible = False screen = pygame.display.set_mode((len(matrix[0]) * 9, y + 30)) pygame.display.set_caption("Game of Life") salir = False pygame.font.init() fuente = pygame.font.SysFont("default", 24) numero = 0 texto = fuente.render("Space: Continue/Stop R (in pause): Random Board 1/2: + / - Speed C (in pause): Clear Board" , True, (0, 255, 125)) screen.blit(texto, (5, screen.get_height() - 25)) velocidad = 25 #reloj para los fps clock = pygame.time.Clock() #colores #white=(255,255,255) #Relleno la lista con valores aleatorios (ya no es necesario) #matrix = rellenaRandom(matrix) #cursor1=Cursor() pausa = True while not salir: generacion = fuente.render(" Generation: " + str(numero), True, (0, 255, 125)) clock.tick(int(2 * velocidad / 3)) for event in pygame.event.get(): if event.type == pygame.QUIT: salir = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: pausa = True if event.key == pygame.K_2: if velocidad < 95: velocidad += 5 if event.key == pygame.K_1: if velocidad > 10: velocidad -= 5 if pausa: while pausa: # codigo repetido, para evitarlo crear un eventhandler cursor1.update() clock.tick(velocidad) generacion = fuente.render(" Generation: " + str(numero), True, (0, 255, 125)) for event in pygame.event.get(): if event.type == pygame.QUIT: pausa = False salir = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: pausa = False if event.key == pygame.K_c: clearArray(matrix) if event.key == pygame.K_r: rellenaRandom(matrix) if event.key == pygame.K_2: if velocidad < 95: velocidad += 5 if event.key == pygame.K_1: if velocidad > 10: velocidad -= 5 if event.key == pygame.K_0: numero = 0 cursor1.update() cursor1.changeState(matrix) screen.fill(black) dibuja_mapa(matrix, screen) pygame.draw.rect(screen, (255, 0, 0), cursor1.rect) screen.blit(texto, (5, screen.get_height() - 25)) screen.blit(generacion, (screen.get_width() - 250, screen.get_height() - 25)) pygame.display.update() cursor1.update() cursor1.changeState(matrix) screen.fill(black) screen.blit(texto, (5, screen.get_height() - 25)) screen.blit(generacion, (screen.get_width() - 250, screen.get_height() - 25)) matrix = isAlive(matrix) #Dibujar rectangulos en funcion de la lista comp dibuja_mapa(matrix, screen) numero += 1 pygame.draw.rect(screen, (255, 0, 0), cursor1.rect) pygame.display.update() pygame.quit() return 0