"""
单击鼠标就会生成一个反弹球,这是用arcade模块制作的反弹球,新建了一个球类。
"""
import arcade
import random
# 屏幕尺寸
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 600
class Ball:
"""
记录球的坐标与向量及大小的球类。
"""
def __init__(self):
self.x = 0
self.y = 0
self.change_x = 0
self.change_y = 0
self.size = 0
def make_ball():
"""
生成一个球的函数.
"""
ball = Ball()
# 球的大小
ball.size = random.randrange(10, 30)
# 球的随机坐标
ball.x = random.randrange(ball.size, SCREEN_WIDTH - ball.size)
ball.y = random.randrange(ball.size, SCREEN_HEIGHT - ball.size)
# 球的移动向量,代表着移动速度和方向
ball.change_x = random.randrange(-2, 3)
ball.change_y = random.randrange(-2, 3)
# 球之颜色
ball.color = (random.randrange(256), random.randrange(256), random.randrange(256))
return ball
class MyGame(arcade.Window):
""" 游戏的主类"""
def __init__(self):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "python街机模块多个反弹球演示_译者:李兴球")
self.ball_list = []
ball = make_ball()
self.ball_list.append(ball)
def on_draw(self):
"""
渲染屏幕
"""
# 先要调用这个命令才重画球
arcade.start_render()
for ball in self.ball_list: # 每个球都是通过画一个圆形表示的
arcade.draw_circle_filled(ball.x, ball.y, ball.size, ball.color)
# 放置球的个数文本
output = "球的数量: {}".format(len(self.ball_list))
arcade.draw_text(output, 10, 20, arcade.color.WHITE, 14)
def update(self, delta_time):
""" 移动所有球 """
for ball in self.ball_list:
ball.x += ball.change_x
ball.y += ball.change_y
if ball.x < ball.size:
ball.change_x *= -1
if ball.y < ball.size:
ball.change_y *= -1
if ball.x > SCREEN_WIDTH - ball.size:
ball.change_x *= -1
if ball.y > SCREEN_HEIGHT - ball.size:
ball.change_y *= -1
def on_mouse_press(self, x, y, button, modifiers):
"""
单击鼠标指针生成一个大小不同颜色不同起始位置不同的球
"""
ball = make_ball()
self.ball_list.append(ball)
def main():
MyGame()
arcade.run()
if __name__ == "__main__":
main()
