day11总结

一、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总结)