python的bgpic出错?

注意程序的mouth对象,它并不是"隐藏"的,虽然它看不见。

小鱼碰到mouth会被“吃掉”。如果把mouth用hide命令设为隐藏,那么是无法获取到mouth的绑定盒,从而碰撞检测失效。

1.精灵对象。这个函数计算矩形下右角的一个坐标并返回它

# 由于下面的鱼的标签都是fish,所以会自动加入到fish_group中 # 小鱼碰到嘴巴及单击鼠标则被吃掉,大鱼长大 # 注意这里调用了reborn后,鱼会立即隐藏,3后后出现 # 在3秒内碰撞检测无效,所以鱼不能动

以上就是Python实战之大鱼吃小鱼游戏的实现的详细内容,更多关于Python大鱼吃小鱼的资料请关注其它相关文章!

该章节我们来学习一下 Python 中非常简单但也非常有用的模块 —> random ,此模块主要用于生成随机数。接下面我们就来了解一下 random 模块中最常见的几种方法。& ...

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

摘要本文会介绍 Python 的基础图库 Turtle。Turtle 库可以帮助初学者更好的学习 Python。本文会介绍如何控制「海龟」在画布上进行移动与绘画,同时使用 Turtle 制作一个简单的游戏。

Turtle 库是 Python 的基础绘图库。其主要是用于程序设计入门,是标准库之一,利用 turtle 可以制作很多复杂的绘图。总体来说,turtle 库可以帮助初学者对学习 Python 有兴趣。

Turtle 名称含义为「海龟」。我们想象一只海龟,位于显示器上窗体的正中心,在画布上游走,它游走的轨迹就形成了绘制的图形。海龟的运动是由程序控制的,它可以变换颜色,改变大小(宽度)等。

  • ,turtle 库的官方说明文档
  • ,一个非常好,非常全的 turtle 入门材料
  • ,利用 turtle 绘制哆啦A梦和皮卡丘
  • ,利用 turtle 绘制一系列的内容(例如樱花树,爱心等)

Turtle 是 Python 的一个内建的库,所以我们不需要进行安装。我们唯一需要做的就是将其导入到 Python 环境中。我们可以通过下面的命令来导入 turtle 库。

现在 turtle 已经在我们的环境中了。我们可以创建一个单独的窗口,在上面执行绘画的命令。首先我们初始化一个窗口。

除了上面初始化画布的方式之外,我们还可以使用 turtle.Screen() 来进行定制化。中间可以输入画布的大小等,如下所示:

接着我们初始化一个变量,这个就是来表示 turtle 的,我们可以控制他的移动。

现在我们已经有了窗口(可以认为是一个画布)和我们的海龟(可以认为是一支画笔)。我们可以使用我们的程序来控制海龟在画布上进行移动。这个海龟会有一些属性是可以改变的,例如大小颜色移动速度等。下面我们就会详细说明如何控制海龟的移动。

我们首先学习如何控制海龟朝不同的方向进行移动。一共是有四个方向海龟可以移动,分别是:

其中 .forward.backward 分别表示表示朝着面向,或是背面的方向移动。里面可以放参数,来控制移动的距离.left.right 表示转向,可以控制转向的角度。我们可以尝试一下下面的例子:

运行上面代码,我们的海龟会依次执行以下的动作(上面 speed 是控制海龟移动的速度的,这个稍后会有更加详细的介绍):

  1. 向前移动 100 个单位
  2. 向前走 100 个单位
  3. 前后走 100 个单位

最终会得到如下的效果:

上面的左转,右转,直行和后退都是可以化简的,如下所示:

我们可以在上面代码后面加入这一行,使得窗口不会马上关闭:

除了按照上面那样移动之外,我们还可以控制海龟直接到达指定的位置。我们可以把整个屏幕想象成一个二维坐标系,起始点就是原点,于是每一个点都有了坐标。

整个屏幕被分为了四个象限,海龟初始的地方是 (0,0),我们称之为原点,或是 Home。我们可以使用 .goto 将海龟移动到屏幕的任意位置。下面是一个简单的例子。

我们直接将海龟移动到 (100, 100) 的位置,输入如下所示:

我们还可以使用下面的命令直接将海龟移动到起始位置,也就是 Home 的位置。

上面我们已经知道了如何移动海龟。接下来我们尝试一下如何绘制出长方形。

上面的代码输出结果如下所示:

