Turtle模块-制作碰撞的小球
效果展示:

代码展示:
import turtle
import random
import time
# 设置屏幕
screen = turtle.Screen()
# 设置窗口标题
screen.title("CHG")
# 设置小球步长
step = 10
# 设置小球反弹的区间范围
tp = 18
# 设置窗口大小
scr_width = 900
scr_height = 650
screen.setup(scr_width, scr_height)
# 设置背景图片
screen.bgpic('E:/p1.png')
# 设置球的颜色
colors = ['red', 'yellow', 'blue', 'black', 'green', 'pink', 'deepskyblue', 'orange', 'white', 'purple']
colors = colors * 2
# 球
balls = []
# 形成小球
# 将小球的形成过程掩藏
turtle.tracer(False)
# 取出小球颜色
for i in colors:
# 初始化一个画笔
temp = turtle.Turtle()
# 将画笔的形状制成球型
temp.shape("circle")
# 设置球的颜色
temp.color(i)
# 将球抬起来
temp.penup()
# 设置小球出发时的初始角度(以绝对坐标设置角度)
temp.setheading((random.randint(0, 360)))
# 将做好的小球放入balls的列表中
balls.append(temp)
# 将所有的球显示出来
turtle.tracer(True)
# 判定小球撞到墙壁的状态
# 注:小球
def move(ball):
# 获取小球当前坐标
s = ball.heading()
# 判断小球是否撞到屏幕
# 小球位于右边屏幕
if ball.xcor() + tp >= scr_width / 2:
if 0 <= s <= 90:
# 设置小球反弹后的角度
ball.setheading(s * 2)
elif 270 <= s <= 360:
# 设置小球反弹后的角度
ball.setheading((360 - s) + 180)
# 小球位于左边屏幕
elif ball.xcor() - tp <= -(scr_width / 2):
if 90 <= s <= 270:
# 设置小球反弹后的角度
ball.setheading(180 - s)
# 小球位于上边屏幕
elif ball.ycor() + tp >= scr_height / 2:
if 0 <= s <= 90:
# 设置小球反弹后的角度
ball.setheading(-s)
elif 90 <= s <= 180:
# 设置小球反弹后的角度
ball.setheading(360 - s)
# 小球位于下边屏幕
elif ball.ycor() - tp <= -(scr_height / 2):
if 180 <= s <= 360:
# 设置小球反弹后的角度
ball.setheading(360 - s)
# 使小球前进一段距离
ball.forward(step)
# 注:显示出来的小球为画笔的笔头
while True:
# 使小球的边界范围与窗口的大小互相适应
scr_height = turtle.window_height()
scr_width = turtle.window_width()
# 隐藏画笔笔迹
turtle.tracer(False)
# 判断所有小球是否碰撞到墙壁,以及前进一段距离
for balling in balls:
move(balling)
# 暂定0.017秒
time.sleep(0.017)
# 显示画笔,即瞬间显示所有画笔
turtle.tracer(True)
专心看人间!
浙公网安备 33010602011771号