Example #1
0
def request(title, inputtext):
    """
    Función que abre una ventana para pedir un nombre de usuario
    :param title: Título de la ventana
    :param inputtext: Mensaje del prompt
    :return: String del nombre
    """
    # Se crea la ventana
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    pygame.display.set_mode(SCREEN_SIZE, pygame.NOFRAME)  # @UnusedVariable
    pygame.display.set_caption(title)
    pygame.display.set_icon(pygame.image.load(getIcons('icon')))
    screen = pygame.display.get_surface()
    nombre = Input(10, inputtext)

    # Reloj del juego
    clock = pygame.time.Clock()

    # Se crea el titulo de la ventana
    window_title_fontsize = 30
    window_title = pygame.font.Font(getFonts('menu'), window_title_fontsize)
    window_title_font = window_title.render(title, 1, COLOR_WHITE)
    window_title_width = window_title_font.get_size()[0]
    window_title_pos = [(0, 0), (SCREEN_SIZE[0], 0),
                        (SCREEN_SIZE[0], int(window_title_fontsize / 2)),
                        (window_title_width + 15,
                         int(window_title_fontsize / 2)),
                        (window_title_width + 5, window_title_fontsize + 7),
                        (0, window_title_fontsize + 7)]

    # Se lanza el programa
    while True:
        clock.tick(60)  # se definen los fps
        time = float(
            clock.get_time()) / 1000.0  # tiempo que tomo el frame en generarse
        screen.fill(COLOR_BLACK)  # se limpia la pantalla

        # Se dibuja el rectangulo rojo del titulo
        pygame.gfxdraw.filled_polygon(screen, window_title_pos, TITLE_BG_COLOR)
        screen.blit(window_title_font, (5, 0))

        # Eventos del programa principal
        events = pygame.event.get()  # se definen los eventos
        for event in events:
            if event.type == QUIT:
                return NO_VALID_NAME
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return NO_VALID_NAME

                    # Se recoge el resultado
        state = nombre.update(events)
        if state != NULLSTATE and validate(state):
            return state

        # Se dibuja el campo en pantalla
        nombre.draw(screen)

        # Se refresca la ventana
        pygame.display.flip()
Example #2
0
def request(title, inputtext):
    """
    Función que abre una ventana para pedir un nombre de usuario
    :param title: Título de la ventana
    :param inputtext: Mensaje del prompt
    :return: String del nombre
    """
    # Se crea la ventana
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    display = pygame.display.set_mode(SCREEN_SIZE, pygame.NOFRAME)  # @UnusedVariable
    pygame.display.set_caption(title)
    pygame.display.set_icon(pygame.image.load(getIcons("icon")))
    screen = pygame.display.get_surface()
    nombre = Input(10, inputtext)

    # Reloj del juego
    clock = pygame.time.Clock()

    # Se crea el titulo de la ventana
    window_title_fontsize = 30
    window_title = pygame.font.Font(getFonts("menu"), window_title_fontsize)
    window_title_font = window_title.render(title, 1, COLOR_WHITE)
    window_title_width = window_title_font.get_size()[0]
    window_title_pos = [(0, 0), (SCREEN_SIZE[0], 0), (SCREEN_SIZE[0], int(window_title_fontsize / 2)),
                        (window_title_width + 15, int(window_title_fontsize / 2)), \
                        (window_title_width + 5, window_title_fontsize + 7), (0, window_title_fontsize + 7)]

    # Se lanza el programa
    while True:
        clock.tick(60)  # se definen los fps
        time = float(clock.get_time()) / 1000.0  # tiempo que tomo el frame en generarse @UnusedVariable
        screen.fill(COLOR_BLACK)  # se limpia la pantalla

        # Se dibuja el rectangulo rojo del titulo
        pygame.gfxdraw.filled_polygon(screen, window_title_pos, TITLE_BG_COLOR)
        screen.blit(window_title_font, (5, 0))

        # Eventos del programa principal
        events = pygame.event.get()  # se definen los eventos
        for event in events:
            if event.type == QUIT:
                return NO_VALID_NAME
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE: return NO_VALID_NAME

                # Se recoge el resultado
        state = nombre.update(events)
        if state != NULLSTATE and validate(state): return state

        # Se dibuja el campo en pantalla
        nombre.draw(screen)

        # Se refresca la ventana
        pygame.display.flip()
