Esempio n. 1
0
    def __init__(self,
                 font_code,
                 size_font,
                 inicial_scale,
                 increase_scale,
                 color,
                 number=3,
                 sound_file=None):
        '''
        @brief Constructor
        
        @param font_code Código de la fuente a usar
        @param size_font Tamaño de la fuente a usar
        @param inicial_scale Escala inicial
        @param increase_scale Parametro de incremento de la escala
        @param color Color de la fuente
        @param number Número en segundos de la cuenta atrás
        '''
        #Obtenemos la fuente
        self.font = resource.get_font(font_code, size_font)

        #Creamos la cola de elementos
        self.elements = deque()

        self.sound = None
        if sound_file:
            self.sound = resource.get_sound(sound_file)
            self.sound.set_volume(config.Config().get_sound_volume())

        #Introducimos todos los elementos
        for i in range(1, number + 1):
            self.elements.appendleft(self.font.render(str(i), True, color))

        #Introducimos el fin de la cuenta atras
        self.elements.append(self.font.render('Go!!!', True, color))

        #Obtenemos el primer elemento de la cola
        self.actual_element = self.elements.popleft()
        self.element_modify = self.actual_element

        #Asinamos valores
        self.inicial_scale = inicial_scale
        self.increase_scale = increase_scale
        self.scale = inicial_scale

        #Obtenemos el centro de la pantalla para que todos los número queden
        #igual posicionados
        self.centerx = pygame.display.get_surface().get_width() / 2
        self.centery = pygame.display.get_surface().get_height() / 2

        #Variables que representan posicion de destino, tiempo inicial y
        #condicion de parada, respectivamente
        self.rect_destiny = self.actual_element.get_rect()
        self.rect_destiny.centerx = self.centerx
        self.rect_destiny.centery = self.centery
        self.__start = None
        self.sound_start = False
        self.stop = False
Esempio n. 2
0
    def __init__(self, font_code, size_font, inicial_scale, increase_scale, 
                color, number = 3, sound_file = None):
        '''
        @brief Constructor
        
        @param font_code Código de la fuente a usar
        @param size_font Tamaño de la fuente a usar
        @param inicial_scale Escala inicial
        @param increase_scale Parametro de incremento de la escala
        @param color Color de la fuente
        @param number Número en segundos de la cuenta atrás
        '''
        #Obtenemos la fuente
        self.font = resource.get_font(font_code, size_font)
        
        #Creamos la cola de elementos
        self.elements = deque()

        self.sound = None
        if sound_file:
            self.sound = resource.get_sound(sound_file)
            self.sound.set_volume(config.Config().get_sound_volume())
            
        #Introducimos todos los elementos
        for i in range(1, number + 1):
            self.elements.appendleft(self.font.render(str(i), True, color))
        
        #Introducimos el fin de la cuenta atras
        self.elements.append(self.font.render('Go!!!', True, color))
        
        #Obtenemos el primer elemento de la cola
        self.actual_element = self.elements.popleft()
        self.element_modify = self.actual_element
        
        #Asinamos valores
        self.inicial_scale = inicial_scale
        self.increase_scale = increase_scale
        self.scale = inicial_scale
        
        #Obtenemos el centro de la pantalla para que todos los número queden 
        #igual posicionados
        self.centerx = pygame.display.get_surface().get_width() / 2
        self.centery = pygame.display.get_surface().get_height() / 2
        
        #Variables que representan posicion de destino, tiempo inicial y 
        #condicion de parada, respectivamente
        self.rect_destiny = self.actual_element.get_rect()
        self.rect_destiny.centerx = self.centerx
        self.rect_destiny.centery = self.centery
        self.__start = None
        self.sound_start = False
        self.stop = False
