书接上回,用了“化整为零”大法后,结果如下,其中第一招在上回书中已经搞定。
* 先得有个窗口
* 每点击下鼠标就多出来一个小球
* 小球随机移动, 方向和速度都随机
* 小球碰到左右上边框会反弹
* 下面有一个红色的小条,会随着鼠标移动
* 小球碰到红色小条会反弹,没碰到就消失了,死掉了 :(
* 其它.....
上回做完之后,窗口一闪而过,不爽。
在 main_game() 最后,添加以下代码
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
解释一下:
* while 是个循环,而且条件是TRUE,也就是说,不强制的话,不会退出
* for 后面的event,叫做事件。所谓事件,可以理解成任何一个操作,比如鼠标移动、点击等等
* 事件分很多类型,在pygame中,用event.type得到事件类型,比如上面的代码中 event.type == pygame.QUIT 表示:如果事件是个退出事件,那就强制退出while循环,也就是退出了这个弹珠游戏。
现在运行一下,窗口不会闪退了,是下面这个样子。
这次需要解决的问题是: 每点击下鼠标就多出来一个小球 。
先想一下,这是一大招,得用“化整为零”大法分解成几个小招,然后再见招拆招。
* 在指定位置画一个球,球的大小和颜色也需要指定
* 得到鼠标的位置,在这个位置上画球
先说一下,所谓位置,就是一个坐标: (x, y)。
对于pygame这个模块,坐标系的原点在窗口的左上角。
怎么在指定位置画球呢?简单处理,在指定画一个圆。
因为要创建多个球,也就是说,要多次画球,所以把画球这个功能做成一个函数,如下:
def creat_ball(window, pos):
这个函数需要传入两个参数:
window: 表示我们创建的窗口,也就是画球的地方
pos: 表示画球的位置,(x,y)
在这个函数中画圆,还需要定义圆的颜色(用白色先)和大小,所以定义两个变量
White = (255, 255, 255)
Ball_radius = 20
代码如下:
def creat_ball(window, pos):
# 画球
pygame.draw.circle(window, White, pos, Ball_radius, Ball_radius)
pygame.display.update() # 第一次flip后面用update
画球的功能有了,得试一下。
怎么试呢?还记得 main_game 吗?这就程序的入口,必须得放在这里面。如下:
def main_game():
# 初始化游戏
pygame.init()
# 定义窗体,指定大小
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGH))
# 指定窗体的标题
pygame.display.set_caption("PingPang")
# 指定窗体底色
window.fill(Black)
# 显示窗体
pygame.display.flip()
creat_ball(window, (100, 100))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
调用create_ball函数时,指定了(100,100)做球的中心点的位置。
跑一下试试,如下图:
球的位置和颜色都正确,说明这个函数没问题!
该解决下一个问题了--得到鼠标的位置,在这个位置上画球。
还记得pygame这个轮子吧?还记得事件吧?做为一个轮子,肯定能解决鼠标位置这个事件。
没错,这个事件类型如下:
event.type == pygame.MOUSEBUTTONDOWN
这个事件的意思是按下鼠标按键,然后从这个事件中取出按下按键时鼠标的位置,如下:
event.pos
好了,可以组装代码了。
在 main_game 的 while 循环中,增加对这个事件的捕获,并调用 creat_ball。
完整代码如下:
import pygame
WINDOW_WIDTH = 600 #屏幕宽度
WINDOW_HIGH = 400 #屏幕高度
Black = (0, 0, 0)
White = (255, 255, 255)
Ball_radius = 20
def creat_ball(window, pos):
# 画球
pygame.draw.circle(window, White, pos, Ball_radius, Ball_radius)
pygame.display.update() # 第一次flip后面用update
def main_game():
# 初始化游戏
pygame.init()
# 定义窗体,指定大小
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGH))
# 指定窗体的标题
pygame.display.set_caption("PingPang")
# 指定窗体底色
window.fill(Black)
# 显示窗体
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
creat_ball(window, event.pos)
if __name__ == '__main__':
main_game()
RUN一下,在不同位置多点几下鼠标,结果如下:
最后总结一下:
* 又用到函数
* 并通过事件传入了参数
* 画了个球 :-)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved