520表白日,男人怎么送礼物,就怎么爱你
每个女孩都喜欢男孩对自己浪漫的表白,不过每个人性格不同,浪漫表白的方式也不尽相同。那么520怎样浪漫的表白好呢?程序员如何俘获心仪女神的心呢?当然是要用程序员的方法了!
在2020年5月20日到来之际,作为一个爱看抖音的纯小白的我也要跟跟风:用Python语言实现无法拒绝的音乐表白代码并用图标方式打开!有想法的小伙伴们快快拿去向心爱的TA表白爱意吧!
目录
Ⅰ Python语言实现概述
本文章代码效果实现使用的是Python语言,编译软件用的是PyCharm 2018.1.2 ×64,Python环境选用的是3.7版本的。
用到的Python库有利用SDL(Simple DirectMedia Layer)写就的游戏库——pygame库、海龟绘图体系——turtle库、使用随机数的Python标准库——random库、python中处理时间的标准库——time库。
Ⅱ 代码详解
python库的导入
首先,导入我们需要的库pygame库、turtle库、random库、time库
import pygame import random from turtle import * import time
显示屏幕大小设置
显示长宽(WIDTH、HEIGHT)大小是依据你选定的背景图片定的
pygame.display.set_mode() 用于初始化一个准备显示的窗口或屏幕
pygame.display.set_caption() — Set the current window caption(设置当前窗口的标题栏)
WIDTH, HEIGHT = 1014, 605 screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.display.set_caption('520 属于你的表白日')
添加文本信息
pygame.font.SysFont()从系统字体库创建一个 Font 对象。
screen.blit()初始化文字坐标,由于后面范围scale是数组形式存储,所以这里采取数组下标方式取数进而确定初始位置坐标
def title(text, screen, scale, color=(0, 0, 0)): font = pygame.font.SysFont('KaiTi', 25) textRender = font.render(text, True, color) # 初始化文字的坐标 screen.blit(textRender, (WIDTH / scale[0], HEIGHT / scale[1]))
设置按钮相关信息
pygame.draw.rect() — 绘制矩形
pygame.font.SysFont()从系统字体库创建一个 Font 对象。
get_rect()是一个处理矩形图像的方法,返回值包含矩形的居中属性
screen.blit() 初始化按钮显示坐标
def button(text, x, y, w, h, color, screen, color_text): pygame.draw.rect(screen, color, (x, y, w, h)) font = pygame.font.SysFont('KaiTi', 25) textRender = font.render(text, True, color_text) textRect = textRender.get_rect() textRect.center = ((x+w/2), (y+h/2)) screen.blit(textRender, textRect)
生成随机位置坐标
get_random_pos()分别在20·520之间生成随机整数且赋值给x,y并返回x,y坐标值
def get_random_pos(): x, y = random.randint(20, 520), random.randint(20, 520) return x, y
在python中的random.randint(a,b)用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b。
点击YES后显示的页面
事实上,我们在这里运用python中的海龟绘图体系绘制出许多小爱心汇成大爱心,在大爱心内写好我们要表白的对象名,并在左下角写出情话,右下角写出日期。
首先,定义了窗口大小、颜色、笔的粗细以及画图的速度等
screensize(1200, 900, '颜色') pensize(3) speed(12) penup()
规定了开始画图时的起始位置,窗口中心为0,0,绘制大小爱心,寄语、日期绘制等。
goto(0, -180) r = h / 5 drawBigL(r, h) drawBigArc(r, 140) drawBigArc(r, 70) drawBigR(r, h) centerRange() drawHope() drawDate()
def drawBigL(r, h): colors = ['颜色1', '颜色2', '颜色3', '颜色4', '颜色5', '颜色6'] for i in range(int(数值 / h) + 1): # 这里的数值要是后边程序定的h的大小的4倍 seth(0) color(colors[i], colors[i + 1]) # 第一个颜色指的是轮廓色,的第二个是内填充色 drawHeart(r) seth(140) fd(h)
绘制这部分区域