Esempio n. 3
0
    def __init__(self, game_control, xml_file, x, y, angle = 0):
        '''
        @brief Constructor.
        
        @param game_control Referencia a Gamecontrol
        @param xml_file Archivo xml con la configuración del objeto
        @param x Posición en el eje x
        @param y Posición en el eje y
        @param angle Ángulo del objeto, por defecto será 0.
        '''
        gameobject.GameObject.__init__(self, game_control)
        
        self.break_force = None
        self.avatar = None
        self.racer_image = None
        self.name_character = ""

        #Parseamos la información básica
        parser = xml.dom.minidom.parse(data.get_path_xml(xml_file))
        self.parser_car_info(parser)
        self.parser_basic_info(parser)
        
        #Definimos la posición del objeto
        self.x = self.old_x = x
        self.y = self.old_y = y
        
        self.start = None
        self.turbo_state = None
        self.turbo_sound = resource.get_sound('turbo')
        self.turbo_sound.set_volume(config.Config().get_sound_volume())
        
        self.old_max_speed = self.max_speed

        self.front_line = gameobject.Line(1, 1, 1, 1)
        self.back_line = gameobject.Line(1, 1, 1, 1)
        
        #Si el angulo es 0, no hacemos nada
        if angle == 0:
            self.dx = 0
            self.dy = 0
        #Si es 0 actualizamos el angulo del coche
        else:
            self.actual_angle = angle
            self.dx = math.cos(angle) * self.actual_speed
            self.dy = math.sin(angle) * self.actual_speed
        
        #Actualizamos la posicion del coche según su angulo
        self.update_position()
        #Actualizamos la rotación de la imagen del coche
        self.update_image()
Esempio n. 4
0
    def __init__(self, game_control, xml_file, x, y, angle=0):
        '''
        @brief Constructor.
        
        @param game_control Referencia a Gamecontrol
        @param xml_file Archivo xml con la configuración del objeto
        @param x Posición en el eje x
        @param y Posición en el eje y
        @param angle Ángulo del objeto, por defecto será 0.
        '''
        gameobject.GameObject.__init__(self, game_control)

        self.break_force = None
        self.avatar = None
        self.racer_image = None
        self.name_character = ""

        #Parseamos la información básica
        parser = xml.dom.minidom.parse(data.get_path_xml(xml_file))
        self.parser_car_info(parser)
        self.parser_basic_info(parser)

        #Definimos la posición del objeto
        self.x = self.old_x = x
        self.y = self.old_y = y

        self.start = None
        self.turbo_state = None
        self.turbo_sound = resource.get_sound('turbo')
        self.turbo_sound.set_volume(config.Config().get_sound_volume())

        self.old_max_speed = self.max_speed

        self.front_line = gameobject.Line(1, 1, 1, 1)
        self.back_line = gameobject.Line(1, 1, 1, 1)

        #Si el angulo es 0, no hacemos nada
        if angle == 0:
            self.dx = 0
            self.dy = 0
        #Si es 0 actualizamos el angulo del coche
        else:
            self.actual_angle = angle
            self.dx = math.cos(angle) * self.actual_speed
            self.dy = math.sin(angle) * self.actual_speed

        #Actualizamos la posicion del coche según su angulo
        self.update_position()
        #Actualizamos la rotación de la imagen del coche
        self.update_image()