Example #3
0
 def __init__(self, size, prompt):
     """
     Función constructora
     :param size: Tamaño de la ventana
     :param prompt: Mensaje
     :return: void
     """
     self.font = pygame.font.Font(getFonts('menu'), 17)
     self.maxlength = size
     self.prompt = prompt
     self.value = ''
     self.shifted = False
Example #4
0
 def __init__(self, size, prompt):
     """
     Función constructora
     :param size: Tamaño de la ventana
     :param prompt: Mensaje
     :return: void
     """
     self.font = pygame.font.Font(getFonts("menu"), 17)
     self.maxlength = size
     self.prompt = prompt
     self.value = ''
     self.shifted = False
Example #5
0
    def __init__(self, langs, window, world, game_config, user_config,
                 view_config, window_config, world_config, map_config):
        """
        Función constructora
        :param langs: Diccionario de idioma
        :param window: Ventana de la aplicación
        :param world: Objeto mundo
        :param game_config: Configuraciones del juego
        :param user_config: Configuraciones de usuario
        :param view_config: Configuraciones de la vista
        :param window_config: Configuraciones de la ventana
        :param world_config: Configuraciones del mundo
        :param map_config: Configuraciones del mapa
        :return: void
        """

        # Variables de clase
        self.config_game = game_config  # configuraciones del juego
        self.config_map = map_config  # configuracion del mapa
        self.config_user = user_config  # configuraciones de usuario
        self.config_view = view_config  # configuraciones de la vista
        self.config_window = window_config  # configuraciones de la ventana
        self.config_world = world_config  # configuraciones del mundo
        self.controller = None  # controlador
        self.font = getFonts("menu")  # se obtiene la fuente por defecto
        self.langs = langs  # idiomas del juego
        self.menu_inicial_title_font = pygame.font.Font(getFonts("nfs"), 55)
        self.screen = window.get_surface()  # se obtiene la superficie de dibujo
        self.sound_state = game_config.isTrue(
            "ENABLESOUND")  # define si los sonidos estan activos
        self.view = None  # vista
        self.window = window  # ventana de visualización
        self.world = world  # mundo
        # Canales de sonido de los menues
        self.menuSoundChannel = pygame.mixer.Channel(4)
        self.menuSoundChannel.set_volume(
            float(self.config_world.getValue("CHANNEL_4")))
        self.menuButtonChannel = pygame.mixer.Channel(5)
        self.menuSoundChannel.set_volume(
            float(self.config_world.getValue("CHANNEL_5")))
        # Sonido de fondo del menu de inicio
        self.menu_inicial_sfx = pygame.mixer.Sound(getSounds("intro"))
        self.menu_button_up = pygame.mixer.Sound(getSounds("down"))
        self.menu_button_down = pygame.mixer.Sound(getSounds("up"))
        # Se renderiza la fuente del titulo
        self.menu_inicial_title = self.menu_inicial_title_font.render(
            self.langs.get(10), 1, (255, 255, 255))
        self.menu_inicial_title_shadow = self.menu_inicial_title_font.render(
            self.langs.get(10), 1, (0, 0, 0))
        self.menu_inicial_title_shadow_width = \
            self.menu_inicial_title_shadow.get_size()[0]
        self.menu_inicial_title_width = self.menu_inicial_title.get_size()[0]
        self.menu_inicial_title_shadow_pos = (
            self.window.get_window_width() / 2 - self.menu_inicial_title_shadow_width / 2 - 3,
            (self.window.get_window_height() - 400) / 2 - 70)
        self.menu_inicial_title_pos = (
            self.window.get_window_width() / 2 - self.menu_inicial_title_width / 2,
            (self.window.get_window_height() - 400) / 2 - 65)
        # Menues
        self.actualmenu = None
        self.menu_inicial = None
        self.menu_jugar = None
        self.menu_pausa = None
        # Se crean los menues
        self.intializeMenuInicial()
        self.setActualMenu(MENU_INICIAL)
        self.initializeMenuPausa()
        # Se crean las imagenes de fondo
        self.splashimages = []
        for key in range(1, 11):
            image = pygame.transform.scale(
                pygame.image.load(getImages("splash" + str(key))),
                (window.get_window_width(), window.get_window_height()))
            self.splashimages.append(image)
        # Tiempos de efectos visuales de fondo
        self.splashindex = 0
        self.splashmaxtime = 0
        self.splashtime = 0
