Beispiel #1
0
    def __noaction_state(self):
        '''
        @brief Método que actualiza al coche en su estado 
        noaction(En marcha sin pulsar ningun boton de direccion)
        '''
        #Según la tecla pulsada cambiamos de estado o no
        if keyboard.pressed(self.UP):
            self.old_state = gameobject.NOACTION
            self.state = gameobject.RUN
        if keyboard.pressed(self.DOWN):
            self.old_state = gameobject.NOACTION
            self.state = gameobject.REVERSE

        #Controlamos la desaceleración del mismo
        if self.actual_speed > self.desaceleration:
            self.actual_speed -= self.desaceleration
        elif self.actual_speed < -self.desaceleration:
            self.actual_speed += self.desaceleration
        else:
            self.actual_speed = 0
            self.state = gameobject.NORMAL

        #Controlamos la rotación del coche
        self.control_rotation()

        #Y la trigonometria del mismo
        self.trigonometry()
Beispiel #2
0
 def __noaction_state(self):
     '''
     @brief Método que actualiza al coche en su estado 
     noaction(En marcha sin pulsar ningun boton de direccion)
     '''
     #Según la tecla pulsada cambiamos de estado o no
     if keyboard.pressed(self.UP):
         self.old_state = NOACTION
         self.state = RUN
     if keyboard.pressed(self.DOWN):
         self.old_state = NOACTION
         self.state = REVERSE
     
     #Controlamos la desaceleración del mismo
     if self.actual_speed > self.desaceleration:
         self.actual_speed -= self.desaceleration
     elif self.actual_speed < -self.desaceleration:
         self.actual_speed += self.desaceleration
     else:
         self.actual_speed = 0
         self.state = NORMAL
                 
     #Controlamos la rotación del coche
     self.control_rotation()
     
     #Y la trigonometria del mismo
     self.trigonometry()
Beispiel #3
0
 def run(self):
     '''
     Función que contiene el bucle principal del juego.
     Actualiza y dibuja el estado actual.
     '''
     while not keyboard.quit():
         
         self.clock.tick(self.fps)
         
         keyboard.update()
         
         self.screen.fill((0,0,0))
         
         #self.__actual_state.update()
         #self.__actual_state.draw(screen)
         
         if keyboard.pressed(K_DOWN):
             self.circuit.move(0, self.circuit.get_y() + 50)
         elif keyboard.pressed(K_UP):
             self.circuit.move(0, self.circuit.get_y() - 50)
         
         self.circuit.draw(self.screen, 0)
         self.circuit.draw(self.screen, 1)
         self.circuit.draw(self.screen, 2)
         
         
         pygame.display.flip()
Beispiel #4
0
 def run(self):
     '''
     Función que contiene el bucle principal del juego.
     Actualiza y dibuja el estado actual.
     '''
     while not keyboard.quit():
         
         self.clock.tick(self.fps)
         
         keyboard.update()
         
         self.screen.fill((0,0,0))
         
         #self.__actual_state.update()
         #self.__actual_state.draw(screen)
         
         if keyboard.pressed(K_DOWN):
             if self.circuit.get_y() < self.circuit.get_tile_height() * self.circuit.get_height() - self.screen.get_height():
                 self.circuit.move(self.circuit.get_x(), self.circuit.get_y() + 25)
         elif keyboard.pressed(K_UP):
             if self.circuit.get_y() > 0:
                 self.circuit.move(self.circuit.get_x(), self.circuit.get_y() - 25)
         if keyboard.pressed(K_LEFT):
             if self.circuit.get_x() > 0:
                 self.circuit.move(self.circuit.get_x() - 25, self.circuit.get_y())
         elif keyboard.pressed(K_RIGHT):
             if self.circuit.get_x() < self.circuit.get_tile_width() * self.circuit.get_width() - self.screen.get_width():
                 self.circuit.move(self.circuit.get_x() + 25, self.circuit.get_y())
         
         self.circuit.draw(self.screen, 0)
         self.circuit.draw(self.screen, 1)
         self.circuit.draw(self.screen, 2)
         
         
         pygame.display.flip()
