大家好!我从很多天前就陷入了一个问题,我想你可以在这里帮助我!
我的问题:我正在使用 pygame 库在 python 上制作游戏,现在我正在处理菜单,我尝试使用我制作的脚本,但它不起作用,所以你下载了一个预制脚本,但不是两者都不起作用,这里的问题是如何从说明屏幕或游戏返回菜单,这是菜单中的代码:
# -*- coding: utf-8 -*-
#
# autor: Hugo Ruscitti
# web: www.losersjuegos.com.ar
# licencia: GPL 2
import random
import pygame
from pygame.locals import *
class Opcion:
def __init__(self, fuente, titulo, x, y, paridad, funcion_asignada):
self.imagen_normal = fuente.render(titulo, 1, (0, 0, 0))
self.imagen_destacada = fuente.render(titulo, 1, (200, 0, 0))
self.image = self.imagen_normal
self.rect = self.image.get_rect()
self.rect.x = 500 * paridad
self.rect.y = y
self.funcion_asignada = funcion_asignada
self.x = float(self.rect.x)
def actualizar(self):
destino_x = 780
self.x += (destino_x - self.x) / 5.0
self.rect.x = int(self.x)
def imprimir(self, screen):
screen.blit(self.image, self.rect)
def destacar(self, estado):
if estado:
self.image = self.imagen_destacada
else:
self.image = self.imagen_normal
def activar(self):
self.funcion_asignada()
class Cursor:
def __init__(self, x, y, dy):
self.image = pygame.image.load('cursor.png').convert_alpha()
self.rect = self.image.get_rect()
self.rect.x = x
self.y_inicial = y
self.dy = dy
self.y = 0
self.seleccionar(0)
def actualizar(self):
self.y += (self.to_y - self.y) / 10.0
self.rect.y = int(self.y)
def seleccionar(self, indice):
self.to_y = self.y_inicial + indice * self.dy
def imprimir(self, screen):
screen.blit(self.image, self.rect)
class Menu:
"Representa un menú con opciones para un juego"
def __init__(self, opciones):
self.opciones = []
fuente = pygame.font.Font('dejavu.ttf', 40)
x = 780
y = 250
paridad = 1
self.cursor = Cursor(x - 95, y, 95)
for titulo, funcion in opciones:
self.opciones.append(Opcion(fuente, titulo, x, y, paridad, funcion))
y += 30
if paridad == 1:
paridad = -1
else:
paridad = 1
self.seleccionado = 0
self.total = len(self.opciones)
self.mantiene_pulsado = False
def actualizar(self):
"""Altera el valor de 'self.seleccionado' con los direccionales."""
k = pygame.key.get_pressed()
if not self.mantiene_pulsado:
if k[K_UP]:
self.seleccionado -= 1
elif k[K_DOWN]:
self.seleccionado += 1
elif k[K_RETURN]:
# Invoca a la función asociada a la opción.
self.opciones[self.seleccionado].activar()
# procura que el cursor esté entre las opciones permitidas
if self.seleccionado < 0:
self.seleccionado = 0
elif self.seleccionado > self.total - 1:
self.seleccionado = self.total - 1
self.cursor.seleccionar(self.seleccionado)
# indica si el usuario mantiene pulsada alguna tecla.
self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]
self.cursor.actualizar()
for o in self.opciones:
o.actualizar()
def imprimir(self, screen):
"""Imprime sobre 'screen' el texto de cada opción del menú."""
self.cursor.imprimir(screen)
for opcion in self.opciones:
opcion.imprimir(screen)
def comenzar_nuevo_juego():
print " Función que muestra un nuevo juego."
def mostrar_opciones():
print " Función que muestra otro menú de opciones."
def creditos():
print " Función que muestra los creditos del programa."
def salir_del_programa():
import sys
print " Gracias por utilizar este programa."
sys.exit(0)
if __name__ == '__main__':
salir = False
opciones = [
("", comenzar_nuevo_juego),
("", mostrar_opciones),
("", creditos),
("", salir_del_programa)
]
pygame.font.init()
screen = pygame.display.set_mode((1200, 900))
fondo = pygame.image.load("fondo.jpg").convert()
menu = Menu(opciones)
while not salir:
for e in pygame.event.get():
if e.type == QUIT:
salir = True
screen.blit(fondo, (0, 0))
menu.actualizar()
menu.imprimir(screen)
pygame.display.flip()
pygame.time.delay(10)
我会等待你的答案!
更多细节:在我的代码中,我将菜单设置为:def menu():然后回到菜单,我刚刚调用了函数 menu(),但在这种情况下,我不能,因为菜单不是函数。