4 疯狂的小圆圈

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了

本章我们将实现一个好玩的程序,鼠标点击后,会在点击处出现一些同心圆圈,并在窗口中四处反弹,效果如图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()   # 开始执行游戏

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

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

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

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

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

联想Filez

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

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

  1. python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层

    知乎视频​www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...

  2. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...

  3. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  4. 《Python游戏趣味编程》第12章 坚持一百秒

    12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...

  5. 《Python游戏趣味编程》 第10章 拼图游戏

    10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...

  6. 《Python游戏趣味编程》 第9章 贪吃蛇

    9 贪吃蛇 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个贪吃蛇的游戏,效果如图9-1所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自 ...

  7. 《Python游戏趣味编程》 第7章 飞机大战

    7 飞机大战 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个飞机大战的游戏,鼠标控制飞机移动.按下鼠标发射子弹,效果如图7-1 ...

  8. 《Python游戏趣味编程》 第6章 见缝插针

    6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...

  9. 《Python游戏趣味编程》 第3章 美丽的圆圈画

    3 美丽的圆圈画 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将利用Python绘制美丽的圆圈画,鼠标点击时圆圈的颜色会随机变化.首先在上一章的基础上,绘制 ...

最新文章

  1. Benchmarking of long-read correction methods长期校正方法的基准测试
  2. docker (centOS 7) 使用笔记4 - etcd服务
  3. php imagetextouter,CSS_你不知道的outerText,innerText 区别说明,首先,看我们的html定义- phpStudy...
  4. 2021年第二届“华数杯”全国大学生数学建模竞赛
  5. c++ map中用char数组_C开发实战-指针和字符串
  6. QT-Qt获取当前时间并格式化输出及将积秒转换成时间
  7. python 串口助手 简书_python用pyserial读取串口问题解决
  8. 大事件后台管理系统开发实战(中)
  9. 管理数据通用权限系统快速开发框架设计
  10. 解决VMWare Workstation 响应慢
  11. 追求神乎其技的程式设计之道
  12. 海康威视C++应用软件开发面经
  13. Keil uVison4下载、安装、使用说明
  14. 我写了款依赖检查的插件
  15. 华尔街见闻:泰格马克引领未来AI《见面》之旅
  16. win10获得system权限(超级管理员)
  17. 八字易经算法之用JAVA实现生旺死绝和十神
  18. 十一、海思HISI3556V200摄像头功能裁剪
  19. numpy 归一化 与 标准化
  20. 三分钟教会你微信炸一炸,满屏粑粑也太可爱了!

热门文章

  1. hihocoder第226周:打表找规律
  2. Python3.x中的三目运算实现方法
  3. docsify+github/gitee搭建个人在线文档
  4. AHT20温湿度传感器STM32-I2C驱动,替代DHT11/DHT12/AM2320/SHT20/SHT30,IIC代码兼容AHT10/15-MEMS温湿度传感器
  5. 【LINQ】Linq to SQL -- Where语句
  6. 缓存淘汰策略——最近最久未使用策略(LRU)
  7. CSDN编辑器 修改代码颜色
  8. Linux查看、运行和杀死java进程
  9. MongoDB安装问题
  10. apache的server-status如何分析的技术说明