Beispiel #5
0
    def __update(self):
        '''
        Movimiento básico sin actualización de estado.
        Actualmente si uso.
        '''
        if keyboard.pressed(self.LEFT):
            self.actual_angle -= self.rotation_angle * self.actual_speed
        elif keyboard.pressed(self.RIGHT):
            self.actual_angle += self.rotation_angle * self.actual_speed

        if keyboard.pressed(self.UP):
            self.move(+1)
        elif keyboard.pressed(self.DOWN):
            self.move(-1)
        else:
            # Reduce la velocidad de manera gradual.
            if self.actual_speed > self.desaceleration:
                self.actual_speed -= self.desaceleration
            elif self.actual_speed < -self.desaceleration:
                self.actual_speed += self.desaceleration
            else:
                self.actual_speed = 0

        angle = radians(self.actual_angle)
        self.dx = cos(angle) * self.actual_speed
        self.dy = sin(angle) * self.actual_speed

        self.update_position()
        self.update_image()
Beispiel #6
0
 def control_rotation(self):
     '''
     @brief Método que actualiza la rotación del coche
     '''
     if keyboard.pressed(self.LEFT):
         self.actual_angle -= self.rotation_angle * self.max_speed
     elif keyboard.pressed(self.RIGHT):
         self.actual_angle += self.rotation_angle * self.max_speed
Beispiel #7
0
 def control_rotation(self):
     '''
     @brief Método que actualiza la rotación del coche
     '''
     if keyboard.pressed(self.LEFT):
         self.actual_angle -= self.rotation_angle * self.max_speed
     elif keyboard.pressed(self.RIGHT):
         self.actual_angle += self.rotation_angle * self.max_speed
Beispiel #8
0
 def __normal_state(self):
     '''
     Control del estado normal, el coche esta detenido.
     '''
     if keyboard.pressed(self.UP):
         self.state = RUN
     elif keyboard.pressed(self.DOWN):
         self.state = REVERSE
Beispiel #9
0
 def control_rotation(self):
     '''
     Control del cambio de dirección.
     '''
     if keyboard.pressed(self.LEFT):
         self.actual_angle -= self.rotation_angle * self.actual_speed
     elif keyboard.pressed(self.RIGHT):
         self.actual_angle += self.rotation_angle * self.actual_speed
Beispiel #10
0
 def __normal_state(self):
     '''
     @brief Método que actualiza al coche en su estado normal
     '''
     #Según la tecla pulsada cambiamos de estado o no
     if keyboard.pressed(self.UP):
         self.old_state = NORMAL
         self.state = RUN
     elif keyboard.pressed(self.DOWN):
         self.old_state = NORMAL
         self.state = REVERSE
Beispiel #11
0
 def __normal_state(self):
     '''
     @brief Método que actualiza al coche en su estado normal
     '''
     #Según la tecla pulsada cambiamos de estado o no
     if keyboard.pressed(self.UP):
         self.old_state = gameobject.NORMAL
         self.state = gameobject.RUN
     elif keyboard.pressed(self.DOWN):
         self.old_state = gameobject.NORMAL
         self.state = gameobject.REVERSE
Beispiel #12
0
 def __noaction_state(self):
     '''
     Control del estado, no se pulsa ningún boton de dirección.
     '''
     if keyboard.pressed(self.UP):
         state = RUN
     if keyboard.pressed(self.DOWN):
         state = REVERSE
     
     if self.actual_speed > self.desaceleration:
         self.actual_speed -= self.desaceleration
     elif self.actual_speed < -self.desaceleration:
         self.actual_speed += self.desaceleration
     else:
         self.actual_speed = 0
         self.state = NORMAL
                 
     self.control_rotation()
         
     self.trigonometry()
Beispiel #13
0
 def __reverse_state(self):
     '''
     Control del estado, marcha atrás.
     '''
     self.move(-1)
     
     if keyboard.release(self.DOWN):
         self.state = NOACTION
     if keyboard.pressed(self.UP):
         self.state = RUN
     
     self.control_rotation()
     
     self.trigonometry()
Beispiel #14
0
 def __run_state(self):
     '''
     Control del estado, el coche va hacia el frente.
     '''
     self.move(+1)
     
     if keyboard.release(self.UP):
         self.state = NOACTION
     if keyboard.pressed(self.DOWN):
         self.state = REVERSE
         
     self.control_rotation()
     
     self.trigonometry()
Beispiel #15
0
    def __run_state(self):
        '''
        @brief Método que actualiza al coche en su estado run(en marcha)
        '''
        self.move(+1)

        #Según la tecla pulsada cambiamos de estado o no
        if keyboard.release(self.UP):
            self.old_state = gameobject.RUN
            self.state = gameobject.NOACTION
        if keyboard.pressed(self.DOWN):
            self.old_state = gameobject.RUN
            self.state = gameobject.REVERSE

        #Controlamos la rotación del coche
        self.control_rotation()

        #Y la trigonometria del mismo
        self.trigonometry()
