前提:写不出那么那个的话哇,随便写写,随便看看,重在代码(文章末尾有免费完整源代码)
实验环境:
pygame 1.9.4
pycharm
python3.6
实现思路:
pygame.display实现基本框架,然后screen接收text和button内容,pygame.mouse.get_pos()获取鼠标位置,然后判断鼠标所在位置,改变B选项位置即可(后面button函数在循环中改变,给关闭选项添加事件,然后pygame.mixer.music加载背景音乐,基本就是这些知识点了)
实验帮助:
参考手册:Pygame帮助手册 https://blog.csdn.net/fengf2017/article/details/79300801
实现效果:
实验过程:
1.构建基本框架:
和之前计算器差不多,先添加标题,text,button,什么的,然后控制好背景图片和框架的大小,别留下空白即可
构建基本框架语句
#基本框架 WIDTH, HEIGHT = 640,640 #不全屏 screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.init()
添加标题:
pygame.display.set_caption('2019-2-14情人节快乐')
2.添加背景音乐和text,button,首先应该规定好大小和位置,这点很重要,不然后面完全不知道放在哪里,怎么改变也不知道
由于本人图片是640*640,所以基本规定好了。
添加背景音乐
# 添加背景音乐 pygame.mixer.music.load('love.mp3') pygame.mixer.music.play(-1, 20) pygame.mixer.music.set_volume(0.5)
添加text和button相关信息:
#信息内容 def title(text, screen, scale, color=(0, 0, 0)): font = pygame.font.SysFont('SimHei', 27) textRender = font.render(text, True, color) screen.blit(textRender, (WIDTH / scale[0], HEIGHT / scale[1])) # 按钮 def button(text, x, y, w, h, color, screen): pygame.draw.rect(screen, color, (x, y, w, h)) font = pygame.font.SysFont('SimHei', 20) textRender = font.render(text, True, (255, 255, 255)) textRect = textRender.get_rect() textRect.center = ((x+w/2), (y+h/2)) screen.blit(textRender, textRect)
3.随机改变B选项位置和点击确定后的刷新,和绑定关闭事件
只需要将获取鼠标位置判断一下,然后在循环中随机改变位置,赋值给B选项即可
点击后的刷新:首先添加语句,然后执行如下语句即可
pygame.display.update()
给关闭键绑定事件,实现关闭
# 设置关闭选项属性 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit()
上述关闭语句在点击A选项前后都要写,因为页面刷新,需要能够关闭本软件(良心啊!!!)
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2019/2/14 10:27 4 # @Author : Empirefree 5 # @File : 19-情人节.py 6 # @Software: PyCharm Community Edition 7 8 import pygame 9 import random 10 import sys 11 12 #基本框架 13 WIDTH, HEIGHT = 640,640 14 #不全屏 15 screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) 16 #标题 17 pygame.display.set_caption('2019-2-14情人节快乐') 18 19 20 #信息内容 21 def title(text, screen, scale, color=(0, 0, 0)): 22 font = pygame.font.SysFont('SimHei', 27) 23 textRender = font.render(text, True, color) 24 screen.blit(textRender, (WIDTH / scale[0], HEIGHT / scale[1])) 25 26 # 按钮 27 def button(text, x, y, w, h, color, screen): 28 pygame.draw.rect(screen, color, (x, y, w, h)) 29 font = pygame.font.SysFont('SimHei', 20) 30 textRender = font.render(text, True, (255, 255, 255)) 31 textRect = textRender.get_rect() 32 textRect.center = ((x+w/2), (y+h/2)) 33 screen.blit(textRender, textRect) 34 35 # 生成随机的位置坐标 36 def get_random_pos(): 37 x, y = random.randint(10, 500), random.randint(20, 500) 38 return x, y 39 def heart(text, x, y, w, h, color, screen): 40 pygame.draw.rect(screen, color, (x, y, w, h)) 41 font = pygame.font.SysFont('SimHei', 20) 42 textRender = font.render(text, True, (255, 255, 255)) 43 textRect = textRender.get_rect() 44 textRect.center = ((x + w / 2), (y + h / 2)) 45 screen.blit(textRender, textRect) 46 #点击同意后的按钮 47 def show_like_interface(screen): 48 screen.fill((255, 255, 255)) 49 background1 = pygame.image.load('heart.jpg').convert() 50 screen.blit(background1, (0, 0)) 51 heart('I like you too', 200, 300, 250, 50, (255, 0,0), screen) 52 53 pygame.display.update() 54 while True: 55 for event in pygame.event.get(): 56 if event.type == pygame.QUIT: 57 sys.exit() 58 59 def main(): 60 pygame.init() 61 clock = pygame.time.Clock() 62 # 添加背景音乐 63 pygame.mixer.music.load('love.mp3') 64 pygame.mixer.music.play(-1, 20) 65 pygame.mixer.music.set_volume(0.5) 66 # 设置不同意按钮属性 67 unlike_pos_x = 130 68 unlike_pos_y = 375 69 unlike_pos_width = 450 70 unlike_pos_height = 55 71 unlike_color = (115, 76, 243) 72 # 设置同意按钮属性 73 like_pos_x = 130 74 like_pos_y = 280 75 like_pos_width = 450 76 like_pos_height = 55 77 like_color = (115, 76, 243) 78 79 running = True 80 while running: 81 # 填充窗口 82 screen.fill((255, 255, 255)) 83 # 添加背景图 84 background = pygame.image.load('avatar.jpg').convert() 85 screen.blit(background, (0, 0)) 86 87 # 获取鼠标坐标 88 pos = pygame.mouse.get_pos() 89 # 判断鼠标位置,不同意时,按钮不断变化 90 if pos[0] < unlike_pos_x + unlike_pos_width + 5 and pos[0] > unlike_pos_x - 5 and pos[1] < unlike_pos_y + unlike_pos_height + 5 and pos[1] > unlike_pos_y - 5: 91 while True: 92 unlike_pos_x, unlike_pos_y = get_random_pos() 93 if pos[0] < unlike_pos_x + unlike_pos_width + 5 and pos[0] > unlike_pos_x - 5 and pos[1] < unlike_pos_y + unlike_pos_height + 5 and pos[1] > unlike_pos_y - 5: 94 continue 95 break 96 97 # 设置标题及按钮文本信息 98 title('1.今天情人节,我想向你表白~~~', screen, scale=[8, 3]) 99 button('A.My love is endless', like_pos_x, like_pos_y, like_pos_width, like_pos_height, like_color, screen) 100 button('B.渣男:不主动,不拒绝,不负责!', unlike_pos_x, unlike_pos_y, unlike_pos_width, unlike_pos_height, unlike_color, screen) 101 # 设置关闭选项属性 102 for event in pygame.event.get(): 103 if event.type == pygame.QUIT: 104 sys.exit() 105 # 当鼠标点击同意按钮后,跳转结束页面 106 if pos[0] < like_pos_x + like_pos_width + 5 and pos[0] > like_pos_x - 5 and pos[1] < like_pos_y + like_pos_height + 5 and pos[1] > like_pos_y - 5: 107 if event.type == pygame.MOUSEBUTTONDOWN: 108 show_like_interface(screen) 109 110 pygame.display.flip() 111 pygame.display.update() 112 clock.tick(60) 113 114 if __name__ == '__main__': 115 main()
后话:祝大家情人节快乐,Happy New Year,给大家拜年啦,猪年2019年快乐,2019-2-14胡宇乔Empirefree立。
链接: https://pan.baidu.com/s/1MT17OWOAtRT2-J6Sv_Vg2w 提取码: h15d 复制这段内容后打开百度网盘手机App,操作更方便哦