示例#1
0
文件: program.py 项目: damasko/a_star
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()
示例#2
0
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