Beispiel #16
0
 def __run_state(self):
     '''
     @brief Método que actualiza al coche en su estado run(en marcha)
     '''
     self.move(+1)
     
     #Según la tecla pulsada cambiamos de estado o no
     if keyboard.release(self.UP):
         self.old_state = RUN
         self.state = NOACTION
     if keyboard.pressed(self.DOWN):
         self.old_state = RUN
         self.state = REVERSE
     
     #Controlamos la rotación del coche
     self.control_rotation()
     
     #Y la trigonometria del mismo
     self.trigonometry()
Beispiel #17
0
    def __reverse_state(self):
        '''
        @brief Método que actualiza al coche en su estado de marcha atras 
        '''
        self.move(-1)

        #Controlamos la desaceleración del mismo
        if keyboard.release(self.DOWN):
            self.old_state = gameobject.REVERSE
            self.state = gameobject.NOACTION
        if keyboard.pressed(self.UP):
            self.old_state = gameobject.REVERSE
            self.state = gameobject.RUN

        #Controlamos la rotación del coche
        self.control_rotation()

        #Y la trigonometria del mismo
        self.trigonometry()
Beispiel #18
0
 def __reverse_state(self):
     '''
     @brief Método que actualiza al coche en su estado de marcha atras 
     '''
     self.move(-1)
     
     #Controlamos la desaceleración del mismo
     if keyboard.release(self.DOWN):
         self.old_state = REVERSE
         self.state = NOACTION
     if keyboard.pressed(self.UP):
         self.old_state = REVERSE
         self.state = RUN
     
     #Controlamos la rotación del coche
     self.control_rotation()
     
     #Y la trigonometria del mismo
     self.trigonometry()
Beispiel #19
0
 def run(self):
     '''
     Función que contiene el bucle principal del juego.
     Actualiza y dibuja el estado actual.
     '''
     while not keyboard.quit():
         
         self.clock.tick(self.fps)
         
         keyboard.update()
         
         if keyboard.pressed(K_UP) or self.__actual_state.get_status() == 'done':
             print "pulsandooo"
             #self.__actual_state = particle.SystemParticle(400, 300, ['particle', 'particle2'], 100, 1, 10, 300, 1)
             self.__actual_state.restart()
                 
         self.screen.fill((255,255,255))
         
         self.__actual_state.update()
         self.__actual_state.draw(self.screen)
         
         pygame.display.flip()
Beispiel #20
0
 def update(self):
     '''
     @brief Método que actualiza la intro
     '''
     #Si vamos de negro a transparente
     if self.to_opaque:
         
         #Si pulsamos alguna de las teclas cancelamos al intro
         if keyboard.pressed(pygame.K_ESCAPE) or \
         keyboard.pressed(pygame.K_SPACE) or \
         keyboard.pressed(pygame.K_RETURN):
             self.quit = True
         
         #Vamos aumentado el alpha segun la velocidad indicada
         self.actual_alpha += self.speed
         self.surface.set_alpha(self.actual_alpha)
         
         #Si la superficie es completamente transparente cambiamos de estado
         if self.actual_alpha >= 255:
             self.to_opaque = False
     
     #Si vamos de transparente a negro
     else:
         
         #si pulsamos alguna de las teclas cancelamos la intro
         if keyboard.pressed(pygame.K_ESCAPE) or \
         keyboard.pressed(pygame.K_SPACE) or \
         keyboard.pressed(pygame.K_RETURN):
             self.quit = True
         
         #Vamos disminuyendo el canal alpha de la superficie
         self.actual_alpha -= self.speed
         self.surface.set_alpha(self.actual_alpha)
         
         #Cuando llegamos de nuevo al negro completo, indicamos que la 
         #intro ha terminado
         if self.actual_alpha <= 0:
             self.quit = True
 
     #Si la intro se ha terminado o se ha cancelado
     if self.quit:
         print "Al menú principal"
         #Pasamos al menu principal
         self.game.change_state(mainmenu.MainMenu(self.game, 
                                             'menu/mainmenu.xml'))
