知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技  > 软件

无法拒绝表白代码编程教学

发表时间:2022-03-25来源:网络

520表白日,男人怎么送礼物,就怎么爱你

每个女孩都喜欢男孩对自己浪漫的表白,不过每个人性格不同,浪漫表白的方式也不尽相同。那么520怎样浪漫的表白好呢?程序员如何俘获心仪女神的心呢?当然是要用程序员的方法了!

2020年5月20日到来之际,作为一个爱看抖音的纯小白的我也要跟跟风:用Python语言实现无法拒绝的音乐表白代码并用QQ图标方式打开!有想法的小伙伴们快快拿去向心爱的TA表白爱意吧!

目录

Ⅰ Python语言实现概述

Ⅱ 代码详解

python库的导入

显示屏幕大小设置

添加文本信息

设置按钮相关信息

生成随机位置坐标

点击YES后显示的页面

点击NO后显示的页面

main()函数

Ⅲ 基于QQ图标搭载表白代码实现方式

Ⅳ 完整版音乐表白代码

Ⅴ 代码运行效果展示

Ⅰ Python语言实现概述

本文章代码效果实现使用的是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

Ⅱ 代码详解

python库的导入

首先,导入我们需要的库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.()提供系统级精确计时功能,用于程序性能分析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 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资源了

Ⅲ 基于QQ图标搭载表白代码实现方式

先将写好的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 # 点击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

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