可以看到在绘制长方形的时候,每次转向是一样的。于是我们考虑可以通过 for 循环来绘制一个正方形。代码如下所示:

最终绘制出的结果如下所示:

上面我们绘制了一个长方形和一个正方形。可以尝试使用 .goto 的方式来绘制长方形和正方形。同时也可以尝试绘制三角形,或是其他形状。

上面我们介绍了如何绘制类似「矩形」或是「三角形」这样的几何形状。但是假设现在要和我们绘制一个圆,如果要使用上面的方式,是会比较吃力的。所以在 turtle 中预设了一些形状,例如我们可以使用下面的命令来绘制圆,其中参数是控制圆的半径。

我们绘制了两个半径不同的圆,最终的效果如下所示:

我们可以使用 while 循环,来绘制一个嵌套的圆,同时需要注意,当半径为负数时,圆的朝向就是向下的,可以看一下下面的代码:

最终绘制的结果如下图所示:

除了绘制圆之外,我们还可以绘制点。这个是没有绘画过程的,是一瞬间完成的。

同样,我们也可以控制里面的参数来控制点的大小。到目前位置,我们了解了如何使用 turtle 来绘制简单的图形。下面我们会介绍如何自定义 turtle,例如自定义背景颜色,自定义画笔的大小等。

我们可以使用 write 来让 turtle 显示指定的文字。下面是一个简单的例子,这里 False 控制写字的时候 turtle 是否会移动到最后一笔的位置。

一般在写字的时候,我们习惯于把 turtle 给隐藏掉:

当我们控制 turtle 移动之后,我们可以获取他们的位置。通过 turtle.pos() 来获取,如下所示:

使用 .pos,可以获取到 x 和 y 的坐标。

这里其实可以分为两个部分,第一个部分是对于画布的自定义;第二个部分是对于画笔的自定义。

上面我们默认情况下画布都是白色的,这个颜色我们是可以自定义的。下面是自定义的方式。

我们也可以是使用指定的图像来作为背景,下面是自定义的方式:

有些时候我们可以修改我们窗口的标题,更加定制化。例如下面我们将窗口标题修改为"My Title Program"。

最终修改的结果如下图所示:

我们还可以增大和减少屏幕上 turtle 的大小。这个大小的改变是不会影响到最终画笔的粗细的,只是影响显示的大小而已。我们使用 .shapesize 来改变大小,主要会有以下的三个参数:

我们使用下面的参数来控制画笔的大小:

下面展示了不同的参数的效果,可以看到这里是不影响最终绘制线条的粗细的

在默认情况下画笔的形状不是一个 turtle(海龟),而只是一个三角形。但是我们可以将他的形状修改为 turtle 的形状,或是一些其他的形状。Turtle 库一共支持以下的几种形状:

  • Classic,也是类似于箭头,他默认的形状

我们可以使用以下的命令来修改形状,下面是修改为 turtle:

最终实际的效果如下所示:

除了使用他默认的形状之外,我们还可以自定义形状。如下所示,我们自定义两个形状,并将其拼接在一起。其中第一个是一个箭头,第二个是一个三角形

我们甚至可以将一个图片,或是动图注册为 shape,下面是一个简单的例子:

我们还可以自定义 turtle 移动的速度。我们可以加快或是减慢他移动的速度,使用 speed 来进行控制,下面是简单的说明:

我们需要注意一下这里速度的对应关系,不是数字越小速度越慢,他有自己的对应关系:

速度快慢与参数的关系如上所示,就是会比较奇怪。

上面是改变了 turtle 的大小,不会改变最终线条的粗细。但是有的时候我们需要增加或是减少绘制的线条的粗细,我们可以使用 .pensize 来改变绘制的粗细。

.pensize 中的参数表示线条的粗细。数字越大,线条越粗。上面的代码表示第一个圆使用 5 倍粗细的线条进行绘制,第二个圆使用正常的线条进行绘制。最终的结果如下所示:

修改 turtle 和绘制线条的颜色

在默认情况下当我们打开画布的时候,turtle 是一个黑色的图像,并且绘制出的线条也是黑色的。但是根据我们的需求,我们可以进行下面两点定制化:

  • 改变线条的颜色,同时改变 turtle 的 outline,可以改变 turtle 走出的线条的颜色。

下面我们来看一下改变颜色的例子,我们进行如下的设置:

最终输出的效果如下所示:

我们也可以将上面修改颜色写在一起,如下所示:

在绘制的图形中进行填充

前面介绍的都是修改线条的颜色。除此之外,我们还可以修改里面填充的颜色。我们使用 .begin_fill 来告诉程序我们准备绘制一个封闭的图像,需要进行颜色的填充。使用 .end_fill 来告诉程序封闭的图像已经创建完毕,现在开始填充他。

在下面的代码中,我们创建了一个正方形,并在里面填充了蓝色,线条颜色为红色。我们还是首先使用 color 来设置颜色:

现在假设我们有如下的需求:

如果按照我们上面讲的,我们的代码需要写成下面的样子:

最终的生成效果如下所示:

但是每次这么写会比较繁琐,我们可以将这些都写在一行里面。代码如下所示:

这里最终生成的效果是和上面一样。

有的时候,我们想要让我们的 turtle 从屏幕上的一个点移动到另外的一个点,但是又先不要绘制任何东西。为了实现这个,我们可以使用 .penup(),这个非常类似与将画笔提起。如果我们想要让我们的 turtle 重新开始绘画,可以使用 .pendown()

下面我们尝试一个简单的例子,让我们的 turtle 移动到 (100, 100) 的位置在开始绘制圆。

这里最终的效果如下所示:

有的时候我们需要在画布上有多个类似的 turtle。例如一个 turtle 可以表示一种颜色的画笔,画笔定义好了,只需要修改颜色,就可以使用 clone。如果直接想要多个,只需要直接初始化多个 turtle 即可。例如下面所示:

在下面的代码中,我们初始化了一个 turtle,接着对其进行克隆,并修改他的属性。

最终的效果如下所示,上面的圆是使用克隆的画笔绘制的,下面的圆是使用原始的画笔绘制的。

删除某一个 turtle 绘制的内容

我们可以删除某一个 turtle 绘制的内容。如下所示:

注意此时只是清除了绘制的内容,而此时 turtle 的位置是不会移动的。如果我们在一个画布中有多个 turtles,那由别的 turtle 绘制的内容是不会消失的。

上面的 clear 只可以删除某个 turtle 当先绘制的内容,但是他的位置是不变的。这里我们使用 reset 可以将 turtle 的位置也回到 HOME 的位置,同时所有设置的参数都会变为默认的参数。同样的,这个也是对于某个 turtle 来说的。只能将指定 turtle 进行重置。

下面我们看一个例子,有两个 turtle,我们只重置其中的一个 turtle。

最终的效果如下所示,可以看到只有指定的 turtle 的进行了重置。

前面我们讲过了如何自定义 Turtle,那部分更多的是在介绍自定义画笔属性(例如画笔的颜色,粗细等)。如果我们想要使用图片来作为画笔的形状呢。

  • 我们使用 addshape 将图片加到画布中(一定要是 gif 格式的图片,我们可以先保存为 png,在修改后缀为 gif 也是可以的);
  • 使用 shape 来指定某一个画笔的形状;

下面的代码将两个画笔改变为指定「哆啦 A 梦」的形状:

最终的效果如下图所示:

我们也可以使用自定义的图片来作为背景图片,使用 bgpic 来更改背景图片。下面的代码,我们将背景替换为海滩的图片(同样,也是需要 gif 格式的图片):

我们把前面学到的所有关于 Turtle 的用起来,制作一个海龟赛跑的游戏。游戏主要是两只海龟,每位玩家随机一个数表示海龟移动的距离,最后看谁先移动到终点。

我们首先初始化海龟,给出他们的初始化位置(也就是对应的起点)

上面我们两个 player 是使用了 clone,我们也可以直接定义两个,下面也使用 turtle.Turtle() 将那些初始化。接着我们给出各自对应的重点,终点使用圆来表示。起点和终点距离是 500

在完成了这些之后,我们就可以看到如下的场景:

在绘制好了上面游戏的环境之后,我们就要设计主体的功能了,主要有以下的内容。

  • 我们需要能够检查海龟是否到达了终点;
  • 如果没有达到终点,需要让玩家继续玩;
  • 在每一步中,会从 1-6 中随机选择一个数字,代表移动的距离;

上面是简单实现的操作的功能,最终的效果如下所示:

这个还是可以继续完善的,首先可以有一个随机数,决定谁先开始。其次可以制作一个显示比分的内容。然后可以有每次谁移动的,移动了多少的提示。

我要回帖

更多关于 python的pil库安装失败 的文章

 

随机推荐