Beispiel #21
0
    def update(self):
        '''
        @brief Método encargado de actualizar todos los componentes del circuito
        '''
        
        if self.fadein:
            self.actual_alpha -= self.fade_speed
            self.fade_surface.set_alpha(self.actual_alpha)
            
            if self.actual_alpha <= 0:
                self.fadein = False
                self.actual_state = 'countdown'
                
        else:
            #Si estamos en la cuenta atrás actualizamos la cuenta atrás
            if self.actual_state == 'countdown':
                self.count_down.update()
                for animation in self.static_animations:
                    animation.update()
                    
                #Si se ha completado cambiamos el estado del juego
                if self.count_down.complete():
                    
                    if self.music_file and config.Config().get_current_music() != self.music_file:
                        config.Config().set_current_music(self.music_file)
                        pygame.mixer.music.load(data.get_path_music(self.music_file))
                        pygame.mixer.music.play(-1)
                        
                    self.actual_state = 'race'
                    self.actual_time.start()
                    self.total_time.start()

            #Si estamos en pause, actualizamos el menú de pause
            elif self.actual_state == 'pause':
                self.pause.update()
            
            #Si estamos el estado en carrera, actualizamos todos los estado de carrera
            elif self.actual_state == 'race':
                
                if not self.complete:
                    #Actualizamos el tiempo actual
                    self.actual_time.update()
                    self.total_time.update()
                
                #Actualizamos al coche del jugador.
                self.player.update()
                
                #Actualizamos la IA.
                for ia_car in self.ia_cars:
                    #Actualizamos el coche de la IA
                    ia_car[0].update()
                    if not self.complete:
                        #Actualizamos los puntos de control para la IA dada
                        ia_car[1].update(ia_car[0])
                
                for ball in self.balls:
                    ball.update()
                            
                #Actualizamos las balas.
                for bullet in self.bullets:
                    bullet.update()

                #Actualizamos las balas.
                for oil in self.oils:
                    oil.update()
                
                for gum in self.gums:
                    gum.update()

                for i in range(len(self.advices)):
                    self.advices[i].update()
                
                i = 0
                deleted = False
                while i < len(self.advices) and not deleted:
                    if self.advices[i].complete():
                        del self.advices[i]
                        deleted = True
                        if self.complete:
                            self.fadeout = True
                    i += 1
                        
                #Controlamos el scroll de la pantalla
                self.scroll_control()
                
                #Controlamos posibles colisiones
                self.check_collisions()
                
                if not self.complete:
                    #Controlamos todos los puntos de control    
                    self.checkpoints.update(self.player, True)

                    #Obtenemos la posicion del jugador actualizando el marcador
                    self.position_board.update((self.player, self.checkpoints), 
                                            self.ia_cars)
                
                #Si pulsamos el espacio o escape, cambiamos al estado pause
                if (keyboard.pressed(config.Config().get_pause_key()) \
                    or not pygame.key.get_focused()) and not self.fadeout:
                        
                    self.actual_state = 'pause'
                    pygame.mixer.music.pause()
                    self.actual_time.pause()
                    self.player.set_state(gameobject.NOACTION)
            
            if self.fadeout:
                self.actual_alpha += self.fadeout_speed
                self.fade_surface.set_alpha(self.actual_alpha)
            
                if self.actual_alpha >= 255:
                    self.fadeout = False
                    if config.Config().get_mode() == config.TIMED:
                        self.game_mode.completed_race(self.player, 
                                                    self.total_time, 
                                                    self.best_lap_player, 
                                                    self.lap_times)
                    else:
                        self.game_mode.completed_race(self.position_board.get_all_players_position())


        for animation in self.static_animations:
            animation.update()
        
        if self.actual_state != 'pause':
            #Actualizamos las cajas de items
            for box in self.items_box:
                if self.on_screen(box):
                    box.update()