Example #6
0
    def __init__(self, langs, window, world, game_config, user_config,
                 view_config, window_config, world_config, map_config):
        """
        Función constructora
        :param langs: Diccionario de idioma
        :param window: Ventana de la aplicación
        :param world: Objeto mundo
        :param game_config: Configuraciones del juego
        :param user_config: Configuraciones de usuario
        :param view_config: Configuraciones de la vista
        :param window_config: Configuraciones de la ventana
        :param world_config: Configuraciones del mundo
        :param map_config: Configuraciones del mapa
        :return: void
        """

        # Variables de clase
        self.config_game = game_config  # configuraciones del juego
        self.config_map = map_config  # configuracion del mapa
        self.config_user = user_config  # configuraciones de usuario
        self.config_view = view_config  # configuraciones de la vista
        self.config_window = window_config  # configuraciones de la ventana
        self.config_world = world_config  # configuraciones del mundo
        self.controller = None  # controlador
        self.font = getFonts("menu")  # se obtiene la fuente por defecto
        self.langs = langs  # idiomas del juego
        self.menu_inicial_title_font = pygame.font.Font(getFonts("nfs"), 55)
        self.screen = window.get_surface(
        )  # se obtiene la superficie de dibujo
        self.sound_state = game_config.isTrue(
            "ENABLESOUND")  # define si los sonidos estan activos
        self.view = None  # vista
        self.window = window  # ventana de visualización
        self.world = world  # mundo
        # Canales de sonido de los menues
        self.menuSoundChannel = pygame.mixer.Channel(4)
        self.menuSoundChannel.set_volume(
            float(self.config_world.getValue("CHANNEL_4")))
        self.menuButtonChannel = pygame.mixer.Channel(5)
        self.menuSoundChannel.set_volume(
            float(self.config_world.getValue("CHANNEL_5")))
        # Sonido de fondo del menu de inicio
        self.menu_inicial_sfx = pygame.mixer.Sound(getSounds("intro"))
        self.menu_button_up = pygame.mixer.Sound(getSounds("down"))
        self.menu_button_down = pygame.mixer.Sound(getSounds("up"))
        # Se renderiza la fuente del titulo
        self.menu_inicial_title = self.menu_inicial_title_font.render(
            self.langs.get(10), 1, (255, 255, 255))
        self.menu_inicial_title_shadow = self.menu_inicial_title_font.render(
            self.langs.get(10), 1, (0, 0, 0))
        self.menu_inicial_title_shadow_width = \
            self.menu_inicial_title_shadow.get_size()[0]
        self.menu_inicial_title_width = self.menu_inicial_title.get_size()[0]
        self.menu_inicial_title_shadow_pos = (
            self.window.get_window_width() / 2 -
            self.menu_inicial_title_shadow_width / 2 - 3,
            (self.window.get_window_height() - 400) / 2 - 70)
        self.menu_inicial_title_pos = (
            self.window.get_window_width() / 2 -
            self.menu_inicial_title_width / 2,
            (self.window.get_window_height() - 400) / 2 - 65)
        # Menues
        self.actualmenu = None
        self.menu_inicial = None
        self.menu_jugar = None
        self.menu_pausa = None
        # Se crean los menues
        self.intializeMenuInicial()
        self.setActualMenu(MENU_INICIAL)
        self.initializeMenuPausa()
        # Se crean las imagenes de fondo
        self.splashimages = []
        for key in range(1, 11):
            image = pygame.transform.scale(
                pygame.image.load(getImages("splash" + str(key))),
                (window.get_window_width(), window.get_window_height()))
            self.splashimages.append(image)
        # Tiempos de efectos visuales de fondo
        self.splashindex = 0
        self.splashmaxtime = 0
        self.splashtime = 0
