Python入门 Junior-做个小游戏-做个弹珠小游戏吧(2)

Python入门 Junior-做个小游戏-做个弹珠小游戏吧(2)

首页休闲益智画个轱辘更新时间:2024-06-03

书接上回,用了“化整为零”大法后,结果如下,其中第一招在上回书中已经搞定。

* 先得有个窗口

* 每点击下鼠标就多出来一个小球

* 小球随机移动, 方向和速度都随机

* 小球碰到左右上边框会反弹

* 下面有一个红色的小条,会随着鼠标移动

* 小球碰到红色小条会反弹,没碰到就消失了,死掉了 :(

* 其它.....


上回做完之后,窗口一闪而过,不爽。

在 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