一、效果展示
二、作品分析与制作
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()函数前面创建一个变量
(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()函数中将开始时间和结束时间变量全局化
