pygame应用(鼠标事件和键盘事件)

鼠标事件的应用:

import pygame


#写一个函数判断一个点是否在指定范围内
def is_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


if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600,600))
    screen.fill((255,255,255))
    pygame.display.set_caption('图片拖拽')

    #显示一张图片
    image = pygame.image.load('./luo.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_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:
                if is_move:
                    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()
pygame应用(鼠标事件和键盘事件)_第1张图片
image.png

pygame应用(鼠标事件和键盘事件)_第2张图片
image.png

动画效果

import pygame
from random import randint

def static_page(screen):
    # 页面上显示静态内容
    # 静态文字
    font = pygame.font.SysFont('Time',40)
    title = font.render('welcome my word',True,(0,0,0))
    screen.blit(title,(200,200))

def animation_title(screen):
    # 字体颜色变化
    font = pygame.font.SysFont('Time', 40)
    title = font.render('happy birthday', True, (randint(0,255), randint(0,255), randint(0,255)))
    screen.blit(title, (100, 100))

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600,600))
    screen.fill((255,255,255))

    static_page(screen)

    pygame.display.flip()

    while True:
        # for里面的代码只有事件发生后才会执行
        for event in pygame.event.get():
            if event.type ==pygame.QUIT:
                exit()

        # 在下面写每一针要显示的内容
        """
        程序执行到这个位置,CPU休息一会再执行,就是阻塞一段时间
        单位:毫秒 (1000ms == 1s)
        """
        pygame.time.delay(150)
        screen.fill((255,255,255))
        static_page(screen)
        animation_title(screen)

        # 内容占上市到完成后,更新到屏幕上
        pygame.display.update()
pygame应用(鼠标事件和键盘事件)_第3张图片
image.png

pygame应用(鼠标事件和键盘事件)_第4张图片
image.png

通过键盘控制产生随机颜色的的球, 再通过键盘的的上下左右控制球的运动轨迹

import pygame

def draw_ball(place,color,pos):
    """画球"""
    pygame.draw.circle(place,color,pos,20)

# 方向键对应的值
up = 273
Dowm = 274
Left = 276
Right = 275

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600,600))
    screen.fill((255,255,255))


    pygame.display.flip()

    # 保存初始坐标
    ball_x =100
    ball_y =100
    x_spead = 2
    y_spead = 0

    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                exit()

            if event.type == pygame.KEYDOWN:
                if event.key == up:
                    y_spead = -1
                    x_spead = 0
                elif event.key == Dowm:
                    y_spead = 1
                    x_spead = 0
                elif event.key == Right:
                    y_spead = 0
                    x_spead = 1
                elif event.key == Left:
                    y_spead = 0
                    x_spead = -1


#刷新屏幕
        screen.fill((255,255,255))
        ball_x += x_spead
        ball_y += y_spead
        if ball_x +20 >= 600:
            ball_x = 600-20
            x_spead *= -1
        if ball_x +20 <= 0:
            ball_x = 0
            x_spead *= -1
        if ball_y +20 >= 600:
            ball_y = 600-20
            y_spead *= -1
        if ball_y +20 <= 0:
            ball_y = 0
            y_spead *= -1
        draw_ball(screen,(255,0,0),(ball_x,ball_y))
        pygame.display.update()
pygame应用(鼠标事件和键盘事件)_第5张图片
image.png

pygame应用(鼠标事件和键盘事件)_第6张图片
image.png

鼠标点击产生多个会动的小球(这个是来搞笑的大家看前面的就可以了,忽略这个)不过很好玩,你会看到小时的小球他们想家了自己就会回来了,555555,你们来帮我看看他们怎么才能不离家出走吧!

import  pygame
import random

# def draw_ball(place,color,pos):
#     """画球"""
#     pygame.draw.circle(place,color,pos,20)

def random_color ():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
ball_x = 100
ball_y = 100
x_spead = 2
y_spead = 0

ball_x += x_spead
ball_y += y_spead

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600,400))
    screen.fill((255,255,255))
    pygame.display.flip()



    # all_balls中保存多个球
    # 每一个球都要保存:半径、圆心、颜色、x速速\y速度
    all_balls = [
        {'r':random.randint(10,20),
         'pos':(100,100),
         'color': random_color(),
         'x_apeed':random.randint(-3,3),
         'y_apeed': random.randint(-3, 3)
         },
        {'r': random.randint(10, 20),
         'pos': (300, 300),
         'color': random_color(),
         'x_apeed': random.randint(-3, 3),
         'y_apeed': random.randint(-3, 3)
         }
]


    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

            if event.type == pygame.MOUSEBUTTONDOWN:
                #点一下鼠标创建一个球
                ball = {
                    'r':random.randint(10,25),
                     'pos':event.pos,
                    'color': random_color(),
                    'x_apeed':random.randint(-3,3),
                    'y_apeed': random.randint(-3, 3)
                }
            # 保存球
                all_balls.append(ball)

        # 刷新界面
        screen.fill((255,255,255))

        # ball_x += x_spead
        # ball_y += y_spead

        for ball_dict in all_balls:
            #取出球原来的原来的坐标和速度
            x,y=ball_dict['pos']
            x_speed = ball_dict['x_apeed']
            y_speed = ball_dict['y_apeed']
            x += x_speed
            y += y_speed
            if ball_x + 20 >= 600:
                ball_x = 600 - 20
                x_spead *= -1
            if ball_x + 20 <= 0:
                ball_x = 0
                x_spead *= -1
            if ball_y + 20 >= 400:
                ball_y = 400 - 20
                y_spead *= -1
            if ball_y + 20 <= 0:
                ball_y = 0
                y_spead *= -1




            pygame.draw.circle(screen,ball_dict['color'],(x,y),ball_dict['r'])
            #更新球的对应坐标
            ball_dict['pos'] = x,y



        pygame.display.update()
pygame应用(鼠标事件和键盘事件)_第7张图片
image.png

你可能感兴趣的:(pygame应用(鼠标事件和键盘事件))