美文网首页
day11总结

day11总结

作者: liuperson | 来源:发表于2018-07-30 20:05 被阅读0次

    一、pygame事件

     pygame.init()
        screen=pygame.display.set_mode((600,400))
        screen.fill((255,255,255))
    
    设置游戏标题
    pygame.display.set_caption('游戏事件')
    pygame.display.flip()
    
      while True:
            每次循环检测有没有事件发生
            for event in pygame.event.get():
                不同类型的事件对应的type值是不同
                if event.type==pygame.QUIT:
                    exit()
    
       鼠标按下相关
       pos属性,获取鼠标事件产生的位置
                if event.type==pygame.MOUSEBUTTONDOWN:
                    print('鼠标按下',event.pos)
                if event.type==pygame.MOUSEBUTTONUP:
                    print('鼠标弹起',event.pos)
                if event.type==pygame.MOUSEMOTION:
                    print('鼠标移动',event.pos)
    
              #键盘相关事件
                #key属性:被按的按键对应的值的Asscall码
                if event.type==pygame.KEYDOWN:
                    print('键盘按下',chr(event.key))
                if event.type==pygame.KEYUP:
                    print('键盘弹起',chr(event.key))
    

    鼠标事件的运用

    
    import pygame
    from random import randint
    def rand_color():
        """
        #产生随机颜色
    
        :return:
        """
        return (randint(0,255),randint(0,255),randint(0,255))
    
    def draw_ball(screen,pos):
        pygame.draw.circle(screen, rand_color(), event.pos, randint(10, 20))
    
        # 只要屏幕上的内容有更新,都需要调用下面两个方法中的一个
        # pygame.display.flip()
        pygame.display.update()
    
    # 写一个函数,判断指定的点是否在指定的矩形范围内
    def is_in_rect(point,rect):
        x,y=point
        rx,ry,rw,rh = rect
        if (rx<=x<=rx+rw) and (ry<=y<=ry+rh):
            return True
        return False
    
    # 写函数,画按钮
    def draw_buttom(screen,bth_color,title_color):
        """矩形框"""
        pygame.draw.rect(screen, bth_color, (100, 100, 100, 60))
        """文字"""
        font = pygame.font.SysFont('Times', 30)
        title = font.render('clicke', True, title_color)
        screen.blit(title, (120, 120))
    
    
    
    
    # 按钮坐标
    if __name__ == '__main__':
        pygame.init()
        screen=pygame.display.set_mode((600,400))
        screen.fill((255,255,255))
        pygame.display.set_caption('鼠标事件')
    
        #画个按钮
        draw_buttom(screen,(0,255,0),(255,0,0))
        # """矩形框"""
        # pygame.draw.rect(screen,(0,255,0),(100,100,100,60))
        # """文字"""
        # font=pygame.font.SysFont('Times',30)
        # title=font.render('clicke',True,(255,0,0))
        # screen.blit(title,(120,120))
    
    
    
        pygame.display.flip()
        while True:
            for event in pygame.event.get():
                #退出
                if event.type==pygame.QUIT:
                    exit()
    
                if event.type==pygame.MOUSEBUTTONDOWN:
                    #
                    #
                    if is_in_rect(event.pos,(100,100,100,60)):
                        draw_buttom(screen,(0,100,0),(100,0,0))
                        pygame.display.update()
                if event.type==pygame.MOUSEBUTTONUP:
    
                    if is_in_rect(event.pos,(100,100,100,60)):
                        draw_buttom(screen,(0,255,0),(255,0,0))
                        pygame.display.update()
                if event.type==pygame.MOUSEMOTION:
                    screen.fill((255,255,255))
                    draw_buttom(screen,(0,255,0),(255,0,0))
                    draw_ball(screen,event.pos)
    

    三、要求:屏幕上显示图片,鼠标按下就动,松开就停

    import pygame
    
    # 写函数,判断点是否在范围内
    def is_in_rect(pos,rect):
        x,y=pos
        rx,ry,rw,rh=rect
        if (rx<=x<=rx+rw) and (ry<=y<=ry+rh):
            return True
        return False
    
    pygame.init()
    screen = pygame.display.set_mode((600, 400))
    screen.fill((255, 255, 255))
    pygame.display.set_caption('鼠标拖动事件')
    
    
    image = pygame.image.load('./lufei.jpg')
    image_x=100
    image_y=100
    screen.blit(image, (image_x,image_y ))
    pygame.display.flip()
    
    #用来存储图片是否可以移动
    is_move=False
    
    while True:
        for event in pygame.event.get():
            #退出
            if event.type==pygame.QUIT:
                exit()
    
            # 鼠标按下,状态可以移动
            if event.type==pygame.MOUSEBUTTONDOWN:
                w,h=image.get_size()
                if is_in_rect(event.pos,(image_x,image_y,w,h)):
                    is_move=True
            # 鼠标弹起,让状态变为不可动
            if event.type==pygame.MOUSEBUTTONUP:
                is_move=False
    
                #鼠标移动事件
                if event.type==pygame.MOUSEMOTION:
                    screen.fill((255,255,255))
                    x ,y = event.pos
                    image_w,image_h=image.get_size()
                    # 保证鼠标在图片中心
                    image_x=x-image_h/2
                    image_y=y-image_w/2
                    screen.blit(image,(image_x,image_y))
                    pygame.display.update()
    

    四、画球

    import pygame
    
    def draw_ball(place,color,pos):
        """
        画球
        :param place:
        :return:
        """
        pygame.draw.circle(place,color,pos,20)
    
    Up=273
    Down=274
    Left=276
    Right=275
    
    
    if __name__ == '__main__':
        pygame.init()
        screen=pygame.display.set_mode((600,400))
        screen.fill((255,255,255))
        pygame.display.flip()
    
        # 保存初始坐标
        ball_x=100
        ball_y=100
        x_speed=1
        y_speed=0
    
        while True:
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                    exit()
    
                if event.type==pygame.KEYDOWN:
                    if event.key==Up:
                        x_speed=0
                        y_speed=-1
                    elif event.key==Down:
                        x_speed=0
                        y_speed=1
                    elif event.key==Right:
                        x_speed = 1
                        y_speed = 0
                    elif event.key==Left:
                        x_speed = -1
                        y_speed = 0
    
            # 刷新屏幕
            screen.fill((255,255,255))
            ball_x+=x_speed
            ball_y+=y_speed
            if ball_x+20>=600 or ball_x<=20 or ball_y+20>=400 or ball_y<=20:
                print('游戏结束')
                break
                # ball_x=600-20
                # x_speed -= 1
            #
            # if ball_x==20:
            #     x_speed+=1
            draw_ball(screen,(255,0,0),(ball_x,ball_y))
            pygame.display.update()
    

    五、多球一起动

    
    import pygame
    import random
    random_color=random.randint(0,255),random.randint(0,255),random.randint(0,255)
    
    if __name__ == '__main__':
        pygame.init()
        screen=pygame.display.set_mode((600,400))
        pygame.display.flip()
    
        # all_balls中保存多个球,每个球要保存半径、位置、圆心坐标、颜色等信息
        all_balls=[
            {
                    'r': random.randint(10,20),
                    'pos':(100,100),
                    'color':random_color,
                    'x_speed':random.randint(-1,1),
                    'y_speed':random.randint(-1,1)
            } ,
            {
                'r': random.randint(10, 20),
                'pos': (300, 300),
                'color': random_color,
                'x_speed': random.randint(-1, 1),
                'y_speed': random.randint(-1, 1)
            }
        ]
        while True:
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                    exit()
                # 点击画一个
                if event.type==pygame.MOUSEBUTTONDOWN:
                    ball={
                        'r': random.randint(10, 20),
                        'pos': event.pos,
                        'color': random_color,
                        'x_speed': random.randint(-1, 1),
                        'y_speed': random.randint(-1, 1)
                    }
    
                  #保存球
                    all_balls.append(ball)
            #刷新界面
            pygame.time.delay(10)
            screen.fill((255,255,255))
            for ball_dict in all_balls:
                #取出球原来的x坐标和y坐标,以及他们的速度
                x,y=ball_dict['pos']
                x_speed=ball_dict['x_speed']
                y_speed = ball_dict['y_speed']
                x+=x_speed
                y+=y_speed
                pygame.draw.circle(screen,ball_dict['color'],(x,y),ball_dict['r'])
                #更新球对应的新的坐标
                ball_dict['pos']=x,y
            pygame.display.update()
    

    相关文章

      网友评论

          本文标题:day11总结

          本文链接:https://www.haomeiwen.com/subject/mohqvftx.html