• pygame动画实例--吃苹果


    原文出处:https://www.cnblogs.com/msxh/p/5027688.html  

    我稍作修改

    import pygame,os,random
    pygame.init()
    
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    screen = pygame.display.set_mode((800,600))
    pygame.display.set_caption("吃苹果")
    clock = pygame.time.Clock()
    
    class renwu(pygame.sprite.Sprite):#人物精灵
        def __init__(self):
            super().__init__()
            self.master_image = pygame.image.load('farmer walk.png').convert_alpha()  # 导入人物动画完整图像
            self.rect=self.master_image.get_rect()
            self.frame_width=self.rect.width//8  #整个图像分层8行--就是每个画面的宽
            self.frame_height =self.rect.height//8  #整个图像分层8列--就是每个画面的高
            self.image = self.master_image.subsurface((0,2*self.frame_height,self.frame_width,self.frame_height))
            #初始动作向右-2行0列的动作
            #每帧画面
            self.mask=pygame.mask.from_surface(self.image)
            self.x=0   #x轴每次移动量
            self.y = 0  # y轴每次移动量
            self.han = 2  # 记录行
            self.lie = 0  # 记录列
            self.li=0   #列偏移量
    
        def update(self):  # 更新函数
            self.rect.x =self.rect.x+self.x
            self.rect.y = self.rect.y + self.y
            #更新人物坐标
            if self.rect.x<-30 :
                self.rect.x=-30
            if self.rect.x>750:
                self.rect.x = 750
            if self.rect.y<0 :
                self.rect.y=0
            if self.rect.y>530:
                self.rect.y = 530
            #防止人物走出屏幕
            self.lie+=self.li
            if self.lie>7:
                self.lie=0
            self.image = self.master_image.subsurface((self.lie*self.frame_width, self.han * self.frame_height, self.frame_width, self.frame_height))
    
    class pinguo(pygame.sprite.Sprite):  #苹果精灵
        def __init__(self):
            super().__init__()
            self.image = pygame.image.load('food_low.png').convert_alpha()
            self.rect=self.image.get_rect()
            self.mask=pygame.mask.from_surface(self.image)
    p_zu = pygame.sprite.Group()   #苹果组
    r_zu=pygame.sprite.Group()      #人物组
    for i in range(0,50):  #随机坐标产生50个苹果
        p=pinguo()
        p.rect.x=random.randint(20,760)
        p.rect.y = random.randint(80, 560)
        p_zu.add(p)
    r=renwu()  #产生人物精灵
    r_zu.add(r)
    
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:  # 如果按下是向上键
                    r.han=0  #第0行向上
                    r.y=-5
                    r.li=1
                if event.key == pygame.K_LEFT:  # 如果按下是向左键
                    r.han=6   #第6行向左
                    r.x=-5
                    r.li = 1
                if event.key == pygame.K_DOWN:  # 如果按下是向下键
                    r.han=4  #第4行向下
                    r.y=5
                    r.li = 1
                if event.key == pygame.K_RIGHT:  # 如果按下是向右键
                    r.han=2  #第2行向右
                    r.x=5
                    r.li = 1
            elif event.type == pygame.KEYUP:  # 如果有键盘释放
                if event.key == pygame.K_UP:  # 如果释放的是向上键
                    r.y=0
                    r.li = 0
                if event.key == pygame.K_LEFT:  # 如果释放的是向左键
                    r.x=0
                    r.li = 0
                if event.key == pygame.K_DOWN:  # 如果释放的是向下键
                    r.y = 0
                    r.li = 0
                if event.key == pygame.K_RIGHT:  # 如果释放的是向右键
                    r.x = 0
                    r.li = 0
        b = pygame.sprite.spritecollide(r, p_zu, True, pygame.sprite.collide_mask)  # 精灵和组之间精准碰撞检测
        screen.fill((255,255,255))
        r_zu.update()  # 执行人物精灵的更新函数
        p_zu.draw(screen)
        r_zu.draw(screen)
        clock.tick(30)
        pygame.display.update()
    farmer walk.png图片:

    food_low.png图片:

  • 相关阅读:
    Windows Server 2012 64bit RMAN异机不完全恢复(迁移)
    dbms_jobs vs. dbms_scheduler_jobs
    Migrating from dbms_job to dbms_scheduler
    ORA-12537: TNS:connection closed
    win7 ins 30131 oracle 12c
    Vector源码分析
    LinkedList源码分析
    ArrayList源码分析
    jsp 显示日期
    Spring data redis 使用 pipelined 批量操作
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13298873.html
Copyright © 2020-2023  润新知