Pygame 开始按钮菜单

如何解决Pygame 开始按钮菜单

几天前我开始制作我的第一个专业pygame(之前没有做过任何pygame),所以我第一次制作了主菜单,用于实际游戏,然后是游戏,所以我有2个文件在那个项目中(主菜单和游戏)。 但是几秒钟后我意识到我不知道如何通过单击“开始”按钮从主菜单开始游戏。所以我需要一些帮助......

我会让你失望我的主菜单代码

import pygame
import pygame.freetype
from pygame.sprite import Sprite
from pygame.rect import Rect
from enum import Enum
from pygame.sprite import RenderUpdates

BLUE = (106,159,181)
WHITE = (255,255,255)


def create_surface_with_text(text,font_size,text_rgb,bg_rgb):
   """ Returns surface with text written on """
   font = pygame.freetype.SysFont("Courier",bold=True)
   surface,_ = font.render(text=text,fgcolor=text_rgb,bgcolor=bg_rgb)
   return surface.convert_alpha()


class UIElement(Sprite):
    """ An user interface element that can be added to a surface """

def __init__(self,center_position,text,bg_rgb,action=None):
    """
    Args:
        center_position - tuple (x,y)
        text - string of text to write
        font_size - int
        bg_rgb (background colour) - tuple (r,g,b)
        text_rgb (text colour) - tuple (r,b)
        action - the gamestate change associated with this button
    """
    self.mouse_over = False

    default_image = create_surface_with_text(
        text=text,font_size=font_size,text_rgb=text_rgb,bg_rgb=bg_rgb
    )

    highlighted_image = create_surface_with_text(
        text=text,font_size=font_size * 1.2,bg_rgb=bg_rgb
    )

    self.images = [default_image,highlighted_image]

    self.rects = [
        default_image.get_rect(center=center_position),highlighted_image.get_rect(center=center_position),]

    self.action = action

    super().__init__()

@property
def image(self):
    return self.images[1] if self.mouse_over else self.images[0]

@property
def rect(self):
    return self.rects[1] if self.mouse_over else self.rects[0]

def update(self,mouse_pos,mouse_up):
    """ Updates the mouse_over variable and returns the button's
        action value when clicked.
    """
    if self.rect.collidepoint(mouse_pos):
        self.mouse_over = True
        if mouse_up:
            return self.action
    else:
        self.mouse_over = False

def draw(self,surface):
    """ Draws element onto a surface """
    surface.blit(self.image,self.rect)


class Player:
""" Stores information about a player """

def __init__(self,score=0,lives=3,current_level=1):
    self.score = score
    self.lives = lives
    self.current_level = current_level


def main():
pygame.init()

screen = pygame.display.set_mode((800,600))
game_state = GameState.TITLE

while True:
    if game_state == GameState.TITLE:
        game_state = title_screen(screen)

    if game_state == GameState.NEWGAME:
        player = Player()
        game_state = play_level(screen,player)

    if game_state == GameState.NEXT_LEVEL:
        player.current_level += 1
        game_state = play_level(screen,player)

    if game_state == GameState.QUIT:
        pygame.quit()
        return


def title_screen(screen):
start_btn = UIElement(
    center_position=(400,400),font_size=30,bg_rgb=BLUE,text_rgb=WHITE,text="Start",action=GameState.NEWGAME,)
quit_btn = UIElement(
    center_position=(400,500),text="Quit",action=GameState.QUIT,)

buttons = RenderUpdates(start_btn,quit_btn)

return game_loop(screen,buttons)


def play_level(screen,player):
return_btn = UIElement(
    center_position=(140,570),font_size=20,text="Return to main menu",action=GameState.TITLE,)

nextlevel_btn = UIElement(
    center_position=(400,text=f"Next level ({player.current_level + 1})",action=GameState.NEXT_LEVEL,)

buttons = RenderUpdates(return_btn,nextlevel_btn)

return game_loop(screen,buttons)


def game_loop(screen,buttons):
""" Handles game loop until an action is return by a button in the
    buttons sprite renderer.
"""
while True:
    mouse_up = False
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
        if event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            mouse_up = True
    screen.fill(BLUE)

    for button in buttons:
        ui_action = button.update(pygame.mouse.get_pos(),mouse_up)
        if ui_action is not None:
            return ui_action

    buttons.draw(screen)
    pygame.display.flip()


class GameState(Enum):
QUIT = -1
TITLE = 0
NEWGAME = 1
NEXT_LEVEL = 2


if __name__ == "__main__":
main()

谢谢你的建议!!!!

解决方法

我有两个想法:

第一: 只需导入它。当您导入它时,它将被执行。

import importlib
importlib.import("name of you file without extension") # i dont know the command

第二: 使用

exec()

exec(open("filename.py").read())

with open("file.py","r") as f:
    exec(f.read())

ywc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?