pygame实现文字丝滑下落

你只需要创建一个名为danci的文件即可,不用任何的后缀名

#导入模块sys和pygame
import random
import sys
import pygame

class neirong(pygame.sprite.Sprite):

    def __init__(self, screen,wenzi,x,y):
        pygame.sprite.Sprite.__init__(self)
        """初始化按钮的属性"""
        self.screen = screen
        self.screen_rect = screen.get_rect()

        # 设置按钮的尺寸和其他属性
        self.width, self.height = 200, 50
        self.weizhi1 = x
        self.weizhi2 = y
        #颜色
        self.button_color = (0, 255, 0)
        #字体颜色
        self.text_color = ('red') #(255, 255, 255)
        #字体设置
        #self.font = pygame.font.SysFont('MingLiu', 32)
        font = pygame.font.match_font('fangsong')
        self.font = pygame.font.Font(font, 50)
        #pygame.font.SysFont('幼圆', 50)

        # 创建按钮的rect对象,并使其居中
        #按钮创建
        #float(randint(10, 300))

        #对应着上面的那个10,150
        ##self.rect.x = 50
        #self.rect.y = 50
        self.wenzi = wenzi
        #i = 0

        # 按钮的标签只需创建一次
        #这个东西非常重要,它创建的是让这个函数变成全局变量
        #self.prep_msg()


    #def prep_msg(self):

        #self.msg_image_rect.x = 50
        #self.msg_image_rect.x = 100


    def draw_button(self):

        if self.weizhi2 > 600:
            self.kill()



        self.rect = pygame.Rect(self.weizhi1, self.weizhi2, self.width, self.height)
        """将msg渲染为图像,并使其在按钮上居中"""
        self.msg_image = self.font.render(self.wenzi, True, self.text_color)
        # self.button_color)
        self.msg_image_rect = self.msg_image.get_rect()
        self.msg_image_rect.centerx = self.rect.centerx
        self.msg_image_rect.centery = self.rect.centery


        # 绘制一个用颜色填充的按钮,再绘制文本
        #fill是颜色填充
        #self.screen.fill(self.button_color, self.rect)
        #blit是绘画
        self.screen.blit(self.msg_image, self.msg_image_rect)

        return self.weizhi2


def re(file):
    '''该函数(file)
    return 返回的是汉字列表'''
    import re
    #这个是去除掉换行符之后的
    wenzi1 = []
    #这个是只有汉字的
    wenzi2 = []
    with open(file, 'r', encoding='utf-8') as f:
        for ann in f.readlines():
            ann = ann.strip('\n')  # 去除文本中的换行符
            wenzi1.append(ann)
            # ann = re.findall('^ ((?![\u4e00-\u9fa5]).) *', ann)
            ann = re.findall('[^\u4e00-\u9fa5]', ann)
            ann = "".join(ann)
            wenzi2.append(ann)
    return wenzi2
def re1(file):
    '''该函数(file)
    return 返回的是汉字列表'''
    import re
    #这个是去除掉换行符之后的
    wenzi1 = []
    #这个是只有汉字的
    wenzi2 = []
    with open(file, 'r', encoding='utf-8') as f:
        for ann in f.readlines():
            ann = ann.strip('\n')  # 去除文本中的换行符
            #ann = re.findall('[\u4e00-\u9fa5]', ann)
            ann = "".join(ann)
            wenzi1.append(ann)
    return wenzi1


class Scoreboard():
    """显示得分信息的类"""

    def __init__(self,  screen, score):
        """初始化显示得分涉及的属性"""
        self.screen = screen
        self.screen_rect = screen.get_rect()
        #self.ai_settings = ai_settings

        self.score = score
        # 显示得分信息时使用的字体设置
        self.text_color = (30, 30, 30)
        self.font = pygame.font.SysFont(None, 48)
        # 准备初始得分图像---其实就是全局变量的函数
        self.prep_score()

    def prep_score(self):
        """将得分转换为一幅渲染的图像"""
        score_str = str(self.score)
        self.score_image = self.font.render(score_str, True, self.text_color,
                                            "white")
        # 将得分放在屏幕右上角
        self.score_rect = self.score_image.get_rect()
        self.score_rect.right = self.screen_rect.right - 20
        self.score_rect.top = 20


    def show_score(self):
        """在屏幕上显示得分"""
        self.screen.blit(self.score_image, self.score_rect)