Example #7
0
    def __init__(self, window, clock, world, lang, view_config, menus):
        """
        Función constructora
        :param window: Ventana de la aplicación
        :param clock: Reloj de pygame
        :param world: Mundo lógico
        :param lang: Diccionario de idiomas
        :param view_config: Configuraciones de la vista
        :param menus: Menues del juego
        :return: void
        """

        # Se guardan los parametros
        self.config = view_config  # configuracion de la vista
        self.controller = None  # controlador
        self.lang = lang  # idiomas
        self.map = world.get_actual_map()  # mapa actual
        self.menu = menus  # menus del juego
        self.window = window  # ventana
        self.world = world  # mundo
        if self.map is None:
            self.isPlaying = False
        else:
            self.isPlaying = True
        # Se cargan configuraciones
        self.mark_ground_size = int(view_config.getValue(
            "GROUND_MARK_SIZE"))  # ancho de la marca en la tierra
        self.mark_track_size = int(view_config.getValue(
            "TRACK_MARK_SIZE"))  # ancho de la marca en la pista
        self.show_fps = view_config.isTrue(
            "SHOWFPS")  # define si se dibuja el fps en el titulo de la ventana
        self.show_ghost = view_config.isTrue(
            "SHOWGHOST")  # define si se dibuja al ghost o no
        self.show_mark_ground = view_config.isTrue(
            "SHOWMARKGROUND")  # define si se muestran las marcas en la tierra
        self.show_mark_track = view_config.isTrue(
            "SHOWMARKTRACK")  # define si se muestran las marcas en el camino
        self.show_player = view_config.isTrue(
            "SHOWPLAYER")  # se define si se dibuja o no el jugador en pantalla
        self.show_ruedas = view_config.isTrue(
            "SHOWRUEDAS")  # define si se dibujan las ruedas o no
        self.show_track = view_config.isTrue(
            "SHOWTRACK")  # define si se muestra la pista o no
        self.show_ui = view_config.isTrue(
            "SHOWUI")  # se define si se dibujan los paneles
        self.viewConfig = view_config  # configuraciones de la vista
        # Se defienen variables
        self.clock = clock  # reloj del juego
        self.screen = self.window.get_surface()  # superficie de dibujo
        self.windowHeight = self.window.get_window_height()  # alto de la ventana
        self.windowWidth = self.window.get_window_width()  # ancho de la ventana
        # Se crean objetos del HUD
        self.OutOfRoadFont = pygame.font.Font(getFonts("speed"),
                                              20)  # fuente fuera de la pista
        self.buttonsResultsFont = pygame.font.Font(getFonts("menu"),
                                                   20)  # fuentes de los botones de la ventana de resultados
        self.lapFont = pygame.font.Font(getFonts("lap"),
                                        40)  # fuente del contador de vueltas
        self.lapFontL = pygame.font.Font(getFonts("lap"),
                                         38)  # fuente del contador de vueltas
        self.lapPos = (self.windowWidth * 0.90,
                       self.windowHeight * 0.05)  # posición del cuenta-vueltas
        self.lapRect = pygame.image.load(
            getImages("lap_rect")).convert_alpha()  # recuadro de las vueltas
        self.lapTimeFont = pygame.font.Font(getFonts("speed"),
                                            20)  # fuente del contador de tiempo
        self.lapTimePos = (self.windowWidth * 0.03,
                           self.windowHeight * 0.05)  # posición del tiempo total
        self.posOutOfRoad = (
            self.windowWidth * 0.5 - 100,
            self.windowHeight * 0.95)  # posición del mensaje -fuera de la pista-
        self.resultsButtonNextPos = (
            int((self.windowWidth + 680) / 2) - 15, int(
                (
                    self.windowHeight + 400) / 2) - 5)  # posicion del boton siguiente del plano de resultados
        self.resultsButtonQuitPos = (
            int((self.windowWidth - 680) / 2) + 15, int(
                (
                    self.windowHeight + 400) / 2) - 5)  # posicion del boton cerrar del plano de resultados
        self.resultsFontTitle = pygame.font.Font(getFonts("speed"),
                                                 30)  # fuente de los resultados
        self.resultsFontTitleContent = pygame.font.Font(getFonts("speed"),
                                                        14)  # fuente del contenido de la pantalla resultados
        self.resultsFontTitleSubtl = pygame.font.Font(getFonts("speed"),
                                                      20)  # fuente del subtitulo de la pantalla resultados
        self.resultsFontTitleSubtl2 = pygame.font.Font(getFonts("speed"),
                                                       17)  # fuente del subtitulo de la pantalla resultados
        self.resultsFontTitleTrack = pygame.font.Font(getFonts("speed"),
                                                      20)  # fuente del titulo de la pista de la pantalla resultados
        self.resultsScreen = pygame.image.load(
            getImages("results")).convert_alpha()  # pantalla de resultados
        self.resultsScreenPos = (int((self.windowWidth - 680) / 2),
                                 int((
                                         self.windowHeight - 400) / 2) - 25)  # posición en pantalla de los resultados
        self.revolPos = (self.windowWidth - 20,
                         self.windowHeight - 60)  # posición del cuenta-revoluciones
        self.revolRect = pygame.image.load(
            getImages(
                "revol_shadowed")).convert_alpha()  # textura del cuenta-revoluciones
        self.speedFont = pygame.font.Font(getFonts("speed"),
                                          40)  # fuente de los cambios
        self.speedPos = (
            20, self.windowHeight - 60)  # posición del velocimetro
        self.speedRect = pygame.image.load(getImages(
            "velocimeter_shadowed")).convert_alpha()  # textura del velocimetro
        # Objetos del HUD dependientes
        self.revolGraph = Revolgraph(33, (
            self.revolPos[0] - 170, self.revolPos[1] + 7), 100,
                                     40)  # gráfico de las revoluciones