Esempio n. 5
0
    def __init__(self,
                 game,
                 game_mode,
                 path,
                 best_total_time,
                 best_lap,
                 laps=3):
        '''
        @brief Constructor
        
        @param game Referencia a game
        @param path archivo xml del circuito en cuestión
        '''
        state.State.__init__(self, game)

        #Musica circuito
        self.music_file = None

        self.game_mode = game_mode
        #Coche del jugador.
        #self.player = playercar.PlayerCar(self, 'cars/coche_prueba_yellow.xml', 0, 0, 0)
        #self.player = playercar.PlayerCar(self, 'cars/coche_prueba_yellow.xml', 500, 400, 0)

        #Grupo de sprites que contentrá los coches de la IA.
        self.ia_cars = []

        #Checkpoints para la ia
        self.ia_checkpoints = [
            checkpoint.CheckPoints(self),
            checkpoint.CheckPoints(self),
            checkpoint.CheckPoints(self),
            checkpoint.CheckPoints(self)
        ]

        #Grupo de sprites que contendrá las cajas de items.
        #self.items_box = pygame.sprite.Group()
        self.items_box = pygame.sprite.Group()

        #Checkpoints que posee el circuito
        self.checkpoints = checkpoint.CheckPoints(self)

        #Puntos objetivos por los que tienen que pasar la IA
        self.ia_checks = {}

        #Grupo de sprite que contendrá las balas.
        self.bullets = pygame.sprite.Group()

        #Grupo de sprite que contendrás las manchas de aceite
        self.oils = pygame.sprite.Group()

        #Grupo para las pelotas
        self.balls = pygame.sprite.Group()

        #Grupo para las pelotas
        self.gums = pygame.sprite.Group()

        #Animaciones que estarán en el juego
        self.static_animations = []

        self.advices = []

        #Gestor de colisiones
        self.collision_manager = collisionmanager.CollisionManager()

        #Linea de salida
        self.start = None
        self.complete = False

        #Vueltas al circuito
        self.max_laps = laps
        self.actual_laps = 0

        #Fuentes que usaremos
        self.font = resource.get_font('cheesebu', 35)
        self.font2 = resource.get_font('cheesebu', 70)

        #Contador de vuelta
        self.laps_counter = None
        self.laps_counter_rect = None

        #Obtenemos una superficie negra del mismo tamaño que la pantalla
        self.fade_surface = pygame.Surface(
            (pygame.display.get_surface().get_width(),
             pygame.display.get_surface().get_height()))
        self.fadein = True
        self.fadeout = False
        self.fade_speed = 5
        self.fadeout_speed = 5
        self.actual_alpha = 255

        #Actualizamos el contador
        self.update_laps_counter()

        #Cronómetros de carrera
        self.actual_time = timer.Timer('cheesebu', 20, (0, 0, 0), 725, 10,
                                       "Actual:")
        self.total_time = timer.Timer('cheesebu', 20, (0, 0, 0), 725, 80,
                                      "Total:")

        #Mejor tiempo total del circuito
        self.best_total_time = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 80,
                                           "Mejor total:", best_total_time[0],
                                           best_total_time[1],
                                           best_total_time[2])

        #Mejor tiempo de vuelta del circuito
        self.best_time = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 10,
                                     "Mejor Vuelta:", best_lap[0], best_lap[1],
                                     best_lap[2])

        #Mejor vuelta del jugador
        self.best_lap_player = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 10,
                                           "Mejor Vuelta:", 100, 0, 0)

        #Tiempos por vueltas
        self.lap_times = []

        #Circuito actual que vamos a jugar.
        self.circuit = circuit.Circuit(self, path)

        #Menú de pausa
        self.pause = pausemenu.PauseMenu(self.game, self, 'menu/pausemenu.xml')

        #Cuenta atras
        #self.count_down = countdown.CountDown('cheesebu', 300, 0.02, 0.05, (221, 113, 5), 3, 'countdown')
        self.count_down = countdown.CountDown('cheesebu', 300, 0.02, 0.05,
                                              (0, 0, 0), 3, 'countdown')

        #Marcador de las posiciones de los jugadores
        self.position_board = PositionBoard(20, 10, 'image_position1',
                                            'image_position2')

        #Pasamos al estado de cuenta atras
        self.actual_state = None

        self.position = {1: 'st', 2: 'nd', 3: 'rd', 4: 'th'}
        self.player_position = 1

        #Actualizamos al jugador y la IA para posicionar bien la pantalla
        self.player.update()

        aux_ia_cars = []

        #Actualizamos a la IA una primera vez y le situamos los puntos objetivos
        for i in range(len(self.ia_cars)):
            self.ia_cars[i].update()
            self.ia_cars[i].set_targets(self.ia_checks)

            #Asociamos checkpoints con la IA
            aux_ia_cars.append((self.ia_cars[i], self.ia_checkpoints[i]))

        self.ia_cars = aux_ia_cars

        #Actualizamos por primera vez el marcador de posiciones
        self.position_board.update((self.player, self.checkpoints),
                                   self.ia_cars)

        #Posicionamos la pantalla
        self.scroll_control()

        #Sonidos de juego
        self.sounds = {}

        self.sounds['collected_item'] = resource.get_sound('item_collected')
        self.sounds['missile_explosion'] = resource.get_sound(
            'missile_explosion')
        self.sounds['ball_explosion'] = resource.get_sound('ball_explosion')
        self.sounds['ball_rebound'] = resource.get_sound('ball_rebound')
        self.sounds['yaw'] = resource.get_sound('yaw')

        for key in self.sounds.keys():
            self.sounds[key].set_volume(config.Config().get_sound_volume())
