一、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()