当前位置:   article > 正文

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

python 编程趣味案例

57793f126999fe5da91c997136d51c83.png
知乎视频​www.zhihu.com

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了​zhuanlan.zhihu.com
83809ddf45fa03ea5b267544798c2f33.png

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

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

知乎视频​www.zhihu.com
  1. import pgzrun # 导入游戏库
  2. import random # 导入随机库
  3. WIDTH = 800 # 设置窗口的宽度
  4. HEIGHT = 600 # 设置窗口的高度
  5. balls = [] # 存储所有小球的信息,初始为空列表
  6. def draw(): # 绘制模块,每帧重复执行
  7. screen.fill('white') # 白色背景
  8. for ball in balls: # 绘制所有的圆
  9. screen.draw.filled_circle((ball[0], ball[1]), ball[4], (ball[5], ball[6], ball[7]))
  10. for x in range(1, ball[4], 3): # 用同心圆填充
  11. screen.draw.filled_circle((ball[0], ball[1]), ball[4]-x, (random.randint(
  12. ball[5], 255), random.randint(ball[6], 255), random.randint(ball[7], 255)))
  13. def update(): # 更新模块,每帧重复操作
  14. for ball in balls:
  15. ball[0] = ball[0] + ball[2] # 利用x方向速度更新x坐标
  16. ball[1] = ball[1] + ball[3] # 利用y方向速度更新y坐标
  17. if ball[0] > WIDTH-ball[4] or ball[0] < ball[4]: # 当小球碰到左右边界时,x方向速度反转
  18. ball[2] = -ball[2]
  19. if ball[1] > HEIGHT-ball[4] or ball[1] < ball[4]: # 当小球碰到上下边界时,y方向速度反转
  20. ball[3] = -ball[3]
  21. def on_mouse_move(pos, rel, buttons): # 当鼠标移动时
  22. if mouse.LEFT in buttons: # 当鼠标左键按下时
  23. x = pos[0] # 鼠标的x坐标,设为小球的x坐标
  24. y = pos[1] # 鼠标的y坐标,设为小球的y坐标
  25. speed_x = random.randint(1, 5) # 小球x方向的速度
  26. speed_y = random.randint(1, 5) # 小球y方向的速度
  27. r = random.randint(5, 50) # 小球的半径
  28. colorR = random.randint(10, 255) # 小球的三个颜色分量
  29. colorG = random.randint(10, 255)
  30. colorB = random.randint(10, 255)
  31. # 存储小球所有信息的列表
  32. ball = [x, y, speed_x, speed_y, r, colorR, colorG, colorB]
  33. balls.append(ball) # 把第i号小球的信息添加到balls中
  34. pgzrun.go() # 开始执行游戏

练习4-4:尝试修改4-5.py,实现用鼠标写字画图的程序,得到类似的效果:

知乎视频​www.zhihu.com
  1. import pgzrun # 导入游戏库
  2. import random # 导入随机库
  3. WIDTH = 1200 # 设置窗口的宽度
  4. HEIGHT = 800 # 设置窗口的高度
  5. balls = [] # 存储所有小球的信息,初始为空列表
  6. def draw(): # 绘制模块,每帧重复执行
  7. screen.fill('white') # 白色背景
  8. for ball in balls: # 绘制所有的圆
  9. screen.draw.filled_circle((ball[0], ball[1]), ball[2], (ball[3], ball[4], ball[5]))
  10. for x in range(1, ball[2], 3): # 用同心圆填充
  11. screen.draw.filled_circle((ball[0], ball[1]), ball[2]-x, (random.randint(
  12. ball[3], 255), random.randint(ball[4], 255), random.randint(ball[5], 255)))
  13. def on_mouse_move(pos, rel, buttons): # 当鼠标移动时
  14. if mouse.LEFT in buttons: # 当鼠标左键按下时
  15. x = pos[0] # 鼠标的x坐标,设为小球的x坐标
  16. y = pos[1] # 鼠标的y坐标,设为小球的y坐标
  17. r = random.randint(10, 20) # 小球的半径
  18. colorR = random.randint(10, 255) # 小球的三个颜色分量
  19. colorG = random.randint(10, 255)
  20. colorB = random.randint(10, 255)
  21. # 存储小球所有信息的列表
  22. ball = [x, y, r, colorR, colorG, colorB]
  23. balls.append(ball) # 把第i号小球的信息添加到balls中
  24. pgzrun.go() # 开始执行游戏

分步骤代码、讲解视频可以从异步社区下载:

https://www.epubit.com/bookDetails?id=UB72096d97d6149​www.epubit.com

分步骤代码也可以直接从这里下载:

联想Filez​box.lenovo.com
84afd9ca7d18e4c780f85dd49c0bd09c.png

2070d8bfb5e39a2886adbdf7a85c2cdc.png

这一章主要学习了列表的基本语法与应用、鼠标交互等知识点。利用列表,我们就可以记录、处理大量的数据;用户使用鼠标和程序互动,可以带来更加直观多样的交互效果。利用这些知识点,开发了疯狂小圆圈的趣味程序,读者也可以尝试实现更加有趣的交互、可视化效果。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号