Esempio n. 6
0
    def __init__(self, game, game_mode, path, best_total_time, best_lap, 
                laps = 3):
        '''
        @brief Constructor
        
        @param game Referencia a game
        @param path archivo xml del circuito en cuestión
        '''
        state.State.__init__(self, game)
        
        #Musica circuito
        self.music_file = None
        
        self.game_mode = game_mode
        #Coche del jugador.
        #self.player = playercar.PlayerCar(self, 'cars/coche_prueba_yellow.xml', 0, 0, 0)
        #self.player = playercar.PlayerCar(self, 'cars/coche_prueba_yellow.xml', 500, 400, 0)

        #Grupo de sprites que contentrá los coches de la IA.
        self.ia_cars = []
        
        #Checkpoints para la ia
        self.ia_checkpoints = [checkpoint.CheckPoints(self),
                            checkpoint.CheckPoints(self),
                            checkpoint.CheckPoints(self),
                            checkpoint.CheckPoints(self)]
        
        #Grupo de sprites que contendrá las cajas de items. 
        #self.items_box = pygame.sprite.Group()
        self.items_box = pygame.sprite.Group()
        
        #Checkpoints que posee el circuito
        self.checkpoints = checkpoint.CheckPoints(self)
        
        #Puntos objetivos por los que tienen que pasar la IA
        self.ia_checks = {}
        
        #Grupo de sprite que contendrá las balas.
        self.bullets = pygame.sprite.Group()
        
        #Grupo de sprite que contendrás las manchas de aceite
        self.oils = pygame.sprite.Group()
        
        #Grupo para las pelotas
        self.balls = pygame.sprite.Group()
        
        #Grupo para las pelotas
        self.gums = pygame.sprite.Group()
        
        #Animaciones que estarán en el juego
        self.static_animations = []
        
        self.advices = []
                
        #Gestor de colisiones
        self.collision_manager = collisionmanager.CollisionManager()
                
        #Linea de salida
        self.start = None
        self.complete = False
        
        #Vueltas al circuito
        self.max_laps = laps
        self.actual_laps = 0
                
        #Fuentes que usaremos
        self.font = resource.get_font('cheesebu', 35)
        self.font2 = resource.get_font('cheesebu', 70)
        
        #Contador de vuelta
        self.laps_counter = None
        self.laps_counter_rect = None
        
        #Obtenemos una superficie negra del mismo tamaño que la pantalla
        self.fade_surface = pygame.Surface((pygame.display.get_surface().get_width(), pygame.display.get_surface().get_height()))
        self.fadein = True
        self.fadeout = False
        self.fade_speed = 5
        self.fadeout_speed = 5
        self.actual_alpha = 255
        
        #Actualizamos el contador
        self.update_laps_counter()
        
        #Cronómetros de carrera
        self.actual_time = timer.Timer('cheesebu', 20, (0, 0, 0), 725, 10, 
                                    "Actual:")
        self.total_time = timer.Timer('cheesebu', 20, (0, 0, 0), 725, 80,
                                    "Total:")
        
        #Mejor tiempo total del circuito
        self.best_total_time = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 80,
                                        "Mejor total:", best_total_time[0],
                                        best_total_time[1],best_total_time[2])
        
        #Mejor tiempo de vuelta del circuito
        self.best_time = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 10, 
                                    "Mejor Vuelta:", best_lap[0], 
                                    best_lap[1], best_lap[2])
        
        #Mejor vuelta del jugador
        self.best_lap_player = timer.Timer('cheesebu', 20, (0, 0, 0), 600, 10, 
                                    "Mejor Vuelta:", 100, 0, 0)
        
        #Tiempos por vueltas
        self.lap_times = []
        
        #Circuito actual que vamos a jugar.
        self.circuit = circuit.Circuit(self, path)
        
        #Menú de pausa
        self.pause = pausemenu.PauseMenu(self.game, self, 'menu/pausemenu.xml')
        
        #Cuenta atras
        #self.count_down = countdown.CountDown('cheesebu', 300, 0.02, 0.05, (221, 113, 5), 3, 'countdown')
        self.count_down = countdown.CountDown('cheesebu', 300, 0.02, 0.05, 
                                            (0, 0, 0), 3, 'countdown')
        
        #Marcador de las posiciones de los jugadores
        self.position_board = PositionBoard(20, 10, 'image_position1', 
                                        'image_position2')
        
        #Pasamos al estado de cuenta atras
        self.actual_state = None
        
        self.position = {1: 'st', 2: 'nd', 3: 'rd', 4: 'th'}
        self.player_position = 1
        
        #Actualizamos al jugador y la IA para posicionar bien la pantalla
        self.player.update()
        
        aux_ia_cars = []
        
        #Actualizamos a la IA una primera vez y le situamos los puntos objetivos
        for i in range(len(self.ia_cars)):
            self.ia_cars[i].update()
            self.ia_cars[i].set_targets(self.ia_checks)
            
            #Asociamos checkpoints con la IA
            aux_ia_cars.append((self.ia_cars[i], self.ia_checkpoints[i]))
        
        self.ia_cars = aux_ia_cars
        
        #Actualizamos por primera vez el marcador de posiciones
        self.position_board.update((self.player, self.checkpoints), 
                                    self.ia_cars)
        
        #Posicionamos la pantalla
        self.scroll_control()
        
        #Sonidos de juego
        self.sounds = {}
        
        self.sounds['collected_item'] = resource.get_sound('item_collected')
        self.sounds['missile_explosion'] = resource.get_sound('missile_explosion')
        self.sounds['ball_explosion'] = resource.get_sound('ball_explosion')
        self.sounds['ball_rebound'] = resource.get_sound('ball_rebound')
        self.sounds['yaw'] = resource.get_sound('yaw')
        
        for key in self.sounds.keys():
            self.sounds[key].set_volume(config.Config().get_sound_volume())
