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()
image.png

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()
image.png

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()
image.png

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()
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容