每个女孩都喜欢男孩对自己浪漫的表白,不过每个人性格不同,浪漫表白的方式也不尽相同。那么520怎样浪漫的表白好呢?程序员如何俘获心仪女神的心呢?当然是要用程序员的方法了!
在2020年5月20日到来之际,作为一个爱看抖音的纯小白的我也要跟跟风:用Python语言实现无法拒绝的音乐表白代码并用QQ图标方式打开!有想法的小伙伴们快快拿去向心爱的TA表白爱意吧!
目录
Ⅰ Python语言实现概述
Ⅱ 代码详解
python库的导入
显示屏幕大小设置
添加文本信息
设置按钮相关信息
生成随机位置坐标
点击YES后显示的页面
点击NO后显示的页面
main()函数
Ⅲ 基于QQ图标搭载表白代码实现方式
Ⅳ 完整版音乐表白代码
Ⅴ 代码运行效果展示
本文章代码效果实现使用的是Python语言,编译软件用的是PyCharm 2018.1.2 ×64,Python环境选用的是3.7版本的。
用到的Python库有利用SDL(Simple DirectMedia Layer)写就的游戏库——pygame库、海龟绘图体系——turtle库、使用随机数的Python标准库——random库、python中处理时间的标准库——time库。
在Python第三方库安装方面还迷茫的小伙伴可参考我的另一篇博文——三招教你安遍所有Python第三方库。
这里给出链接:https://blog.csdn.net/IT_charge/article/details/105586808
首先,导入我们需要的库pygame库、turtle库、random库、time库
import pygame
import random
from turtle import *
import time
Pygame是一个利用SDL(Simple DirectMedia Layer,用C或C++进行开发的)库的写就的游戏库,是一组用来开发游戏软件的 Python 程序模块。Pygame就是Python中使用它的一个库。Pygame允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,是一个高可移植性的模块可以支持多个操作系统,用它来开发小游戏非常适合。在这里,选用它撩动你心仪的女神实在是再好不过了。
random库是使用随机数的python的标准库,random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。Python中产生随机数使用随机数种子来产生。(只要种子相同,产生的随机序列,无论是每一个数,还是数与数之间的关系都是确定的,所以随机数种子确定了随机序列的产生)。
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。
time库是Python中处理时间的标准库计算机时间的表达。import time提供获取系统时间并格式化输出功能。time.<b>()提供系统级精确计时功能,用于程序性能分析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 属于你的表白日')
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
resolution 参数是一个二元组,表示宽和高。flags 参数是附件选项的集合。depth 参数表示使用的颜色深度。
set_caption(title, icontitle=None) -> None
如果显示窗口拥有一个标题栏,这个函数将修改窗口标题栏的文本。一些操作系统支持最小化窗口时切换标题栏,通过设置 icontitle 参数实现。
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]))
'SysFont(name, size, bold=False, italic=False) -> Font
从系统字体库中加载并返回一个新的字体对象。该字体将会匹配 bold(加粗)和 italic(斜体)参数的要求。如果找不到一个合适的系统字体,该函数将会回退并加载默认的 pygame 字体。尝试搜索的 name 参数可以是一个用逗号隔开的列表。
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)
'rect(Surface, color, Rect, width=0) -> Rect
在 Surface 对象上绘制一个矩形。Rect 参数指定矩形的位置和尺寸。width 参数指定边框的宽度,如果设置为 0 则表示填充该矩形。
当然,你也可以pygame.draw.polygon() — 绘制多边形;pygame.draw.circle() — 根据圆心和半径绘制圆形;pygame.draw.ellipse() — 根据限定矩形绘制一个椭圆形;pygame.draw.lines() — 绘制多条连续的线段;
pygame.draw.aalines() — 绘制多条连续的线段(抗锯齿)
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):
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):
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 = ['颜色1', '颜色2', '颜色3', '颜色4', '颜色5', '颜色6']
for i in range(int(数值 / 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(遍历个数):
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()函数init()初始化
pygame.time.Clock对象帮助我们确定程序要以多少最大的帧速率运行
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之间)
play(loops=0, start=0.0) -> None
该函数用于播放已载入的音乐流。如果音乐已经开始播放,则将会重新开始播放。
loops 参数控制重复播放的次数,例如 play(5) 意味着被载入的音乐将会立即开始播放 1 次并且再重复 5 次,共 6 次。如果 loops = -1,则表示无限重复播放。
start 参数控制音乐从哪里开始播放。开始的位置取决于音乐的格式。MP3 和 OGG 使用时间表示播放位置(以秒为单位)。MOD使用模式顺序编号表示播放位置。如果音乐文件无法设置开始位置,则传递了start参数后会产生一个NotImplementedError 错误。
set_volume(value) -> None
设置音乐的播放音量。
value 参数值范围为 0.0~1.0。当新的音乐文件被载入,音量会被重置。
为了显示出不许碰到效果,这里设置了触碰处在矩形大小长宽各加 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)
flip() -> None
这个函数将更新整个显示界面的内容。如果你的显示模式使用了 pygame.HWSURFACE(硬件加速)和 pygame.DOUBLEBUF(双缓冲)标志,那么将等待垂直会扫并切换显示界面。如果你使用不同类型的显示模式,那么它将简单的更新整个显示界面的内容。
update(rectangle=None) -> None
update(rectangle_list) -> None
这个函数可以看作是 pygame.display.flip() 函数在软件界面显示的优化版。它允许更新屏幕的部分内容,而不必完全更新。如果没有传入任何参数,那么该函数就像 pygame.display.flip() 那样更新整个界面。
time_passed = clock.tick(30)
在每一个循环中加上它,那么给tick方法加上的参数就成为了游戏绘制的最大帧率,这样的话,游戏就不会用掉你所有的CPU资源了
先将写好的py文件保存到桌面
File -> Save As... -> To directory -> C:/Users/用户/Desktop
打开腾讯QQ属性,将目标(T)中的内容Ctrl+C复制
创建 BiaoBai.py 文件的快捷方式
在 BiaoBai.py-快捷方式的属性中选择更改图标并把刚刚复制的腾讯QQ目标(T)中的值粘贴过来
照上述做法后,点击两次确定,出现QQ图标式的.py文件的快捷方式
将 BiaoBai-快捷方式重命名为QQ
至此,你就可以双击QQ图标体验含有音乐的无法拒绝的表白代码啦~
是不是感觉棒棒哒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
def show_like_interface(screen):
def setTurtle():
screensize(1200, 900, 'pink')
pensize(3)
speed(12)
penup()
def getStart(h):
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()
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)
unlike_pos_x = 130
unlike_pos_y = 375
unlike_pos_width = 450
unlike_pos_height = 55
unlike_color = (115, 76, 243)
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))
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))
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()
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()
注:其实是含有音乐的,但这里没法展示,小伙伴们可以在自己电脑上跑一下
相关知识
python浪漫表白,表白代码——绘制3D玫瑰花
七夕最浪漫的表白,最真挚的感情(Python代码实现)
程序员的浪漫!用Python实现表白代码!
表白现场浪漫布置 浪漫表白现场怎么布置【接亲网】
最浪漫的表白方式,最浪漫的表白话语
基于HTML实现浪漫情人节表白代码(附源代码)
情人节表白攻略,教你如何表白
python实现元旦倒计时、圣诞树、跨年烟花的绘画马上双旦了给大家带来一些python代码 1.元旦节日倒计时代码的实现
❀520七夕情人节告白网页代码❀—浪漫梦幻3D相册(樱花主题)HTML+CSS+JavaScript
三行代码情书(1)
网址: 520最浪漫表白:QQ打开基于Python实现的无法拒绝的音乐表白代码!别让等待,成了遗憾! https://m.huajiangbk.com/newsview827847.html
上一篇: 适合表白的歌曲伴奏(适合表白的歌 |
下一篇: 十首超甜表白情歌2022(恋爱必 |