虫子满屏爬_三bug多线程示例程序浅析

Python海龟宝典含200多个原创的用turtle模块制作的创意程序,原名《Python趣味编程200例》。准备参加全国创意编程与智能设计大赛的同学们可以用来做参考。

李兴球Python三bug多线程示例程序演示动图
李兴球Python三bug多线程示例程序演示动图

想像一下许多虫子在屏幕上爬来爬去的情景吧。用Python实现是完全可以的,我们可以用turtle模块,即海龟画图模块来实现。让海龟的造型为一张图片,不过遗憾地是由于海龟画图不支持图像旋转,所以用这个模块实现就比较难了。当然,你是高手的话可以加入numpy或pillow模块,自己编程去实现。这里用一种简单的方法来实现。它已经帮我们实现好了,我们只要简单地调用即可。这个模块叫Python精灵模块,英文名为sprites。你可以认为sprites模块是turtle模块的凤凰涅磐。它是turtle模块的重大升级版。所以当你用from sprites import *语句导入了所有命令,不要再用from turtle import *命令了。因为后者会覆盖前者的同名命令。

那么如何安装sprites模块呢?用pip install sprites命令即可。现实情况下由于要访问国外的服务器,所以安装速度在某些地方很慢以致于安装不上。所以我们要用cmd打开管理员窗口,用下面的命令进行安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites –upgrade
上面是从清华大学服务器下载sprites模块,然后安装的,由于从国内服务器下载,所以速度非常快。安装好后,用from sprites import Sprite,Screen语句可以导入Sprite类和Screen函数。然后用Sprite()就能新建一只虫子,假设取名为bug,那么命令如下所示:

from sprite import Sprite,Screen
bug = Sprite()

接下来就可以让bug不断地满屏爬了。简单化一下,来一个while循环。

while True 代码的控制结构。它可以让同组代码不断地重复执行。bug.fd(1)可以让bug前进一个单位,bug.right(1)可以让虫子右转,简写为bug.rt(1),代码变成了像下面这样:

from sprites import Sprite,Screen
bug = Sprite()                # 新建角色,名为bug
while True:                   # 重复执行 
    bug.fd(1)                 # 虫子前进1个单位
    bug.rt(1)                 # 虫子右转1个单位
李兴球Python一只虫子爬
李兴球Python一只虫子爬

上面的程序运行后,就能看到一只虫子爬了。如果要有更多的虫子爬,我们只要新建更多的角色即可。程序变成像下面这样了:

from sprites import Sprite,Screen
​
bug1 = Sprite()        # 新建虫子1
​
bug2 = Sprite()        # 新建虫子2 
bug2.goto(100,100)     # bug2的坐标定位到(100,100)
​
bug3 = Sprite()        # 新建虫子3
bug3.goto(-100,100)    # bug3的坐标定位到(-100,100)  
    
while True:            # 当成立的时候(重复执行)
    
    bug1.fd(1)         # 虫子1前进1个单位
    bug1.rt(1)         # 虫子1向右转1个单位
​
    bug2.fd(1)         # 虫子2前进1个单位
    bug2.rt(1)         # 虫子2向右转1个单位
    
    bug3.fd(1)         # 虫子3前进1个单位
    bug3.lt(1)         # 虫子3向左转1个单位

上面goto命令和海龟画图中的goto命令是一样的,都是定位角色坐标的。

李兴球Python多线程动画
李兴球Python多线程动画

上面的程序是单线程的,只有一个while循环。如果想有几个while循环同时执行的话就要使用多线程编程了。接下来我们导入Thread,用from threading import *即可。我们这里创建三个线程,每个线程的目标函数会创建一个虫子角色,然后通过while循环让名为bug的虫子不断地爬。这个函数就像下面这样:

def myt1():
    bug = Sprite()
    while True:
        bug.fd(1)
        bug.rt(1)

函数定义好了,我们就能用Thread命令来创建线程了,语句如下所示:
thread1 = Thread(target=myt1)
最后,我们只要简单地调用thread1的start方法就能启动这个线程了。

代码如下所示:

thread1.start()

那么创建三个线程,只要定义三个函数,启动三个线程就可以了。最后,多线程虫子爬的代码如下所示:

"""
   三bug多线程示例程序.py
   本程序创建了三个线程,每个线程都会创建一个bug。
   bug定位后会不断地旋转。
   本程序需要Python精灵模块支持,请用cmd命令,打开管理员窗口,
   然后输入以下使命令进行安装:   
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites   --upgrade
​
"""
​
from threading import *
from sprites import Sprite,Screen
​
def myt1():
    bug = Sprite()
    while True:
        bug.fd(1)
        bug.rt(1)
        
def myt2():
    bug = Sprite()
    bug.goto(100,100)
    while True:
        bug.fd(1)
        bug.lt(1)
​
def myt3():
    bug = Sprite()
    bug.goto(-100,100)
    while True:
        bug.fd(1)
        bug.lt(1)
​
screen = Screen()                  # 新建屏幕对象
​
thread1 = Thread(target=myt1)      # 创建一个线程
thread2 = Thread(target=myt2)      # 创建一个线程
thread3 = Thread(target=myt3)      # 创建一个线程
​
thread1.start()                    # 启动线程1
thread2.start()                    # 启动线程2
thread3.start()                    # 启动线程3
​
screen.mainloop()
​

​更高级的编程方法是可以创建一个Bug类。它继承自Sprite类。​当Bug生成后会自动创建一个线程,自己爬。不过这已经超出本篇论述范围,高级读者可以尝试自行完成。

​使用Python精灵模块能非常简单的创建动画与游戏,更多Python创意/示例源或作品与教程请打开李兴球博客 www.lixingqiu.com

 

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 虫子满屏爬_三bug多线程示例程序浅析

李兴球Python微信公众号文章列表

Python游戏海龟模块教程说明书与案例若干免费发放

爱的纪念_Python创意情景动画源代码解析

少儿Python编程到底学些什么?这些代码或许回答了问题.

Python编程家长会花絮_萍乡中小学Python家长会现场

火星路上等着你_少儿从小学什么最好呢?

国家大力整顿教育培训机构,Scratch或Python少儿编程还有得教吗?

鸿蒙系统支持Python开发_可视化编程特别兴趣小组

Scratch作品转Python作品_小猴接桃

python海龟数据可视化。第七次全国人口普查历年数据图表

你的孩子Python编程学到哪个阶段了?给孩子报编程的家长,务必仔细一读。

五一神女来对话,看看她们聊什么?赠Python教案等。

五一快乐有大礼,告诉大家我是如何上Python课的。

Python名堂多,趣味到处有,劈开机械手,帧帧是图片。速算达人之猫狮大战正在进行。 逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。 Python之潮来临,我在安源区教师科技创新能力的Python讲座

小心你的Python程序,它会是你的一面镜子。小方块闯迷宫.py源代码简析。送Scratch算法集。?

铃儿响钉铛_音效怎能忘_Python配音之Pygame混音器

人面桃花相映红_winsound模块简介

《Python昨晚我想你了》_开源的游戏海龟模块实例案例浅析

《八猫联动初体验》_来自游戏海龟模块的问候

喜爱春天的人儿啊 心地纯洁的人_Python逐行像素显示

旋转之三叶炫彩扇_蟒蛇与海龟的表演

彩虹欢迎字幕_三模合体滚图形

《Python海龟宝典》简介

100%错误的算法还在用,明明没有错别字,说我有11个错别字

奇怪的Python代码,谁能帮我解释一下??

人造地球系统让人类文明充满整个宇宙之Python32768版

深夜,是什么把你的大脑搞成一团浆糊!再谈少儿编程!

5线城市萍乡的少儿Python寒假班学的是什么内容?

关于纯少儿编程课程进化的自然选择

Python海龟画图经典作品_国庆中秋双重喜庆源代码免费下载

海龟为什么要自杀!turtle制作游戏秘籍之一

朋友,你是否知道我在仰望着你_Python神笔马良案例集

酷酷的爆炸效果_Python海龟画图不仅仅是画图

虫子满屏爬_三bug多线程示例程序浅析 少儿Python视频课程A级简介

给的gif图片加文字水印_拆帧与合帧(免费下载180个Python创意源码

用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

简单的用Python做酷炫图形与动画

sb3转exe,sb3素材提取器,编程小子apk, 未公开的pygame游戏集/scratch/python少儿编程免费下载集合

夜幕下的霓虹

学本领,探索更大的世界!

李兴球博客 风火轮编程主页
error: Content is protected !!