def pop_up_box():
    """
    使用tkinter弹出输入框输入数字, 具有确定输入和清除功能, 可在函数内直接调用num(文本框的值)使用
    """

    import tkinter

    def inputint():
        nonlocal num
        try:

            #这个是用来远程接受数据的
            num = var.get().strip()
            #num = int(var.get().strip())

            print("好的,今天我们从第" + str(num) + "开始背诵")
            root.quit()

        except:
            num = 'Not a valid integer.'

    def inputclear():
        nonlocal num
        var.set('')
        num = ''

    num = 0
    root = tkinter.Tk(className='背单词')  # 弹出框框名
    root.geometry('270x60')  # 设置弹出框的大小 w x h

    var = tkinter.StringVar()  # 这即是输入框中的内容
    #var.set('Content of var')  # 通过var.get()/var.set() 来 获取/设置var的值
    entry1 = tkinter.Entry(root, textvariable=var)  # 设置"文本变量"为var
    entry1.pack()  # 将entry"打上去"
    btn1 = tkinter.Button(root, text='昨天背诵', command=inputint)  # 按下此按钮(Input), 触发inputint函数
    btn2 = tkinter.Button(root, text='清除', command=inputclear)  # 按下此按钮(Clear), 触发inputclear函数

    # 按钮定位
    btn2.pack(side='right')
    btn1.pack(side='right')

    # 上述完成之后, 开始真正弹出弹出框
    root.mainloop()
    return num
class play():
    '''使用的时候直接play(。。。。。).run_game()'''
    '''这个里面的所以参数如果自己没有输入值的
    话那么就都是默认的了,默认的界面尺寸就是800,600....
    '''
    '''biao = "默认标题",x = 800,y = 600,beijin = '''

    def __init__(self,biao = "klk",x = 800,y = 600,beijin = "green",ii = 0):
        #界面标题
        self.biao = biao
        #界面尺寸
        self.x = x
        self.y = y
        self.screen_chicun = self.x,self.y
        #界面颜色
        self.beijin = beijin

        #就出现一个单词
        self.ii = ii
        self.iiii = 0

    def run_game(self):
        pygame.init()  # 初始化背景设置
        screen = pygame.display.set_mode((self.screen_chicun))
        pygame.display.set_caption(self.biao)#('blue shy')
        bg_color = self.beijin  # 设置背景色,天青蓝
        #就出现一个单词
        wenzi = re("danci")
        x = random.randint(0, 800)
        y = 50
        i = 0
        ii = self.ii




        clock = pygame.time.Clock()
        score = 0
        iiii = 0
        while True:



            clock.tick(500)
            # 每次循环时都重绘屏幕
            screen.fill(bg_color)



            #就出现一个单词
            weizhi2 = neirong(screen, wenzi[ii], x, y).draw_button()
            i = i + 1
            if i == 4:
                y = y + 5
                i = 0



            #ii,score,iiii = event(ii,score,iiii)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:  # 检测玩家单击游戏窗口关闭按钮
                    print("你今天已经背到了第" + str(ii) + "个单词")
                    print("上面这些就是你不会的单词了,要想办法再背一下")
                    print("你要记得今天你背到了多少页")
                    print(iiii)
                    sys.exit()  # 退出游戏
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RETURN:
                        wenzi1 = re1("danci")
                        print(wenzi1[ii])
                        ii = ii + 1
                        score = score + 1
                        if ii > len(wenzi1) - 1:
                            ii = 0
                        iiii = iiii + 1







            Scoreboard(screen,score).show_score()
            if weizhi2 > 600:
                x = random.randint(0, 800)
                y = 50
                ii = ii + 1
                if ii > len(re("danci")) - 1:
                    ii = 0
                score = score + 1

            # 让最近绘制的屏幕可见
            pygame.display.flip()

if __name__ == "__main__":
    shuru = pop_up_box()
    play(shuru).run_game()


你可能感兴趣的:(python使用pygame,笔记,pygame,python)