Esempio n. 7
0
 def __init__(self, menu, xml_file, text, centerx, centery, font_code, show_text = True):
     '''
     @brief Constructor.
     
     @param menu Referencia al Menú que pertenece
     @param xml_file ruta del archivo xml donde se encuentra la configuración básica del botón
     @param text Texto que aparecera sobre el botón
     @param centerx Posición del centro x del boton 
     @param centery Posición del centro y del boton 
     '''
     self.text = text
     self.menu = menu
     parser = xml.dom.minidom.parse(data.get_path_xml(xml_file))
     
     self.centerx = centerx
     self.centery = centery 
         
     aux_rect = None
     
     father = parser.firstChild
     
     #Obtenemos la posición del texto en el boton
     self.text_position = str(father.getAttribute('text_position'))
     
     #Comprobamos si el boton mostrará el texto o no.
     if father.hasAttribute('on_button'):
         self.on_button = strTobool(str(father.getAttribute('on_button')))
     else:
         self.on_button = True
     
     self.sound_over = None
     if father.hasAttribute('sound_over'):
         self.sound_over = resource.get_sound(str(father.getAttribute('sound_over')))
         self.sound_over.set_volume(config.Config().get_sound_volume())
     
     self.sound_click = None
     if father.hasAttribute('sound_click'):
         self.sound_click = resource.get_sound(str(father.getAttribute('sound_click')))
         self.sound_click.set_volume(config.Config().get_sound_volume())
         
     #Obtenemos la imagen y sus características cuando el boton esta en estado normal
     for element in parser.getElementsByTagName('normal'):
         
         #Cargamos la imagen
         normal_image_code = str(element.getAttribute('normal_image'))
         self.normal_image = resource.get_image(normal_image_code)
         
         #obtenemos posicion de la imagen
         aux_rect = self.normal_image.get_rect()
         aux_rect.x = self.centerx
         aux_rect.y = self.centery
         self.rect_normal = pygame.Rect((0, 0, 0, 0))
         self.rect_normal.x = int(element.getAttribute('x')) + aux_rect.x
         self.rect_normal.y = int(element.getAttribute('y')) + aux_rect.y
         self.rect_normal.w = int(element.getAttribute('w'))
         self.rect_normal.h = int(element.getAttribute('h'))
     
     #Obtenemos la imagen y caracteristicas cuando el botón está seleccionado    
     for element in parser.getElementsByTagName('selected'):
         
         #Cargamos imagen
         selected_image_code = str(element.getAttribute('selected_image'))
         self.selected_image = resource.get_image(selected_image_code)
         
         #Obtenemos la posicion
         aux_rect = self.selected_image.get_rect()
         aux_rect.x = self.centerx
         aux_rect.y = self.centery
         self.rect_selected = pygame.Rect((0, 0, 0, 0))
         self.rect_selected.x = int(element.getAttribute('x')) + aux_rect.x
         self.rect_selected.y = int(element.getAttribute('y')) + aux_rect.y
         self.rect_selected.w = int(element.getAttribute('w'))
         self.rect_selected.h = int(element.getAttribute('h'))
     
     #Obtenemos el la posicion centrar de las dos imagenes
     self.rect_draw = self.normal_image.get_rect()
     self.rect_draw.centery = self.centery
     self.rect_draw.centerx = self.centerx
     
     #Si indicamos que se muestre el texto
     if show_text:
         
         #Obtenemos el texto normal que se mostrará
         for element in parser.getElementsByTagName('normal_text'):
             
             #Tamaño
             font_size = int(element.getAttribute('size'))
             
             #Color
             r = int(element.getAttribute('r'))
             g = int(element.getAttribute('g'))
             b = int(element.getAttribute('b'))
             color = (r, g, b)
             
             #Renderizamos
             self.normal_font = resource.get_font(font_code, font_size)
             self.text_render_normal = self.normal_font.render(self.text, 
                                                             True, color)
             
             #Vemos si el texto tendrá algun tipo de inclinación
             if element.hasAttribute('angle'):
                 angle = int(element.getAttribute('angle'))
                 self.text_render_normal = pygame.transform.rotozoom(self.text_render_normal, angle, 1)
             
             #Obtenemos la posicion del texto
             self.normal_text_rect = self.text_render_normal.get_rect()
             posx = int(element.getAttribute('x'))
             posy = int(element.getAttribute('y'))
             self.normal_text_rect = self.__set_rect_text(self.normal_text_rect, 
                                                         posx, posy)
         
         #Si hay opcion de cambio del color del texto cuando el botón esté seleccionado
         if len(parser.getElementsByTagName('selected_text')) > 0:
             #Obtenemos dicho texto
             for element in parser.getElementsByTagName('selected_text'):
                 
                 #tamaño
                 font_size = int(element.getAttribute('size'))
                 
                 #Color
                 r = int(element.getAttribute('r'))
                 g = int(element.getAttribute('g'))
                 b = int(element.getAttribute('b'))
                 color = (r, g, b)
                 
                 #Renderizamos
                 self.selected_font = resource.get_font(font_code, font_size)
                 self.text_render_selected = self.selected_font.render(self.text, True, color)
                 
                 #Si tiene opcion de angulo
                 if element.hasAttribute('angle'):
                     #Rotamos el texto renderizado
                     angle = int(element.getAttribute('angle'))
                     self.text_render_selected = pygame.transform.rotozoom(self.text_render_selected, angle, 1)
                 
                 #Asignamos la posición que tendrá
                 self.selected_text_rect = self.text_render_selected.get_rect()
                 posx = int(element.getAttribute('x'))
                 posy = int(element.getAttribute('y'))
                 self.selected_text_rect = self.__set_rect_text(self.selected_text_rect, posx, posy)
         #Si no hay opción de texto seleccionado, asignamos el mismo texto anterior
         else:
             self.text_render_selected = self.text_render_normal
             self.selected_text_rect = self.normal_text_rect
         
     self.selected = False
 
     #Obtenemos las mascaras de colisiones para los dos botones
     self.normal_mask = pygame.mask.from_surface(self.normal_image)
     self.selected_mask = pygame.mask.from_surface(self.selected_image)
     self.actual_mask = self.normal_mask
     self.show_text = show_text