def drawBigArc(r, rad): colors = ['颜色1', '颜色2', '颜色3', '颜色4', '颜色5', '颜色6'] for i in range(50): if (i % 10 == 0): #在左上区域和右上区域要各画5颗小爱心 color(colors[int(i / 10)], colors[int(i / 10) + 1]) #第一个颜色轮廓色,二为内填充色 seth(0) drawHeart(r) seth(rad - (i + 1) * 4) # 达到爱心左上角和右上角弧度旋转的效果,使其成为小爱心汇聚成的真正的大爱心 rt(4) # 绘制方向向右旋转4度(个位数字变为0) fd(10.5) # 画笔向绘制方向的当前方向移动10.5距离
绘制这部分区域

def drawBigR(r, h): colors = ['颜色1', '颜色2', '颜色3', '颜色4', '颜色5', '颜色6'] for i in range(int(数值 / h) + 1): # 这里的数值要是后边程序定的h的大小的4倍 color(colors[i], colors[i + 1]) # 颜色1为爱心边缘的轮廓颜色,颜色2为内部填充颜色 seth(0) drawHeart(r) setheading(220) # 设置当前朝向为220角度 fd(h) # 沿着海龟的前方向运行h
def drawHeart(r): down() #落笔 begin_fill() #开始填充 factor = 180 #定义旋转角度 seth(45) #以x轴方向为起点将方向偏转为45度,逆时针为正。只改变行进方向但不行进。 circle(-r, factor) #从当前位置以r为半径圆的180角度旋转 fd(2 * r) #以当前方向,往前行进2r像素 right(90) #在当前行进方向的基础上,向右旋转90度 fd(2 * r) #以当前方向,往前行进2r像素 circle(-r, factor) #从当前位置以r为半径圆的180角度旋转 end_fill() #结束填充 up() #提笔
循环次数设置,使得表白人的名字在大爱心中停留时间与稍后所述的颜色遍历个数一致
def centerRange(): for i in range(遍历个数): drawCenter(i) time.sleep(1) #停留时长与颜色转换数保持一致
在位置坐标(-147,0)位置处写好像谁表白(如:love xxx,可对字体设置)并使用各种颜色渲染这几个文字
def drawCenter(i): goto(大心中的字描绘的起始位置) colors = ['颜色1', '颜色2', '颜色3', '颜色4', '颜色5', '颜色6'] pencolor(colors[i]) write('love XXX', font=('gungsuh', 30,),) up()
点击NO后显示的页面
直接返回程序最开始重新执行
def show_unlike_interface(screen): return main()
main()函数
pygame.init() clock = pygame.time.Clock()
添加背景音乐
这里推荐一个免费下载音乐的网址:http://www.gequdaquan.net/gqss/
pygame.mixer.music.load() —— 载入一个音乐文件用于播放
pygame.mixer.music.play() —— 开始播放音乐流
pygame.mixer.music.set_volume() —— 设置音量
pygame.mixer.music.load('mp3文件路径,注意用符号/而不是\') pygame.mixer.music.play(是否循环播放, 播放开始时间) pygame.mixer.music.set_volume(速度设置,值在0~1之间)
为了显示出不许碰到效果,这里设置了触碰处在矩形大小长宽各加 x 像素大小(自己设定)的位置,就是为了达到还没触碰到矩形就逃跑了的效果(就不让你碰到,嘿嘿,以此来撩动女神)。
且在设计时,设计了最多拒绝次数的上限,根据稍后代码可知,达拒绝峰值后,点击拒绝按钮将重新从main()函数重新执行
if pos[0] < unlike_pos_x + unlike_pos_width + 数值 and pos[0] > unlike_pos_x - 数值 and pos[1] < unlike_pos_y + unlike_pos_height + 数值 and pos[1] > unlike_pos_y - 数值: while True: if num > 拒绝次数峰值-1: break num += 1 unlike_pos_x, unlike_pos_y = get_random_pos() if pos[0] < unlike_pos_x + unlike_pos_width + 数值 and pos[0] > unlike_pos_x - 数值 and pos[1] < unlike_pos_y + unlike_pos_height + 数值 and pos[1] > unlike_pos_y - 数值: continue break
pygame.display.flip() — 更新整个待显示的 Surface 对象到屏幕上
pygame.display.update() — 更新部分软件界面显示
pygame.display.flip() pygame.display.update() clock.tick(60)
Ⅲ 基于图标搭载表白代码实现方式
先将写好的py文件保存到桌面
File -> Save As… -> To directory -> C:/Users/用户/Desktop

打开腾讯属性,将目标(T)中的内容Ctrl+C复制

创建 BiaoBai.py 文件的快捷方式

在 BiaoBai.py-快捷方式的属性中选择更改图标并把刚刚复制的腾讯目标(T)中的值粘贴过来

照上述做法后,点击两次确定,出现图标式的.py文件的快捷方式

将 BiaoBai-快捷方式重命名为

至此,你就可以双击图标体验含有音乐的无法拒绝的表白代码啦~
是不是感觉棒棒哒O(∩_∩)O哈哈~

Ⅳ 完整版音乐表白代码
import pygame import random from turtle import * import time # 设置屏幕大小 WIDTH, HEIGHT = 1014, 605 screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.display.set_caption('520 属于你的表白日') # 添加文本信息 def title(text, screen, scale, color=(0, 0, 0)): font = pygame.font.SysFont('KaiTi', 25) textRender = font.render(text, True, color) screen.blit(textRender, (WIDTH / scale[0], HEIGHT / scale[1])) # 设置按钮信息 def button(text, x, y, w, h, color, screen, color_text): pygame.draw.rect(screen, color, (x, y, w, h)) font = pygame.font.SysFont('KaiTi', 25) textRender = font.render(text, True, color_text) textRect = textRender.get_rect() textRect.center = ((x+w/2), (y+h/2)) screen.blit(textRender, textRect) # 生成随机的位置坐标 def get_random_pos(): x, y = random.randint(20, 620), random.randint(20, 460) return x, y # 点击YES后显示的页面 def show_like_interface(screen): def setTurtle(): screensize(1200, 900, 'pink') pensize(3) speed(12) penup() def getStart(h): # 去到的坐标,窗口中心为0,0 goto(0, -180) r = h / 5 drawBigL(r, h) drawBigArc(r, 140) drawBigArc(r, 70) drawBigR(r, h) centerRange() drawHope() drawName() def drawBigL(r, h): colors = ['red', 'orange', 'yellow', '#87CEEB', 'violet', 'red'] for i in range(int(240 / h) + 1): seth(0) color(colors[i], colors[i + 1]) drawHeart(r) seth(140) fd(h) def drawBigArc(r, rad): colors = ['red', 'orange', 'yellow', 'SkyBlue', 'violet', 'red'] for i in range(50): if (i % 10 == 0): color(colors[int(i / 10)], colors[int(i / 10) + 1]) seth(0) drawHeart(r) seth(rad - (i + 1) * 4) rt(4) fd(10.5) def drawBigR(r, h): colors = ['red', 'orange', 'yellow', 'SkyBlue', 'violet', 'red'] for i in range(int(240 / h) + 1): color(colors[i], colors[i + 1]) seth(0) drawHeart(r) setheading(220) fd(h) def drawHeart(r): down() begin_fill() factor = 180 seth(45) circle(-r, factor) fd(2 * r) right(90) fd(2 * r) circle(-r, factor) end_fill() up() # 在大心中写字 def centerRange(): for i in range(6): drawCenter(i) time.sleep(1) def drawCenter(i): goto(-85, 0) colors = ['red', 'orange', 'yellow', 'SkyBlue', 'violet', 'red'] pencolor(colors[i]) write('love 荣仔', font=('gungsuh', 30,), ) up() # 写情话 def drawHope(): pencolor('black') goto(-310, -170) showturtle() write('情书给你一封', font=('华文行楷', 20,), move=True) goto(-290, -200) write('情话给你一句', font=('华文行楷', 20,), move=True) goto(-260, -230) write('余生给你一人', font=('华文行楷', 20,), move=True) # 写日期 def drawName(): pencolor('black') goto(150, -200) showturtle() write('2020年5月20日 ', font=('华文行楷', 20,), move=True) setTurtle() getStart(80) # 点击窗口关闭 window = Screen() window.exitonclick() # 点击NO按钮后返回程序开头重新执行 def show_unlike_interface(screen): return main() def main(): num = 0 pygame.init() clock = pygame.time.Clock() # 添加背景音乐 pygame.mixer.music.load('F:/music.mp3') pygame.mixer.music.play(-1, 40) pygame.mixer.music.set_volume(0.5) # 设置YES按钮属性 unlike_pos_x = 130 unlike_pos_y = 375 unlike_pos_width = 450 unlike_pos_height = 55 unlike_color = (115, 76, 243) # 设置NO按钮属性 like_pos_x = 130 like_pos_y = 280 like_pos_width = 450 like_pos_height = 55 like_color = (115, 76, 243) running = True while running: # 填充窗口 screen.fill((255, 255, 255)) # 添加背景图 background = pygame.image.load('F:/love520.PNG').convert() screen.blit(background, (0, 0)) # 获取鼠标坐标 pos = pygame.mouse.get_pos() 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: while True: if num > 5: break num += 1 unlike_pos_x, unlike_pos_y = get_random_pos() 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: continue break # 设置撩动女生助你表白成功的话及按钮内容信息等 title('你是不是喜欢我?', screen, scale=[8, 3]) button('YES', like_pos_x, like_pos_y, like_pos_width, like_pos_height, like_color, screen, (255, 255, 255)) # 设置一些套路 # 当拒绝次数小于6时,并未执行小矩形不动的程序,当将要触碰时小矩形还可继续随机跳动 if num < 6: button('NO', unlike_pos_x, unlike_pos_y, unlike_pos_width, unlike_pos_height, unlike_color, screen, (255, 255, 255)) if num > 5: button('看来我只能接收喜欢你的事实咯', unlike_pos_x, unlike_pos_y, unlike_pos_width, unlike_pos_height, unlike_color, screen, (255, 255, 255)) # 设置知道她喜欢你事实的文本 if num == 1: button('一看见你就对我傻笑', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) if num == 2: button('天天来看我的朋友圈', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) if num == 3: button('一抄作业就来找我', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) if num == 4: button('滚滚红尘', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) if num == 5: button('我喜欢你的同时', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) if num == 6: button('正好你也喜欢我', unlike_pos_x, unlike_pos_y - 50, unlike_pos_width, unlike_pos_height, (255, 255, 255), screen, (192, 0, 0)) # 当拒绝次数达到峰值时,跳转到NO指定程序,即回到main()函数重新执行,达到女神不得不答应你的目的 if num > 5: 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: if event.type == pygame.MOUSEBUTTONDOWN: show_unlike_interface(screen) # 当点击窗口关闭按钮时,亦关闭不了,直到承认喜欢你的事实后方可结束程序 for event in pygame.event.get(): if event.type == pygame.QUIT: return main() # 点击YES按钮 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: if event.type == pygame.MOUSEBUTTONDOWN: show_like_interface(screen) pygame.display.flip() pygame.display.update() clock.tick(60) main()
Ⅴ 代码运行效果展示
注:其实是含有音乐的,但这里没法展示,小伙伴们可以在自己电脑上跑一下

呐~~拿去表白必成功!不成功回来打我~~~

浪漫表白,冲冲冲!
感谢阅读
END
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176252.html原文链接:https://javaforall.net
