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号