当前位置 博文首页 > 网尘的技术专栏:Python 编写个情人节求爱对联

    网尘的技术专栏:Python 编写个情人节求爱对联

    作者:[db:作者] 时间:2021-06-02 16:11

    又快到了一年一度的情人节,单身狗大型虐狗即将来袭,春节和情人节双重打击下,你还敢回家面对七大姑八大姨吗?反正疫情之下,国家都提倡你就地过年,远在异乡的你,不如和我一块守候在工作之地,没事码吗代码,帮助别人,岂不快哉!

    1、pygame的魅力

    初学python,就被某个视频中的老外,带入了pygame中去,简单的几句语法,边可以领略游戏的魅力,不愧是编程届的NO 1,来来来,让我们来试试把。

    当然,环境还是需要的,安装python和pygame包后,在vscode中键入如下代码,
    终端里执行 脚本,你的一个游戏画布就搞定了!

    import sys
    import pygame
    pygame.init()
    size = width, height = 640, 600
    black = (0, 0, 0)
    white = (255, 255, 255)
    red = (255, 0, 0)
    screen = pygame.display.set_mode(size)
    screen.fill(black)
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        pygame.display.update()
    

    2、画个对联

    简单查询下pygame的函数,便可以胜任这份工作了。 这里着重介绍下垂直打印文字的问题。

    pygame 采用screen.blit来绘制文字,我们需要引入字体,可以使用系统自带的字体,比如SimHei。 如果需要竖着输出文字,需要我们自己计算文字的坐标位置,并没有现成的函数。可以借助 Rect对象来实现,其move方法可以移动矩形框到执行的偏移位置。
    核心的函数如下,按照字符串枚举,然后往下移动位置,逐字输出:

    def drawtext(screen, font, text, rect):
       # 为了居中,我们缩小下输出矩形大小(这里按照中心点不变进行缩放)
        rect = rect.inflate(-15, -15)
        for c in text:
            word = font.render(c, True, black)
            screen.blit(word, rect)
            rect = rect.move(0, 50)
    

    3、左右画上对联

    有了垂直输出的函数后,输出对联就很简单了,例如:

    screen = pygame.display.set_mode(size)
    font = pygame.font.SysFont('SimHei', 32)
    rect1 = pygame.Rect(50, 50, 50, 260)
    rect2 = pygame.Rect(500, 50, 50, 260)
    pygame.draw.rect(screen, red, rect1, 0)
    pygame.draw.rect(screen, red, rect2, 0)
    drawtext(screen, font, "天王盖地虎", rect1)
    drawtext(screen, font, "宝塔镇河妖", rect2)
    

    4、画上图片

    图片可以利用pygame.image.load进行加载,然后需要控制下大小,当然如果你图片合适,可以原尺寸输出的。

    # 加载图片
    bg = pygame.image.load("./nvshen.jpg")
    # 控制大小在 320*340
    bg = pygame.transform.scale(bg, (320, 340))
    # 画上图片
    screen.blit(bg, (165, 100))
    

    5、来个求爱效果

    在这里插入图片描述
    附上全部代码,单身狗拿去修改吧,可以自己玩耍了,不谢。

    import sys
    import pygame
    
    
    def drawtext(screen, font, text, rect):
        rect = rect.inflate(-15, -15)
        for c in text:
            word = font.render(c, True, black)
            screen.blit(word, rect)
            rect = rect.move(0, 50)
    
    
    pygame.init()
    size = width, height = 640, 600
    black = (0, 0, 0)
    white = (255, 255, 255)
    red = (255, 0, 0)
    screen = pygame.display.set_mode(size)
    font = pygame.font.SysFont('SimHei', 32)
    rect1 = pygame.Rect(50, 50, 50, 500)
    rect2 = pygame.Rect(500, 50, 50, 500)
    rect3 = pygame.Rect(230, 10, 200, 50)
    rect4 = rect3.inflate(-15, -15)
    bg = pygame.image.load("./nvshen.jpg")
    bg = pygame.transform.scale(bg, (320, 340))
    screen.fill(black)
    screen.blit(bg, (165, 100))
    pygame.draw.rect(screen, red, rect1, 0)
    pygame.draw.rect(screen, red, rect2, 0)
    pygame.draw.rect(screen, red, rect1.move(50, 0), 0)
    pygame.draw.rect(screen, red, rect2.move(50, 0), 0)
    pygame.draw.rect(screen, red, rect3, 0)
    drawtext(screen, font, "每一朵雪花", rect1)
    drawtext(screen, font, "都是你迷人的微笑", rect1.move(50, 0))
    drawtext(screen, font, "每一阵东风", rect2)
    drawtext(screen, font, "都吹不散我对你的思念", rect2.move(50, 0))
    word = font.render("缘来就是你", True, black)
    screen.blit(word, rect4)
    
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        pygame.display.update()
    
    

    6、python就是好玩

    python作为一个能快速上手的脚本,的确比较好玩! 做游戏、web、爬虫都是这么简单方便,加油学,不求闻达于诸侯,但求内心一平静。