1前言
众所周知,5月20日为“520”情人节,这一天也是即将到来,大家都希望与自己的男神女神过一个浪漫的情人节。但是还有很多像小编这样的单身狗,不知道如何向自己的男神女神表达心意,所以今天小编就教大家用代码的方式给你的那个她(他)表白。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
2准备
这个代码仍然是用简单的python编写的,用到的模块也只有小编以往多次使用pygame,其下载方式依然是用pip安装。只需要在命令行运行以下代码安装即可。
pip install pygame |
3详细步骤
首先导入所需的模块以及初始化pygame
import pygame from pygame import * pygame.init() |
然后设置主窗口以及引入所需要用到的资源文件。
fps = 60 fpsClock = pygame.time.Clock() icon = pygame.image.load('resource/h-2.JPG') love = pygame.image.load('resource/爱心.png') font01 = pygame.font.Font('resource/繁星糖果.ttf',80) font02 = pygame.font.Font('resource/繁星糖果.ttf',50) screen = pygame.display.set_mode((1000,600)) pygame.display.set_caption('八里公路') pygame.display.set_icon(icon) |
注意:这里所有的资源文件都放在与代码文件同目录下的resource文件中。
这时运行的话会一闪而过。所以还需要写一个主循环来控制显示。
running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() fpsClock.tick(fps) pygame.display.update() |
其中的fpsClock,tick()函数为控制程序运行的帧率,也就是一秒运行多少次。作为一个pygame程序主窗口所必备的退出事件,自然是必不可少的,都是固定的用法,看过小编前几期的文章就知道了。
这时候的运行效果为:
图3.1主窗口
这样程序的背景就设置好了,但是一种颜色比较单调,所以可以在主循环处添加几行代码,让背景颜色随着rgb值不停的变化。修改后的代码应为:
running = True r,g,b = 0,0,0 while running: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() screen.fill((r,g,b)) if r >= 255: b += 5 r = 0 if g >= 255: r += 5 g = 0 if b >= 125: b = 0 g += 5 fpsClock.tick(fps) pygame.display.update() |
然后再次运行:
图3.2颜色变化1
图3.3颜色变化2
其中的颜色如何变化可以根据自己或男神女神的喜好来改变。
背景设置好后,就可以在上面布局了。对于每一个文字类型或是图片类型,小编都是用面向对象来编程的,这样的好处是方便处理,同时代码的可读性也比较好。首先编写的是爱心对象,它的属性有坐标,方法有移动、显示。这里先写显示的方法,具体先看代码。
class LoveStar(object): def __init__(self,x,y): self.x = x self.y = y def display(self): screen.blit(love,(self.x,self.y)) |
这只是一个爱心的对象,程序还需要多个爱心对象来组成一个大爱心,因为每一个爱心对象只是初始坐标属性不同,所以在初始化类的时候赋予不同位置参数。然后用一个列表来存储所有的爱心对象。最后再在主循环用for循环的方式调用每个爱心对象的移动和显示方法。
lovestars = [] lovestars.append(LoveStar(475,100)) lovestars.append(LoveStar(425,75)) lovestars.append(LoveStar(375,100)) lovestars.append(LoveStar(525,75)) lovestars.append(LoveStar(575,100)) lovestars.append(LoveStar(350,150)) lovestars.append(LoveStar(600,150)) lovestars.append(LoveStar(370,200)) lovestars.append(LoveStar(580,200)) lovestars.append(LoveStar(400,250)) lovestars.append(LoveStar(550,250)) lovestars.append(LoveStar(435,300)) lovestars.append(LoveStar(515,300)) lovestars.append(LoveStar(475,340)) lovestars.append(LoveStar(100,400)) lovestars.append(LoveStar(100,500)) lovestars.append(LoveStar(900,400)) lovestars.append(LoveStar(900,500)) lovestars.append(LoveStar(100,600)) lovestars.append(LoveStar(100,700)) lovestars.append(LoveStar(900,600)) lovestars.append(LoveStar(900,700)) for lovestar in lovestars: lovestar.display() |
注意这里每一爱心对象的初始坐标是需要通过自己计算的,小编也是先在纸上画了大概的布局位置的。运行效果如下:
图3.4爱心对象
当然也可以根据自己的情况改变布局方式。爱心显示后然后让它们动起来,小编这里是通过循环滚动的方式来展示窗口中的内容,所以要注意爱心出界后,更新它的位置。
def move(self): if self.y < -50: self.y = 600 else: self.y -= 1 |
此时运行结果:
图3.5爱心的运动
有了图像后,还需添加文字,文字的内容看自己。这里要注意的是pygame中小编没有发现多行文字展示,不知道是不是pygame不支持。所以要想文字换行,只能多写几个文字对象。
例如:
class Goddess(object): def __init__(self): self.text01 = '女神' self.text02 = '每' self.text03 = '天' self.text04 = '都' self.text05 = '有' self.text06 = '喜' self.text07 = '欢' self.text08 = '你' self.text09 = '哦' self.text010 = '做我女朋友好吗' self.x01, self.y01 = 425, 150 self.x02, self.y02 = 150, 250 self.x03, self.y03 = 200, 300 self.x04, self.y04 = 250, 350 self.x05, self.y05 = 300, 400 self.x06, self.y06 = 800, 250 self.x07, self.y07 = 750, 300 self.x08, self.y08 = 700, 350 self.x09, self.y09 = 650, 400 self.x010, self.y010 = 325, 600 self.render01 = font01.render(self.text01, True, (128, 0, 0)) self.render02 = font02.render(self.text02, True, (128, 128, 0)) self.render03 = font02.render(self.text03, True, (128, 0, 128)) self.render04 = font02.render(self.text04, True, (0, 128, 128)) self.render05 = font02.render(self.text05, True, (0, 0, 128)) self.render06 = font02.render(self.text06, True, (128, 128, 0)) self.render07 = font02.render(self.text07, True, (128, 0, 128)) self.render08 = font02.render(self.text08, True, (0, 128, 128)) self.render09 = font02.render(self.text09, True, (0, 0, 128)) self.render010 = font02.render(self.text010, True, (128, 128, 0)) def move(self): if self.y01 < -50: self.y01 = 600 else: self.y01 -= 1 if self.y02 < -50: self.y02 = 600 else: self.y02 -= 1 if self.y03 < -50: self.y03 = 600 else: self.y03 -= 1 if self.y04 < -50: self.y04 = 600 else: self.y04 -= 1 if self.y05 < -50: self.y05 = 600 else: self.y05 -= 1 if self.y06 < -50: self.y06 = 600 else: self.y06 -= 1 if self.y07 < -50: self.y07 = 600 else: self.y07 -= 1 if self.y08 < -50: self.y08 = 600 else: self.y08 -= 1 if self.y09 < -50: self.y09 = 600 else: self.y09 -= 1 if self.y010 < -50: self.y010 = 600 else: self.y010 -= 1 def display(self): screen.blit(self.render01, (self.x01, self.y01)) screen.blit(self.render02, (self.x02, self.y02)) screen.blit(self.render03, (self.x03, self.y03)) screen.blit(self.render04, (self.x04, self.y04)) screen.blit(self.render05, (self.x05, self.y05)) screen.blit(self.render06, (self.x06, self.y06)) screen.blit(self.render07, (self.x07, self.y07)) screen.blit(self.render08, (self.x08, self.y08)) screen.blit(self.render09, (self.x09, self.y09)) screen.blit(self.render010, (self.x010, self.y010)) goddess = Goddess() |
如果嫌麻烦,也可以直接写横排文字。同样,文字对象的属性有坐标、内容、render类型,颜色自定。方法也是有移动和显示。然后到这里,程序就写完了。
4最终效果
完整代码如下:
import pygame from pygame import * pygame.init() fps = 60 fpsClock = pygame.time.Clock() icon = pygame.image.load('resource/h-2.JPG') love = pygame.image.load('resource/爱心.png') font01 = pygame.font.Font('resource/繁星糖果.ttf',80) font02 = pygame.font.Font('resource/繁星糖果.ttf',50) screen = pygame.display.set_mode((1000,600)) pygame.display.set_caption('八里公路') pygame.display.set_icon(icon) class LoveStar(object): def __init__(self,x,y): self.x = x self.y = y def move(self): if self.y < -50: self.y = 600 else: self.y -= 1 def display(self): screen.blit(love,(self.x,self.y)) class Goddess(object): def __init__(self): self.text01 = '女神' self.text02 = '每' self.text03 = '天' self.text04 = '都' self.text05 = '有' self.text06 = '喜' self.text07 = '欢' self.text08 = '你' self.text09 = '哦' self.text010 = '做我女朋友好吗' self.x01, self.y01 = 425, 150 self.x02, self.y02 = 150, 250 self.x03, self.y03 = 200, 300 self.x04, self.y04 = 250, 350 self.x05, self.y05 = 300, 400 self.x06, self.y06 = 800, 250 self.x07, self.y07 = 750, 300 self.x08, self.y08 = 700, 350 self.x09, self.y09 = 650, 400 self.x010, self.y010 = 325, 600 self.render01 = font01.render(self.text01, True, (128, 0, 0)) self.render02 = font02.render(self.text02, True, (128, 128, 0)) self.render03 = font02.render(self.text03, True, (128, 0, 128)) self.render04 = font02.render(self.text04, True, (0, 128, 128)) self.render05 = font02.render(self.text05, True, (0, 0, 128)) self.render06 = font02.render(self.text06, True, (128, 128, 0)) self.render07 = font02.render(self.text07, True, (128, 0, 128)) self.render08 = font02.render(self.text08, True, (0, 128, 128)) self.render09 = font02.render(self.text09, True, (0, 0, 128)) self.render010 = font02.render(self.text010, True, (128, 128, 0)) def move(self): if self.y01 < -50: self.y01 = 600 else: self.y01 -= 1 if self.y02 < -50: self.y02 = 600 else: self.y02 -= 1 if self.y03 < -50: self.y03 = 600 else: self.y03 -= 1 if self.y04 < -50: self.y04 = 600 else: self.y04 -= 1 if self.y05 < -50: self.y05 = 600 else: self.y05 -= 1 if self.y06 < -50: self.y06 = 600 else: self.y06 -= 1 if self.y07 < -50: self.y07 = 600 else: self.y07 -= 1 if self.y08 < -50: self.y08 = 600 else: self.y08 -= 1 if self.y09 < -50: self.y09 = 600 else: self.y09 -= 1 if self.y010 < -50: self.y010 = 600 else: self.y010 -= 1 def display(self): screen.blit(self.render01, (self.x01, self.y01)) screen.blit(self.render02, (self.x02, self.y02)) screen.blit(self.render03, (self.x03, self.y03)) screen.blit(self.render04, (self.x04, self.y04)) screen.blit(self.render05, (self.x05, self.y05)) screen.blit(self.render06, (self.x06, self.y06)) screen.blit(self.render07, (self.x07, self.y07)) screen.blit(self.render08, (self.x08, self.y08)) screen.blit(self.render09, (self.x09, self.y09)) screen.blit(self.render010, (self.x010, self.y010)) goddess = Goddess() lovestars = [] lovestars.append(LoveStar(475,100)) lovestars.append(LoveStar(425,75)) lovestars.append(LoveStar(375,100)) lovestars.append(LoveStar(525,75)) lovestars.append(LoveStar(575,100)) lovestars.append(LoveStar(350,150)) lovestars.append(LoveStar(600,150)) lovestars.append(LoveStar(370,200)) lovestars.append(LoveStar(580,200)) lovestars.append(LoveStar(400,250)) lovestars.append(LoveStar(550,250)) lovestars.append(LoveStar(435,300)) lovestars.append(LoveStar(515,300)) lovestars.append(LoveStar(475,340)) lovestars.append(LoveStar(100,400)) lovestars.append(LoveStar(100,500)) lovestars.append(LoveStar(900,400)) lovestars.append(LoveStar(900,500)) lovestars.append(LoveStar(100,600)) lovestars.append(LoveStar(100,700)) lovestars.append(LoveStar(900,600)) lovestars.append(LoveStar(900,700)) running = True r,g,b = 0,0,0 while running: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() screen.fill((r,g,b)) if r >= 255: b += 5 r = 0 if g >= 255: r += 5 g = 0 if b >= 125: b = 0 g += 5 for lovestar in lovestars: lovestar.display() lovestar.move() goddess.display() goddess.move() fpsClock.tick(fps) pygame.display.update() |
最终的运行效果:
图4.1最终效果1
图4.2最终效果2
5总结
不知道大家看了这个表白程序有没有想表白的冲动呢?小编希望大家都能俘获自己女神的芳心。