Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

主要功能实现

本篇文章主要是实现了一个游戏开始界面的两个功能:
1,将鼠标放到”开始游戏“或”结束游戏“字样是 字样由黑色变为红色
1,可以实现点击开始游戏,游戏自动跳转到游戏界面(即,可以运行游戏的第一关了)
2,点击结束游戏,游戏退出。

素材准备

首先准备素材,为了方便起见,我从艺术字网上索取了我个人觉得比较好看的字体(开始游戏和结束游戏,背景是白色,算了我懒得扣成透明背景。Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
各图片的命名参考如上图,对应代码而已。

代码参考

import pygame
pygame.init()
ck = pygame.display.set_mode((800,600))   #  游戏窗口
pygame.display.set_caption("拳皇双截龙")    #  给窗口取个名 我小时候喜欢双截龙和拳皇
clock = pygame.time.Clock()                         #  游戏刷新速度(我个人这么理解)
start_ck = pygame.Surface(ck.get_size())    #   充当开始界面的画布
start_ck2 = pygame.Surface(ck.get_size())  #  充当第一关的画布界面暂时占位(可以理解为游戏开始了)
start_ck = start_ck.convert()
start_ck2 = start_ck2.convert()
start_ck.fill((255,255,255))  # 白色画布1(开始界面用的)
start_ck2.fill((0,255,0))
# 加载各个素材图片 并且赋予变量名
i1 = pygame.image.load("./images/s1.png")
i1.convert()
i11 = pygame.image.load("./images/s2.png")
i11.convert()

i2 = pygame.image.load("./images/n2.png")
i2.convert()
i21 = pygame.image.load("./images/n1.png")
i21.convert()

i3 = pygame.image.load('./images/m2.png')
i3.convert()
i31 = pygame.image.load('./images/m1.png')
i31.convert()

bg = pygame.image.load('./images/bj.jpg')
bg.convert()







#  以下为选择开始界面鼠标检测结构。
n1 = True
while n1:
    clock.tick(30)
    buttons = pygame.mouse.get_pressed()
    x1, y1 = pygame.mouse.get_pos()
    if x1 >= 227 and x1 <= 555 and y1 >= 261 and y1 <=327:
        start_ck.blit(i11, (200, 240))
        if buttons[0]:
            n1 = False

    elif x1 >= 227 and x1 <= 555 and y1 >= 381 and y1 <=447:
        start_ck.blit(i21, (200, 360))
        if buttons[0]:
            pygame.quit()
            exit()

    elif x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
        start_ck.blit(i31, (200, 480))
    else:
        start_ck.blit(i1, (200, 240))
        start_ck.blit(i2, (200, 360))
        start_ck.blit(i3, (200, 480))


    ck.blit(start_ck,(0,0))
    pygame.display.update()


    # 下面是监听退出动作

    # 监听事件
    for event in pygame.event.get():

        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")

            # quit 卸载所有的模块
            pygame.quit()

            # exit() 直接终止当前正在执行的程序
            exit()


ck.blit(start_ck2,(0,0))
pygame.display.update()

#  以下可以写第一关的代码了
n2 = True
while n2:
    clock.tick(30)
    ck.blit(start_ck2, (0, 0))
    start_ck2.blit(bg,(0,0))
    pygame.display.update()
    for event in pygame.event.get():

        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")

            # quit 卸载所有的模块
            pygame.quit()

            # exit() 直接终止当前正在执行的程序
            exit()



运行效果

Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
下面的这个散打运动员图片就是游戏开始了。

分析

之前做过一个类似的,不过点击开始游戏之后画面倒是能跳转,但是鼠标放到其他区域依然会显示字体,所以就自己琢磨了这样一个模式,用两套while 循环,每套循环里都配置上监听事件,由于代码是从上至下运行,所以只要第一个while Ture 循环没有关闭,第二个 循环就不会执行,第一个循环结束之前讲画布2 (也就是start_ck2,画到窗口上)这样我的困难也就解决了。(我毕竟不是程序员,我是做生物技术的,以上代码在格式上和命名规范上可能会存在小小不合规,但不影响测试结果,希望大家批评指正。)