• 中文符号雨python


    参考地址
    字体地址也可以自己找一下资源

    import pygame
    import random
    
    
    def main():
        # 初始化pygame
        pygame.init()
    
        # 默认不全屏
        fullscreen = False
        # 窗口未全屏宽和高
        WIDTH, HEIGHT = 1000, 600
    
        init_width, init_height = WIDTH, HEIGHT
    
        # 字块大小,宽,高
        suface_height = 9
        # 字体大小
        font_size = 10
    
        # 创建一个窗口
        screen = pygame.display.set_mode((init_width, init_height))
    
        # 字体
        font = pygame.font.Font('msyh.ttf', font_size)
    
        # 创建一个图像对象
        bg_suface = pygame.Surface((init_width, init_height), flags=pygame.SRCALPHA)
        pygame.Surface.convert(bg_suface)
        bg_suface.fill(pygame.Color(0, 0, 0, 28))
    
        # 用纯色填充背景
        screen.fill((0, 0, 0))
    
        # 显示的字符
        letter = ['金', '木', '水', '土', '火', '阏逢','旃蒙','柔兆','强圉','著雍','屠维','上章','重光',
                  '玄黓','昭阳','甲','乙','丙','丁','戊','己','庚','辛','壬','癸',
                  '困敦','赤奋若','摄提格','单阏','执徐','大荒落','敦牂','协洽','涒滩','作噩',
                  '阉茂','大渊献','子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']
        texts = [
            font.render(str(letter[i]), True, (0, 255, 0)) for i in range(26)
        ]
    
        # 也可以替换成0 1 显示
        # texts = [
        #     font.render('0',True,(0,255,0)),font.render('1',True,(0,255,0))
        # ]
    
        # 生成的列数
        column = int(init_width / suface_height)
        drops = [0 for i in range(column)]
    
        while True:
            # 按键检测
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    # 接受到退出事件后退出
                    exit()
                elif event.type == pygame.KEYDOWN:
                    # 按F11切换全屏,或窗口
                    if event.key == pygame.K_F11:
                        print("检测到按键F11")
                        fullscreen = not fullscreen
                        if fullscreen:
                            # 全屏效果,参数重设
                            size = init_width, init_height = pygame.display.list_modes()[0]
                            screen = pygame.display.set_mode(size, pygame.FULLSCREEN | pygame.HWSURFACE)
    
                        else:
                            init_width, init_height = WIDTH, HEIGHT
                            screen = pygame.display.set_mode((WIDTH, HEIGHT))
    
                        # 图像对象重新创建
                        bg_suface = pygame.Surface((init_width, init_height), flags=pygame.SRCALPHA)
                        pygame.Surface.convert(bg_suface)
                        bg_suface.fill(pygame.Color(0, 0, 0, 28))
                        column = int(init_width / suface_height)
                        drops = [0 for i in range(column)]
                    elif event.key == pygame.K_ESCAPE:
                        # 按ESC退出
                        exit()
            # 延时
            pygame.time.delay(14)
    
            # 图像对象放到窗口的原点坐标上
            screen.blit(bg_suface, (0, 0))
    
            for i in range(len(drops)):
                # 随机字符
                text = random.choice(texts)
    
                # 把字符画到该列的下雨的位置
                screen.blit(text, (i * suface_height, drops[i] * suface_height))
    
                # 更新下雨的坐标
                drops[i] += 1
    
                # 超过界面高度或随机数,下雨位置置0
                if drops[i] * suface_height > init_height or random.random() > 0.95:
                    drops[i] = 0
    
            # 更新画面
            pygame.display.flip()
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107

    在这里插入图片描述
    好的,下面是代码的工作过程和原理的详细描述:

    1. 首先,代码会初始化pygame库。

    2. 接下来,会设置窗口的大小,默认为非全屏模式。设置字块的尺寸、字体大小,并创建一个窗口对象。

    3. 然后,创建一个图像对象用于作为背景,并用绿色半透明填充背景。

    4. 定义了要显示的字符,通过字体渲染成图像对象,并存储在一个列表中。

    5. 计算窗口的列数,并初始化每一列下落的位置。

    6. 进入主循环,检测按键事件,当接收到退出事件时退出程序。按下F11键切换全屏模式,按下ESC键退出程序。

    7. 在主循环中,添加延时,以控制字符下落的速度。

    8. 将背景图像绘制在窗口上。

    9. 遍历每一列,从字符列表中随机选择一个字符,并将这个字符绘制在对应列的下落位置。

    10. 更新每一列的下落位置,并检查是否超出窗口高度或随机数触发字符重新下落。

    11. 刷新屏幕,更新显示。

    12. 回到主循环,等待下一次循环。

    这样,代码通过不断更新图像,在窗口上创建了一个下雨字符的动画效果。每一列字符下落的速度和位置都是通过随机数控制的,给人一种下雨的感觉。通过按键事件,可以控制窗口的全屏和退出操作。希望可以帮到你!😄

  • 相关阅读:
    《深入理解计算机系统》(2):虚拟内存
    【AIGC】基于深度学习的图像生成与增强技术
    微机原理与接口技术:中断技术 详细笔记与例题
    【第二章 数据的表示和运算】d1
    ImageGear for .NET v26.3
    递推递归与排列组合
    音视频技术在手机上的应用与挑战
    springboot校园失物招领网站系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
    Windows 11可使AMD芯片性能下降15%
    【字符串】分割字符串的最大得分
  • 原文地址:https://blog.csdn.net/weixin_32759777/article/details/133148187