Example #8
0
    def __init__(self, window, clock, world, lang, view_config, menus):
        """
        Función constructora.
        :param window: Ventana de la aplicación
        :param clock: Reloj de pygame
        :param world: Mundo lógico
        :param lang: Diccionario de idiomas
        :param view_config: Configuraciones de la vista
        :param menus: Menues del juego
        :return: void
        """

        # Se guardan los parametros
        self.config = view_config  # configuracion de la vista
        self.controller = None  # controlador
        self.lang = lang  # idiomas
        self.map = world.get_actual_map()  # mapa actual
        self.menu = menus  # menus del juego
        self.window = window  # ventana
        self.world = world  # mundo
        if self.map is None:
            self.isPlaying = False
        else:
            self.isPlaying = True

        # Se cargan configuraciones
        self.mark_ground_size = int(view_config.getValue(
            "GROUND_MARK_SIZE"))  # ancho de la marca en la tierra
        self.mark_track_size = int(view_config.getValue(
            "TRACK_MARK_SIZE"))  # ancho de la marca en la pista
        self.show_fps = view_config.isTrue(
            "SHOWFPS")  # define si se dibuja el fps en el titulo de la ventana
        self.show_ghost = view_config.isTrue(
            "SHOWGHOST")  # define si se dibuja al ghost o no
        self.show_mark_ground = view_config.isTrue(
            "SHOWMARKGROUND")  # define si se muestran las marcas en la tierra
        self.show_mark_track = view_config.isTrue(
            "SHOWMARKTRACK")  # define si se muestran las marcas en el camino
        self.show_player = view_config.isTrue(
            "SHOWPLAYER")  # se define si se dibuja o no el jugador en pantalla
        self.show_ruedas = view_config.isTrue(
            "SHOWRUEDAS")  # define si se dibujan las ruedas o no
        self.show_track = view_config.isTrue(
            "SHOWTRACK")  # define si se muestra la pista o no
        self.show_ui = view_config.isTrue(
            "SHOWUI")  # se define si se dibujan los paneles
        self.viewConfig = view_config  # configuraciones de la vista

        # Se defienen variables
        self.clock = clock  # reloj del juego
        self.screen = self.window.get_surface()  # superficie de dibujo
        self.windowHeight = self.window.get_window_height(
        )  # alto de la ventana
        self.windowWidth = self.window.get_window_width(
        )  # ancho de la ventana

        # Se crean objetos del HUD
        self.OutOfRoadFont = pygame.font.Font(getFonts("speed"),
                                              20)  # fuente fuera de la pista
        self.buttonsResultsFont = pygame.font.Font(
            getFonts("menu"),
            20)  # fuentes de los botones de la ventana de resultados
        self.lapFont = pygame.font.Font(getFonts("lap"),
                                        40)  # fuente del contador de vueltas
        self.lapFontL = pygame.font.Font(getFonts("lap"),
                                         38)  # fuente del contador de vueltas
        self.lapPos = (self.windowWidth * 0.90, self.windowHeight * 0.05
                       )  # posición del cuenta-vueltas
        self.lapRect = pygame.image.load(
            getImages("lap_rect")).convert_alpha()  # recuadro de las vueltas
        self.lapTimeFont = pygame.font.Font(
            getFonts("speed"), 20)  # fuente del contador de tiempo
        self.lapTimePos = (self.windowWidth * 0.03, self.windowHeight * 0.05
                           )  # posición del tiempo total
        self.posOutOfRoad = (self.windowWidth * 0.5 - 100,
                             self.windowHeight * 0.95
                             )  # posición del mensaje -fuera de la pista-
        self.resultsButtonNextPos = (
            int((self.windowWidth + 680) / 2) - 15,
            int((self.windowHeight + 400) / 2) - 5
        )  # posicion del boton siguiente del plano de resultados
        self.resultsButtonQuitPos = (
            int((self.windowWidth - 680) / 2) + 15,
            int((self.windowHeight + 400) / 2) - 5
        )  # posicion del boton cerrar del plano de resultados
        self.resultsFontTitle = pygame.font.Font(
            getFonts("speed"), 30)  # fuente de los resultados
        self.resultsFontTitleContent = pygame.font.Font(
            getFonts("speed"),
            14)  # fuente del contenido de la pantalla resultados
        self.resultsFontTitleSubtl = pygame.font.Font(
            getFonts("speed"),
            20)  # fuente del subtitulo de la pantalla resultados
        self.resultsFontTitleSubtl2 = pygame.font.Font(
            getFonts("speed"),
            17)  # fuente del subtitulo de la pantalla resultados
        self.resultsFontTitleTrack = pygame.font.Font(
            getFonts("speed"),
            20)  # fuente del titulo de la pista de la pantalla resultados
        self.resultsScreen = pygame.image.load(
            getImages("results")).convert_alpha()  # pantalla de resultados
        self.resultsScreenPos = (int(
            (self.windowWidth - 680) / 2), int(
                (self.windowHeight - 400) / 2) - 25
                                 )  # posición en pantalla de los resultados
        self.revolPos = (self.windowWidth - 20, self.windowHeight - 60
                         )  # posición del cuenta-revoluciones
        self.revolRect = pygame.image.load(
            getImages("revol_shadowed")).convert_alpha(
            )  # textura del cuenta-revoluciones
        self.speedFont = pygame.font.Font(getFonts("speed"),
                                          40)  # fuente de los cambios
        self.speedPos = (20, self.windowHeight - 60
                         )  # posición del velocimetro
        self.speedRect = pygame.image.load(getImages(
            "velocimeter_shadowed")).convert_alpha()  # textura del velocimetro

        # Objetos del HUD dependientes
        self.revolGraph = Revolgraph(
            33, (self.revolPos[0] - 170, self.revolPos[1] + 7), 100,
            40)  # gráfico de las revoluciones