当前课程知识点:Python 交互式程序设计导论 > 第5周 > B 课程视频(字典和图片) > Video
返回《Python 交互式程序设计导论》慕课在线视频课程列表
Hi 大家好,欢迎大家回到python课堂
大家已经有了一些列表的知识
今天,我将给大家讲解,如何使用列表来控制画布上的多个内容和对象
好,下面开始我们今天的内容
我们仍然使用我们上节课的例子,我们先来回顾一下
我们先点击运行
我们的鼠标改变位置点击 我们的小球也会改变
当鼠标点击到小球内部,小球变成绿色
这个程序没有问题
好,现在我们的想法是
我们希望在画布上,产生非常多的小球而不是只有一个
我们来看一下怎么去实现,那么在鼠标点击响应函数当中
我们对小球的中心位置有一个改变
那么注意我们的ball_center,也就是我们的中心位置
每次只能接收一个坐标,那么我想的是,如何在画布上,
绘制多个,那就是说我要能够接收多个小球的中心坐标
那么这时候我们要在全局变量声明里,进行一个细微的改动
也就是,我们把ball_center那,改成一个列表,ball_list库列表
那么这个里面是不包含任何数据的
那么在click事件里面,我们说每点击一次,我就把得到的这个坐标
添加到ball_list里面,那么这样的话我的ball_list里面就有很多小球的 中心坐标,对于列表来说,我们有一个方法
ball_list.append就是将得到的这个坐标,添加到我的这个列表里
好,因为pos呢是一个二元组,为了我使用起来方便
我把它强制类型转换 好,那么这样做了以后呢
也就说我的ball_list里面不只有一个中心坐标
也许会有多个小球的中心坐标,好,那么在绘制过程中
因为ball_list可能有多个,那么我们就要对这个ball_list进行逐一访问,
那么对列表的逐一访问我们可以用for ball in ball_list,
注意这个地方我们说的ball呢
你可以写成,只有一个的,只有一个字母b也可以,那么我们
只是说这个地方是小球,所以我们就写了英文单词ball
好啦,有一个代码缩进,我们对这个ball呢,进行绘制
进行绘制,其它地方都没有变化,好,我们来运行下
很容易,我们就得到了我们想要的结果,在屏幕上绘制很多的小球
好,这是我们第一步的改造,那么第二步的改造,我希望的是
当我点击到,屏幕上已有的小球的时候,那么已有的小球,应该是变成绿色
而不是让我产生新的小球,好,我们来看一下怎么去实现
好,那么在click事件中,当我们每点击一次,它会增加一个pos,
增加一个坐标,好,那么在这呢,我们肯定是要经行一个判断
for ball in ball_list,好,那么我们说for ball in ball_list里面也许
我们改变的这个小球不是只有一个,可能会有多个,那么这里呢,小球可能
这里呢,这个ball可能会带的是双重属性的这种一个列表, 什么呢,
第一是包含它的中心点坐标,第二呢它还会要包含一个颜色,如果不在
这个画布上,呢我就应该产生一个新的小球的中心坐标和它的颜色,
如果在里面,那么我就应该,把它的颜色变成绿色,好,根据我们这个想法
那么下面我们说,判断如果distance,什么呢,
这个鼠标点击下去的这个坐标和我们已有的这个ball_list里面,注意,
我们这个地方,
我们这个地方假设的是这个ball呢,是具有的是,
这种格式,
ball_pos and ball_color这种结构
也就是它,对于ball来说,它里面的第一元素是一个坐标,而第二元素呢是它的颜色
如果小球的半径,小于BALL_RADIUS,
那么,我希望的是,它的第二元素,也就是ball_color
等于什么呢,
是绿色的,
那么我每点击一次,它也只能判断一次,那么这个地方到底是 执行了还是没有执行,
我得给它一个标志,所以在这个地方,我们给一个changded等于Flase
如果它改变了,就是如果我们这个地方改变了, 我们把changed,这个地方拼错了
changed等于True,好,
下面
如果要是没有改变呢,没有改变是不是说明我们的这个鼠标点击下去 是不是不在我们的已有列表当中,
所以我们说,如果,没有改变,那我们希望的是把这个小球,
这个坐标,追加到我们的ball_list里面ball_list.append,
注意,我们追加的是这样一个,这样一个列表,什么呢,
首先是我们鼠标点击下去的坐标,然后是它的颜色,
首先是她的坐标,然后是它的颜色,
好,那么,这里完成判断和添加以后,那么就要在绘制里面去了 for ball in ball_list,
然后我们注意,这个既然是坐标的话我们就应该是0, 这里既然是颜色的话,我们就应该是1,
因为我们的ball_list,因为我们的ball_list是,它包含的元素是类似于这样的,
好,我们看对不对,
好,我们来运行下,
产生小圆没问题,
好,嗯,没有问题
(鼠标的点击声音),
也没有问题,
(鼠标的点击声音),
很好,那么这是我们第二个改进,
我们的第三个改进是,
当我的鼠标点击屏幕的时候,那么会产生很多小球, 当我遇到小球的内部的时候,已有小球内部的时候,
我不在改变颜色,而是把这个小球呢从屏幕上删除掉,
那么我们看看这种又怎么去实现,好,那么在我们的这个click事件里面,
也就是说,我们要对这已有的这个ball_list进行删除操作, 我们不能对它,边访问,边删除,那么这样的话,会引起错误的结果,
那么,在代码当中,我们首先建一个准备要删除的这样的一个空列表, 好,怎么去做呢,好,我们把这个去掉,
我们先去遍历这个列表,小球列表,for ball in ball_list,这个删掉,
如果,如果我们鼠标点击的位置和这个小球的位置,小于小球的半径, 我们的操作就是,
我们将这个,小球,追加到我们的这个remove列表当中,
我们将这个小球追加到remove列表当中, 好,下面就是对这个remove进行判断,
如果,用列表的长度去判断,我们用len去表示,
如果列表长度等于0说明没有小球被删除,那么这个时候,我们就把这个,
添加到我们的列表当中,
也就是说当我们这个remove等于空,没有元素的时候, 那也就是我得到的这个点坐标是一个新的小球, 我们把它添加到这个ball_list里面,
否则,怎么办呢,也就说,长度如果等于0,那就是说没有被删除的小球, 如果要长度不等于0,那就应该有删除的小球,那么获取它有多个, 我们就要进行一个逐一访问,
remove,那么这个时候,我们知道的其实是,小球列表当中的这个元素, 那我们怎样去删除它呢,
对列表操作是这样的,ball_list我们知道这个地方, 我们是需要知道该小球所在的索引,
那么怎么样获得小球所在的索引呢,我们可以用ball_list.index,然后是ball,
这样的话,我们就可以把这个小球,从ball_list里面删除了,
好啦,最后,我们在绘制,绘制函数当中,我们这个地方就不需要0了,
我们这个地方就直接使用我们的ball_color就可以了,
因为我们这个地方定义的ball_color等于red,好,我们来运行一下,
我们点一下已有的小球,看看有没有按照我们设想的这样去完成,
嗯,很好,
非常的棒,
大家是不是感觉到,其实编程是一件非常快乐的事情,
好这就是我们今天的内容,我们下次课再见。
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板

