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()
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()
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
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
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
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
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
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