猫史档案馆


【Python作品分享】疯狂的小圆圈

用户:童晶童晶查看:0 回复:0 评论:0 创建时间:2020-06-27T10:10:03


【作品展示】

center_image

 

【作品介绍】

《Python游戏趣味编程》 第4章 疯狂的小圆圈

本章我们将实现一个好玩的程序,鼠标点击后,会在点击处出现一些同心圆圈,并在窗口中四处反弹,效果如图4-1所示。首先我们学习列表的概念,用列表记录实现多个小球的反弹;然后学习一种新的鼠标交互方式,用鼠标移动点击来增加绘制同心圆。

本章案例最终代码一共38行,代码参看:配套资源\第4章\4-5.py,视频效果参看:配套资源\第4章\疯狂的小圆圈.mp4。

 

【作品源代码】

import pgzrun  # 导入游戏库
import random  # 导入随机库
WIDTH = 800   # 设置窗口的宽度
HEIGHT = 600  # 设置窗口的高度
balls = []  # 存储所有小球的信息,初始为空列表

def draw():   # 绘制模块,每帧重复执行
    screen.fill('white')  # 白色背景
    for ball in balls:  # 绘制所有的圆
        screen.draw.filled_circle((ball[0], ball[1]), ball[4], (ball[5], ball[6], ball[7]))
        for x in range(1, ball[4], 3): # 用同心圆填充
            screen.draw.filled_circle((ball[0], ball[1]), ball[4]-x, (random.randint(
                ball[5], 255), random.randint(ball[6], 255), random.randint(ball[7], 255)))

def update():  # 更新模块,每帧重复操作
    for ball in balls:
        ball[0] = ball[0] + ball[2]   # 利用x方向速度更新x坐标
        ball[1] = ball[1] + ball[3]   # 利用y方向速度更新y坐标
        if ball[0] > WIDTH-ball[4] or ball[0] < ball[4]:  # 当小球碰到左右边界时,x方向速度反转
            ball[2] = -ball[2]
        if ball[1] > HEIGHT-ball[4] or ball[1] < ball[4]:  # 当小球碰到上下边界时,y方向速度反转
            ball[3] = -ball[3]

def on_mouse_move(pos, rel, buttons): # 当鼠标移动时
    if mouse.LEFT in buttons:         # 当鼠标左键按下时
        x = pos[0]   # 鼠标的x坐标,设为小球的x坐标
        y = pos[1]   # 鼠标的y坐标,设为小球的y坐标
        speed_x = random.randint(1, 5)  # 小球x方向的速度
        speed_y = random.randint(1, 5)  # 小球y方向的速度
        r = random.randint(5, 50)      # 小球的半径
        colorR = random.randint(10, 255)  # 小球的三个颜色分量
        colorG = random.randint(10, 255)
        colorB = random.randint(10, 255)
        # 存储小球所有信息的列表
        ball = [x, y, speed_x, speed_y, r, colorR, colorG, colorB]
        balls.append(ball)  # 把第i号小球的信息添加到balls中

pgzrun.go()   # 开始执行游戏

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页