当前位置:首页>python>Python实战-时间掌控者

Python实战-时间掌控者

  • 2026-10-21 13:29:25
Python实战-时间掌控者

一、效果展示

二、作品分析与制作

2.1 创建窗口和加载背景

任务1:创建长1000宽600的窗口,设置标题,加载背景图片和开始按钮,设置窗口退出功能(点击窗口退出按钮和按下ESC键,游戏结束)

import pygamepygame.init()# 设置窗口的尺寸screen_size = screen_width, screen_height = 1000, 600screen = pygame.display.set_mode(screen_size)# 设置窗口的标题pygame.display.set_caption("时间掌控者")# 加载背景和按钮图片bg = pygame.image.load(r'imgs/bg.jpg')button = pygame.image.load(r'imgs/button.png')# 将背景和开始按钮加载到画布上screen.blit(bg, (0, 0))screen.blit(button, (350, 330))running = Truewhile running:    # 事件监测    for event in pygame.event.get():        # 如果窗口按下退出按钮,游戏结束        if event.type == pygame.QUIT:            running = False        # 如果按下ESC键,游戏结束        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:            running = False    # 持续刷新画布信息    pygame.display.update()

2.2 显示游戏前言

任务2:点击按钮依次出现如下游戏前言

1)世界上最快而又最慢,最长而又最短,最平凡而又最珍贵,最易被忽视而又最令人后悔的是什么?

2)时间

3)接下来敢不敢接受挑战测试一下你的时间的感知度呢?

4)游戏规则:游戏开始屏幕进行计时显示,当显示到5后,提示消失,根据自己对时间的感知判断,当时间到达20按下按钮,真正的勇士敢于按下这个按钮

(1)创建显示文字的函数

def fill_text(text, position):    # 设置字体    TextFont = pygame.font.Font('fonts/font3.ttf', 40)    # 设置字体其他样式    newText = TextFont.render(text, True, (255, 255, 255))    screen.blit(newText, position)

(2)在show_text()函数前面创建一个变量

click_index = 100

(3)创建show_text()函数,根据鼠标点击的位置和点击的类型显示不同的文字

def show_text(x, y):    global click_index    # 如果点击的是play按钮的范围    if x >= 435 and x <= 565 and y >= 360 and y <= 430:        print(click_index)        if click_index == 100:            fill_text('世界上最快而又最慢,', (200, 150))            fill_text('最长而又最短,', (580, 150))            fill_text('最平凡而又最珍贵,', (350, 200))            fill_text('最易被忽视而又最令人后悔的是什么?', (200, 250))            click_index = 200        elif click_index == 200:            fill_text('时    间', (420, 200))            click_index = 300        elif click_index == 300:            fill_text('接下来敢不敢接受挑战测试一下你的时间的感知度呢?', (40, 200))            click_index = 400        elif click_index == 400:            fill_text('游戏规则:', (35, 100))            fill_text('游戏开始屏幕进行计时显示,当显示到5后,提示消失,', (35, 150))            fill_text('根据自己对时间的感知判断,当时间到达20按下按钮', (35, 200))            fill_text('真正的勇士敢于按下这个按钮', (250, 450))            click_index = 500        elif click_index == 500:  # 显示倒计时            pass        elif click_index == 600:  # 正常游戏            pass

(4)在监控时间的for循环中加入一个if判断,调用相关函数

        # 按下鼠标事件,且按下的是鼠标左键        if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:            # 将背景和开始按钮加载到画布上            screen.blit(bg, (0, 0))            screen.blit(button, (350, 330))            # 获取鼠标点击的x,y坐标            x, y = event.pos            print(x, y)            # 显示文字            show_text(x, y)

2.3 计时5秒

任务3:利用背景图片,完成计时5秒的效果

(1)加载倒计时图片

# 添加倒计时图片n1 = pygame.image.load("imgs/n1.jpg")n2 = pygame.image.load("imgs/n2.jpg")n3 = pygame.image.load("imgs/n3.jpg")n4 = pygame.image.load("imgs/n4.jpg")n5 = pygame.image.load("imgs/n5.jpg")times = [n1, n2, n3, n4, n5]  # 将图片加入列表

(2)导入time模块,声明相关变量

import time# 声明开始时间、结束时间、时间间隔startTime = 0lastTime = 0interval = 20

(3)删除show_text()函数中500情况下的pass,添加相关代码

      elif click_index == 500:  # 显示倒计时            fill_text('游戏开始', (420, 100))            startTime = time.time()            for n in times:                screen.blit(n, (0, 0))                pygame.time.delay(1000)                pygame.display.update()            screen.blit(bg, (0, 0))            screen.blit(button, (350, 330))            fill_text('游戏继续', (420, 100))            pygame.time.delay(1000)            pygame.display.update()            click_index = 600

2.4 游戏结果

任务4:根据感知时间显示如下三个感知等级

1)王者,感知时间为15到25之间

2)钻石,感知时间在10到14之间或者在26到30之间

3)青铜,感知时间不在前两者的范围内

(1)加载感知等级图片

# 添加感知等级图片king = pygame.image.load("imgs/king.png")diamond = pygame.image.load("imgs/diamond.png")bronze = pygame.image.load("imgs/bronze.png")

(2)新建等级评价结果展示函数

def show_result(lastTime):    my_time = int(lastTime - startTime)    if my_time >= interval - 5 and my_time <= interval + 5:        fill_text('你的感知时间为:' + str(my_time), (330, 100))        fill_text('这么接近!是魔鬼吧!', (320, 150))        screen.blit(king, (400, 200))    elif (my_time >= interval - 10 and my_time < interval - 5) or (            my_time > interval + 5 and my_time <= interval + 10):        fill_text('你的感知时间为:' + str(my_time), (330, 100))        fill_text('加油吧少年!', (400, 150))        screen.blit(diamond, (400, 200))    else:        fill_text('你的感知时间为:' + str(my_time), (330, 100))        fill_text('你是来搞笑的吗?', (350, 150))        screen.blit(bronze, (400, 200))

(3)修改在show_text()函数中600的情况

            # 获取感知的时间,根据感知时间给出感知等级            screen.blit(bg, (0, 0))            lastTime = time.time()            show_result(lastTime)

(4)在show_text()函数中将开始时间和结束时间变量全局化

最新文章

随机文章