Beispiel #22
0
    def update(self):
        '''
        @brief Método encargado de actualizar todos los componentes del circuito
        '''

        if self.fadein:
            self.actual_alpha -= self.fade_speed
            self.fade_surface.set_alpha(self.actual_alpha)

            if self.actual_alpha <= 0:
                self.fadein = False
                self.actual_state = 'countdown'

        else:
            #Si estamos en la cuenta atrás actualizamos la cuenta atrás
            if self.actual_state == 'countdown':
                self.count_down.update()
                for animation in self.static_animations:
                    animation.update()

                #Si se ha completado cambiamos el estado del juego
                if self.count_down.complete():

                    if self.music_file and config.Config().get_current_music(
                    ) != self.music_file:
                        config.Config().set_current_music(self.music_file)
                        pygame.mixer.music.load(
                            data.get_path_music(self.music_file))
                        pygame.mixer.music.play(-1)

                    self.actual_state = 'race'
                    self.actual_time.start()
                    self.total_time.start()

            #Si estamos en pause, actualizamos el menú de pause
            elif self.actual_state == 'pause':
                self.pause.update()

            #Si estamos el estado en carrera, actualizamos todos los estado de carrera
            elif self.actual_state == 'race':

                if not self.complete:
                    #Actualizamos el tiempo actual
                    self.actual_time.update()
                    self.total_time.update()

                #Actualizamos al coche del jugador.
                self.player.update()

                #Actualizamos la IA.
                for ia_car in self.ia_cars:
                    #Actualizamos el coche de la IA
                    ia_car[0].update()
                    if not self.complete:
                        #Actualizamos los puntos de control para la IA dada
                        ia_car[1].update(ia_car[0])

                for ball in self.balls:
                    ball.update()

                #Actualizamos las balas.
                for bullet in self.bullets:
                    bullet.update()

                #Actualizamos las balas.
                for oil in self.oils:
                    oil.update()

                for gum in self.gums:
                    gum.update()

                for i in range(len(self.advices)):
                    self.advices[i].update()

                i = 0
                deleted = False
                while i < len(self.advices) and not deleted:
                    if self.advices[i].complete():
                        del self.advices[i]
                        deleted = True
                        if self.complete:
                            self.fadeout = True
                    i += 1

                #Controlamos el scroll de la pantalla
                self.scroll_control()

                #Controlamos posibles colisiones
                self.check_collisions()

                if not self.complete:
                    #Controlamos todos los puntos de control
                    self.checkpoints.update(self.player, True)

                    #Obtenemos la posicion del jugador actualizando el marcador
                    self.position_board.update((self.player, self.checkpoints),
                                               self.ia_cars)

                #Si pulsamos el espacio o escape, cambiamos al estado pause
                if (keyboard.pressed(config.Config().get_pause_key()) \
                    or not pygame.key.get_focused()) and not self.fadeout:

                    self.actual_state = 'pause'
                    pygame.mixer.music.pause()
                    self.actual_time.pause()
                    self.player.set_state(gameobject.NOACTION)

            if self.fadeout:
                self.actual_alpha += self.fadeout_speed
                self.fade_surface.set_alpha(self.actual_alpha)

                if self.actual_alpha >= 255:
                    self.fadeout = False
                    if config.Config().get_mode() == config.TIMED:
                        self.game_mode.completed_race(self.player,
                                                      self.total_time,
                                                      self.best_lap_player,
                                                      self.lap_times)
                    else:
                        self.game_mode.completed_race(
                            self.position_board.get_all_players_position())

        for animation in self.static_animations:
            animation.update()

        if self.actual_state != 'pause':
            #Actualizamos las cajas de items
            for box in self.items_box:
                if self.on_screen(box):
                    box.update()
    def update(self):
        '''
        @brief Método encargado de actualizar todos los componentes del circuito
        '''
        #Si estamos en la cuenta atrás actualizamos la cuenta atrás
        if self.actual_state == 'countdown':
            self.count_down.update()
            #Si se ha completado cambiamos el estado del juego
            if self.count_down.complete():
                self.actual_state = 'race'
                self.actual_time.start()
                self.total_time.start()

        #Si estamos en pause, actualizamos el menú de pause
        elif self.actual_state == 'pause':
            self.pause.update()
        
        #Si estamos el estado en carrera, actualizamos todos los estado de carrera
        elif self.actual_state == 'race':
                        
            #Actualizamos el tiempo actual
            self.actual_time.update()
            self.total_time.update()
            
            #Actualizamos al coche del jugador.
            self.player.update()
            
            #Actualizamos la IA.
            for ia_car in self.ia_cars:
                ia_car.update(self.player.rect.x, self.player.rect.y)
            
            #Actualizamos las cajas de items
            for box in self.items_box:
                if self.on_screen(box):
                    box.update()
            
            for ball in self.balls:
                ball.update()
                        
            #Actualizamos las balas.
            for bullet in self.bullets:
                bullet.update()

            #Actualizamos las balas.
            for oil in self.oils:
                oil.update()
                    
            #Controlamos el scroll de la pantalla
            self.scroll_control()
            
            #Controlamos posibles colisiones
            self.check_collisions()
            
            #Controlamos todos los puntos de control    
            self.checkpoints.update(self.player)

            #Si pulsamos el espacio o escape, cambiamos al estado pause
            if keyboard.pressed(K_ESCAPE) or keyboard.pressed(K_p) \
                or not pygame.key.get_focused():
                    
                self.actual_state = 'pause'
                self.actual_time.pause()
                self.player.set_state(gameobject.NOACTION)