📜  在 Pygame 中创建开始菜单(1)

📅  最后修改于: 2023-12-03 15:07:46.063000             🧑  作者: Mango

在 Pygame 中创建开始菜单

Pygame是一个Python库,用于创建计算机游戏。在开始游戏时创建一个菜单通常是一个好主意。在此处,我们将探讨如何在Pygame中创建开始菜单。

步骤
步骤 1 - 导入 Pygame 库

在我们开始编写代码之前,我们需要确保已正确安装Pygame并导入它。以下是我们应该包含它的一行代码:

import pygame
步骤 2 - 初始化 Pygame 库

在我们编写任何代码之前,我们需要初始化Pygame库。以下是初始芝士:

pygame.init()
步骤 3 - 定义全局变量

在我们开始使用Pygame绘制菜单之前,我们需要定义一些全局变量,以便我们可以轻松地使用它们。这里有几个我们需要的:

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)

# 屏幕大小
display_width = 800
display_height = 600

# 创建屏幕
gameDisplay = pygame.display.set_mode((display_width,display_height))

# 定义游戏标题
pygame.display.set_caption('开始菜单')
步骤 4 - 编写菜单功能

我们需要定义一个绘制菜单的函数。以下是一个例子:

def game_intro():

    # 菜单是否处于循环状态
    intro = True

    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        # 获得屏幕的长度和宽度
        w = gameDisplay.get_width()
        h = gameDisplay.get_height()

        # 创建屏幕背景
        gameDisplay.fill(white)

        # 屏幕上写字
        largeText = pygame.font.Font('freesansbold.ttf', 115)
        TextSurf, TextRect = text_objects("开始菜单", largeText)
        TextRect.center = ((w / 2), (h / 2))
        gameDisplay.blit(TextSurf, TextRect)

        # 创建两个矩形按钮 (button(文字, x坐标, y坐标, 宽, 高, 颜色, 高亮颜色))
        button("开始", 150, 450, 100, 50, black, bright_green, game_loop)
        button("退出", 550, 450, 100, 50, black, bright_red, quitgame)

        # 更新屏幕
        pygame.display.update()
        clock.tick(15)
步骤 5 - 编写按钮事件处理程序

我们还需要编写按钮点击事件的处理程序。以下是一些样例代码:

# 按钮的样式(高亮颜色和点击颜色)
bright_green = (0,255,0)
bright_red = (255,0,0)

# 创建按钮
def button(msg,x,y,w,h,ic,ac,action=None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    # 如果鼠标在按钮内部则高亮
    if x+w > mouse[0] > x and y+h > mouse[1] > y:
        pygame.draw.rect(gameDisplay, ac,(x,y,w,h))
        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(gameDisplay, ic,(x,y,w,h))

    # 写上按钮上的文字
    smallText = pygame.font.Font("freesansbold.ttf",20)
    textSurf, textRect = text_objects(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    gameDisplay.blit(textSurf, textRect)

# 开始游戏
def game_loop():
    # 退出菜单
    intro = False

    # 游戏循环
    gameExit = False
    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True

        # 添加你的游戏功能在这里

        # 更新屏幕
        pygame.display.update()

    # 退出 Pygame
    pygame.quit()
    quit()

# 退出 Pygame
def quitgame():
    pygame.quit()
    quit()

# 写字
def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

# 设置时钟
clock = pygame.time.Clock()
完整代码

以下是包含所有代码的完整程序,您可以将其复制并粘贴到Pygame脚本中进行测试:

import pygame

white = (255, 255, 255)
black = (0, 0, 0)

display_width = 800
display_height = 600

gameDisplay = pygame.display.set_mode((display_width,display_height))

pygame.display.set_caption('开始菜单')

def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def button(msg,x,y,w,h,ic,ac,action=None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    if x+w > mouse[0] > x and y+h > mouse[1] > y:
        pygame.draw.rect(gameDisplay, ac,(x,y,w,h))
        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(gameDisplay, ic,(x,y,w,h))

    smallText = pygame.font.Font("freesansbold.ttf",20)
    textSurf, textRect = text_objects(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    gameDisplay.blit(textSurf, textRect)

def game_intro():

    intro = True

    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        w = gameDisplay.get_width()
        h = gameDisplay.get_height()
        gameDisplay.fill(white)
        largeText = pygame.font.Font('freesansbold.ttf', 115)
        TextSurf, TextRect = text_objects("开始菜单", largeText)
        TextRect.center = ((w / 2), (h / 2))
        gameDisplay.blit(TextSurf, TextRect)

        button("开始", 150, 450, 100, 50, black, bright_green, game_loop)
        button("退出", 550, 450, 100, 50, black, bright_red, quitgame)

        pygame.display.update()
        clock.tick(15)

def game_loop():

    intro = False

    gameExit = False

    while not gameExit:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True

        gameDisplay.fill(white)

        # 添加游戏功能在这里

        pygame.display.update()

    pygame.quit()
    quit()

def quitgame():
    pygame.quit()
    quit()

bright_green = (0,255,0)
bright_red = (255,0,0)
clock = pygame.time.Clock()

game_intro()
结论

现在,我们已经学习了如何使用Pygame创建开始菜单。为了使您的菜单更加独特,可以尝试实验不同的字体、按钮样式和颜色等。您可以使用此代码作为模板,并根据需要定制它。祝你好运!