Python精灵模块范例集V1.72版(100个)与PDF完整说明书下载

本模块2023年6月21已更新到1.72版, 请用pip uninstall sprites 卸载老版本,再用以下命令进行安装。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites –upgrade

python sprites module readme

python sprites module readme

Python精灵模块可以用非常简单的代码制作有趣的创意Python作品。Python精灵模块主要包括了继承自Turtle类的Sprite类。当然,也提供Turtle类和Screen函数等。所以它和Python海龟画图是相通的,但是对海龟画图进行了一些调整,以适应某些实际上的需求。
如支持png等图片格式,支持图片旋转,增加了鼠标移动事件,可以通过mouse_pos命令直接获取鼠标指针,能在循环中直接检测鼠标与键盘按键。默认的精灵是抬笔的,并且屏幕延时设置为0毫秒。能写斜着的字,图章还能移动,能获取角色或图章的绑定盒以便进行矩形碰撞检测。角色的图形造型是可以直接保存为图片的。还可以截取屏幕为png图片,为制作gif动态提供了基础。支持像素级颜色碰撞。窗口可无标题栏及设置透明度,能用鼠标中键拖动屏幕,直接使用右键菜单等等。还支持洪水填充功能,2023年版本加入了诸多几何命令,以帮助中小学生学习几何。

本模块已经应用于培训机构进行实效授课,得到学生喜爱及相关人员肯定,Python精灵模块最佳应用环境:

1、计算机游戏与动画的入门启蒙。
2、Python编程入门。
3、Python游戏与动画速成班。
4、Python体验课、公益课。
5、Python短期班,寒假班等等。

下面是一个示例:
由于sprites模块本身导入了time模块,所以可以直接使用time.sleep命令

from sprites import *         # 从精灵模块导入所有命令

cat = Sprite(2)               # 新建动画角色,2代表小猫

while True:
    cat.fd(10)               # 前进10
    cat.nextcostume()        # 下一个造型
    cat.wait(0.3)            # 等待0.3秒

这是用Python精灵模块制作的类似泡泡堂的游戏,

这是一个用到了像素极颜色碰撞的小游戏《盘山公路的牵引》:

这是一个Python趣味游戏,配音是不是很特别?《Python换桶接方块游戏》

这是一个躲避类型的游戏。

Python精灵模块100例含源代码与教程等等。

链接:https://pan.baidu.com/s/1dGo-9flN8J9G2t_fSLFYkg
提取码:cxf5

发表在 python, sprites, turtle | 标签为 , , , , , | Python精灵模块范例集V1.72版(100个)与PDF完整说明书下载已关闭评论

关于XX杯比赛

做为裁判,昨天参加了XX杯选拔赛。到看了一个叫什么stema的试卷?什么意思?不是steam吗?怎么变成了stema了?

这个stema是他们自己命名的不知道什么含义的东西。试卷内容,历史、地理、天文、英文、数学、流程图什么的全部来了。

我的学生们参加的都是Python比赛啊。心中暗想,这是不是试卷内容搞错了?

就算搞错了,考试也得进行下去!所以这个叫stema的试卷就发给了学生们,让他们做。

选择题目做完了,才是Python的编程题目。编程题目也没有什么新意,还是老一套,有两个普通的海龟画图,然后什么百钱买百鸡,杨辉三角,把算法的题目搬出来,用Python实现一下。

这出题目的水平比较次,大概是几个没有教学经验,Python水平也较低下的人出的题吧。不过也不难理解,少儿Python本来就是新鲜事物,出题人教学经验不足也是完全有可能的。

还有Scratch后面这几题目也较难,我相信大部分Scratch老师都不一定能做得出来,何况小学生,还要在规定的时间内完成?Python的教学方向我一直是普及趣味创意型,没有涉及到算法。

但考试的内容无论是Scratch还是Python却是以算法为主。这可是相当有害的!走了一条老路,不过既然是选拔赛,出得较难也能理解。但却是不适合于广大学生参与的一项赛事。

对于某些学生,可能会打击其信心,扼杀其兴趣。考试完全不能反应哪些学生学得好,哪些学生学得不好。每个学生的情况怎么样,我都心中有数。

我想像中的学生们确是快乐地学习着编程,制作有趣的创意小作品。Scratch的设计初衷也是这样,而Python,我认为也应该是趣味化的,适合于广大学生学习的。

总结:XX杯选拔赛,考试难度堪比奥数,感觉向NOIP靠拢。并不适合于广大学生参与。培训机构还需要一项适合于广大学生参与的赛事。

发表在 杂谈 | 关于XX杯比赛已关闭评论

每天早上7点多钟,我散步式的慢慢地走到我的办公室。我想,为什么人类社会要这么发展。它的目的是什么?或许没有目的。地球上的人进化的目的是进化成一个细胞吗?没有网络会立即死去的那种细胞。现在这个趋势已经越来越明显了。人类社会需要发展的必要元素越来越多,一旦没有,人类社会则立即回到原始社会,或者连原始社会还不如。因为原始社会那时候的人是单独的个体,可以独 立生存,而现在的人类社会紧密的联系在一起了,一旦失去,人类社会立即土崩瓦解。科幻电影《黑衣人》第一部里最后的镜头是不断地向后退。让我们看到我们所在的宇宙只不过是外星人玩的一个球。当然,“聪明”的人类是会有很多备份的。就像银行系统也有一级备份,二级备份,热备份,冷备份什么的,还分散到各个非常安全的地方。人类也在格棱兰岛永久冻土层备份了很多东西。这些备份对于地球的历史来说只能存在一瞬间而已。对于整个宇宙来说几乎就代表不存在这个备份。想到这些,对人生就产生了迷惘,究竟是“进”,还是“退”。而所谓的“进步发展”只是相对于人类而言, 对于地球来说是“进步发展”吗?1000万年前,地球没有人类,地球也过得很好吗?“宇宙”先前所做的一切都是为了进化出人类?人类的诞生到底是纯属偶然,还是完全必然?如果是偶然,我们每个 人则瞬间是宇宙可有可无的了。如果是必然,则有规律可循,就能“算”出在宇宙还会有很多的智慧生命。只是我们人类目前“渺小”地还找不到更高层智慧生命的存在。

更高维的智慧生命或许一直在“注视”着我们。视觉、触觉、听觉等,我们都是依靠自身器官进行收集信息。然而这些信息,以后  可以不由器官收集了,直接创造这些信息,如“快感”、“兴奋”、“悲伤”等直接输入大脑即可。有部科幻电影,忘了叫什么名字了。里面就有一些人天天依靠外部信息输入,天天做梦。人类器官已经在逐步退化,趋势也很明朗了。每个人感觉到的世界完全是可以 自定义的。那么,每个人所处的世界完全可以是“虚像”了! 如果科技发展到这一天,是不是人类只剩下一个和全宇宙互联的只接收各种信息输入的大脑了?或许那时候的大脑也“电子”化了?并且非常非常的小,就像现在的一个细胞?甚至连细胞都没有了,完全只剩意识,这个意识以“电子”形式保存在计算机里。这就是我们找不到外星人的原因吧。因为外星人已经没有“形”了。细胞进化到鱼 ,进化到爬行动物,进化到猴子,最后又进化到了“细胞”….。这就是哲学上所说的否定之否定吗?人类也是朝这个方向“进化”到“虚无”。然后,下一个进化方向又是什么呢?《西部世界》的第二季,接待员跳下山谷进入了虚拟世界。他们是有意识的,他们能感觉到自己的客观存在,但他们并没有物质实体。马克思的唯物论,认为物质是第一性的,意识只是大脑的机能,是物质的产物,物质在决定着意识。到了未来科技,是不是过时了呢? 毕竟,马克思的唯物论,相对于未来科技社会来说,只是在原始的工业社会里推导出来的结论罢了。或许,就像《西部世界》里所说的那样,你我都仅仅是虚拟世界的10247行代码罢了。

发表在 杂谈 | 已关闭评论

蓝桥杯2019年12月15号编程练习参考答案

"""
   第一题参考答案.py,三角切半圆
"""
import turtle

turtle.color('red','yellow')   # 设定画笔颜色和填充颜色
turtle.penup()                 # 抬笔
turtle.ht()                    # 隐藏

turtle.fd(150)                 # 前进150
turtle.pendown()               # 落笔
turtle.begin_fill()            # 开始填充
for x in range(3):
    turtle.left(120)
    turtle.fd(300)
turtle.end_fill()              # 结束填充

turtle.penup()                 # 抬笔 
turtle.goto(150,-150)          # 定位坐标
turtle.setheading(90)          # 面向90度方向
turtle.color('green')          # 设定颜色为绿色
turtle.begin_fill()            # 开始填充
turtle.circle(150,180)         # 画半径为150的半圆
turtle.end_fill()              # 结束填充

turtle.mainloop()

"""
   第二题百钱买百鸡.py
"""

for x in range(100//5):            # 公鸡5元一只,所以最多100/5只.
    for y in range(100//3):
        for z in range(100*3):
            p = x * 5 + y * 3 + z * 1/3 
            if x + y + z == 100 and p == 100:
                print('公鸡',x,'只,','母鸡',y,'只,','小鸡仔',z,'只',sep='')
input()

"""
   第三题.py,菱形绕圆圈
"""
import turtle

def draw():
    """定义画菱形函数"""
    turtle.right(30)
    turtle.begin_fill()
    for _ in range(2):
        turtle.fd(80)
        turtle.left(60)
        turtle.fd(80)
        turtle.left(120)
    turtle.end_fill()
    turtle.left(30)
        
turtle.ht()           # 隐藏
turtle.penup()        # 抬笔
turtle.pencolor('red')# 画笔颜色

# 画圆形
turtle.fd(120)        # 首先前进120
turtle.left(90)       # 左转90变成向上
turtle.pendown()      # 落笔
turtle.circle(120)    # 画圆
turtle.penup()        # 抬笔 
turtle.right(90)      # 右转90度 
turtle.bk(120)        # 回到初始位置   

# 画12个菱形
turtle.color('black','yellow')
for _ in range(12):
    turtle.fd(120)
    turtle.pendown() 
    draw()
    turtle.penup() 
    turtle.bk(120)
    turtle.right(30)

turtle.mainloop()


"""
   第四题输入英文字母统计字母频率
"""
s1 = input("请输入第1行英文字母:")
s2 = input("请输入第2行英文字母:")
s3 = input("请输入第3行英文字母:")

s = s1 + s2 + s3          # 把三行连接起来
print(s)
bs = s.upper()            # 转为大写的字符串

letters = []              # 新建列表,为了把非字母去掉
for a in list(bs):
    if a.isalpha():       # 是字母才添加
        letters.append(a)

letters  = set(letters)   # 转换为集合,去除重复
letters = list(letters)   # 再次转为列表,好排序
letters.sort()            # 排序

for alpha in letters:     # 输出每一个字母
    print(alpha,end='   ')

print()

for alpha in letters:     # 统计每个字母的字符数
    print(bs.count(alpha),end='   ')


"""包括这一行,非本程序内容,这里是记录一下本程序的一个输出而已.
请输入第1行英文字母:I love you,my baby.
请输入第2行英文字母:You are a good boy.
请输入第3行英文字母:We are very happy with you.
I love you,my baby.You are a good boy.We are very happy with you.
A   B   D   E   G   H   I   L   M   O   P   R   T   U   V   W   Y   
5   3   1   5   1   2   2   1   1   7   2   3   1   3   2   2   8
"""
input()


"""
   第五题,打印杨辉三角.py
"""

level = input('请输入2到15间的正整数:')
level = int(level)

q = []                         # 存储杨辉三角数据的列表
q.append( [0,1,0] )            # level为1时
q.append([0,1,1,0])            # level为2时
for n in range(2,level):
    temp = [0,0]
    for index in range(len(q[n-1])-1):
        # 下一个数据为上两个数据之和
        x = q[n-1][index] + q[n-1][index+1]
        temp.insert(1,x)       # 插入到索引为1的位置
    q.append(temp)
    
rows = 0
for p in q:
    cols = 0
    spaces = 2 * (n -  rows)        # 计算空格数
    print(" " * spaces,end="")      # 打印空格
    for x in p:
        if x == 0 :continue        
        print("{:>4}".format(x),end="")
         
    print()
    rows = rows + 1


发表在 python | 蓝桥杯2019年12月15号编程练习参考答案已关闭评论

手动调速的弹球

tkinter bounce ball class 手动调速度的弹球

tkinter bounce ball class 手动调速度的弹球


"""
   手动调速的弹球.py
"""
from tkinter import *

class BounceBall(Frame):
    
    def __init__(self, master=None):
        
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()
        self.master.title("手动调速的弹球")
        self.after(10, self.moveBall)

    def quit(self):
        self.master.destroy()
        
    def createWidgets(self):

        # 退出按钮
        self.QUIT = Button(self, text='关\n\n闭\n\n窗\n\n口', foreground='red',command=self.quit)
        self.QUIT.pack(side=LEFT, fill=BOTH)

        # 新建画布
        self.canvas = Canvas(self, width=640, height=480,bg='dodger blue')

        # 调整速度的尺度条
        self.speed = Scale(self, orient=HORIZONTAL, label="球的速度:",from_=-100, to=100)

        self.speed.pack(side=BOTTOM, fill=X)

        # 小球对象,只是一个item,整数
        self.ball = self.canvas.create_oval(0, 0, 100, 100, fill="pink")
        self.x = 0
        self.y = 0
        self.velocity_x = 0.3
        self.velocity_y = 0.5

        self.canvas.pack(side=LEFT)

    def moveBall(self, *args):
        if (self.x > 540) or (self.x < 0.0):
            self.velocity_x = -1.0 * self.velocity_x
        if (self.y > 380) or (self.y < 0.0):
            self.velocity_y = -1.0 * self.velocity_y

        deltax = (self.velocity_x * self.speed.get() )
        deltay = (self.velocity_y * self.speed.get() )
        self.x = self.x + deltax
        self.y = self.y + deltay

        self.canvas.move(self.ball, deltax,deltay)
        self.after(10, self.moveBall)


game = BounceBall()

game.mainloop()

发表在 python, tkinter | 手动调速的弹球已关闭评论

vpython测试程序

vpython 3d demo

vpython 3d demo

"""
   vpython测试程序,vpython是用Python进行3D建模的模块。
   以下程序会生成3D球,3D立方体盒子,
   程序显示的结果是在浏览器当中,按鼠标右键可调摄像头,滚动可调远近视距。
   用命令pip install vpython即可安装vpython,

"""
from vpython import *

b = box(pos=vec(-4,2,0), color=color.red)       # 新建3D立方体

c1 = cylinder(pos=b.pos, radius=0.1, axis=vec(0,1.5,0), color=color.yellow)

s = sphere(pos=vec(4,-4,0), radius=0.5, color=color.green)  # 新建球体

c2 = cylinder(pos=s.pos, radius=0.1, axis=vec(0,1.5,0), color=color.yellow)

t1 = text(text='www.scratch8.net', pos=c1.pos+c1.axis, align='center', height=0.5,
          color=color.yellow, billboard=True, emissive=True)

t2 = text(text='sphere', pos=c2.pos+c2.axis, align='center', height=0.5,
          color=color.yellow, billboard=True, emissive=True)

t3 = text(text='Faces forward', pos=vec(-4,0,0),
          color=color.cyan, billboard=True, emissive=True)
box(pos=t3.start, size=0.1*vec(1,1,1), color=color.red)

t4 = text(text='Regular text', pos=vec(-4,-1,0), depth=0.5, color=color.yellow,
        start_face_color=color.red, end_face_color=color.green)

box(pos=t4.start, size=0.1*vec(1,1,1), color=color.red)

发表在 python | vpython测试程序已关闭评论

Python精灵模块简介

本模块时常更新,请用pip uninstall sprites卸载老版本,再用以下命令安装最新版本

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites –upgrade

python sprites module ladybug

python sprites module ladybug

2019年12月9日,一个用于制作入门动画与游戏的Python模块正式诞生了。取名为Python精灵模块或者为角色模块,模块名称为:sprites。只要在Python编程时用from sprites import * 就能使用里面的“小精灵”了。用它能比Pygame模块更简单的创建入门型小游戏。如迷宫游戏、横版过关小游戏、多媒体动画、射击游戏等。本模块集作者多年用turtle、pygame等编程之精华。已经上传到PyPi,全世界的朋友们都能下载使用,方法为在命令提示符里输入 pip install sprites 。以下是一个示例弹球动画的代码,是不是非常简单呢?

"""
最简弹球
"""
from sprites import *

ball = Sprite(1)             # 新建精灵,默认是小虫子,写1会生成一个弹球
while True:
    ball.fd(10)              # 前进10
    ball.bounce_on_edge()    # 碰到边缘就反弹

以下是用这个模块制作的一个射击小游戏:
星空飞碟大战:

Python精灵模块免费开放给所有Python爱好者。你只要在命令提示符里输入pip install  sprites 即可安装。

一、简介:

本模块命令名为精灵模块,或叫角色模块。本模块已经上传到了pypi网站,通过在cmd窗口下输入pip install sprites即可安装使用。
精灵模块主要提供继承自Turtle的Sprite类。重定义了Turtle模块中的一些方法和属性。
由于要旋转图形,所以需要PIL模块和numpy模块支持。默认的精灵对象是抬笔的,内置16张图片。 分别是:ball.png,bug.png,
b1.png,b2.png,cat1.png,cat2.png,bee.png,flower.png,explosion0.png,explosion1.png,fighter.png,
thunder.png,sky.png,ufo.png,rat1.png,rat2.png。它们存在于_built_in_images列表中。在本模块第一次运行后,这些图片会释放
到当前工作目录的res文件夹。本模块设计为教育目的,可用来做入门动画与游戏。

二、Sprite类主要提供了以下功能:

1、角色可直接拖动(compound造型不支持)。
2、提供像Scratch中的三种旋转模式。精灵对象的_rotatemode属性值为0,代表可360度旋转,为1时代表可左右翻转,为2时角色不会旋转。
3、rotatemode:返回或设置旋转模式。
4、addx:x坐标增加,方便编程。
5、addy:y坐标增加,方便编程。
6、scale:缩放角色造型,只有一个参数。
7、gotorandom:到随机位置。这个命令提供了5个别名,randompos、randomposition 、random_pos、random_position、goto_random
8、heading:重定义了这个方法,不带参数能获取当前朝向值。带参数参让角色朝向某对象或坐标,也就是能设置方向了。
9、show:显示对象,带参数时让角色显示一定的时间后又会隐藏,异步执行。
10、hide:隐藏对象,带参数时让角色隐藏一定的时间后又显示,异步执行。
11、move:在水平和垂直方向上移动角色的命令。
12、collide:和另一个角色或图章的碰撞方法,采用的是矩形碰撞,可以有scale参数,表示缩放绑定盒子,如scale=0.5时,绑定盒宽高各缩一半。
13、collidemouse:检测角色有没有碰到鼠标指针,别名是collide_mouse。
14、collide_edge:检测角色有没有碰到边缘检测。
15、bounce_on_edge:碰到边缘就反弹,适合于用fd命令让角色前进后再使用。
16、bbox:获取角色绑定盒,通过指定id号,也可获取图章的绑定盒。
17、randomcolor:设定角色为随机一种较鲜艳的颜色。
18、randomheading:设定角色为随机一个方向。
19、remove:移除方法,把自己从屏幕的_turtles列表中删除,并根据item号删除自己在画布上的形状,清除说话泡泡对象。
20、stamp:重定义了Turtle类的图章方法,新增的参数可以让图章在一定时间后自动被清除,异步执行。
21、stampmove:移动图章的命令,角色可根据图章编号来在水平和垂直方向上移动图章,这样方便了制作动态背景。
22、stampgoto:可以让图章到指定坐标的命令。
23、stampcors:根据图章编号,获取图章的坐标。
24、stampbbox:根据图章编号,获取图章的绑定盒。
25、stampcollide:图章和另一个图章或精灵对象的碰撞检测。
26、play:播放方法,目前只支持播放无损压缩的wav音频文件,支持显示歌词。
27、setalpha:设置透明度方法。参数为从0到255的数值。0代表完全透明,255代表不透明,128代表半透明。
对于polygon和compound造型来说,0代表透明,非0代表不透明。对于image来说,设置角色的透明度从0到255的值就会产生从透明到不透明的渐变效果。
28、getalpha:得到透明度,返回从0到255的整数。
29、set_tag:设置角色的标签。它是一个字符串,用于分组,方便一些游戏的编程。
30、get_tag:获取角色的标签。
31、say:说话方法,会在角色上面显示说话气泡。默认时间为2秒,默认会阻塞进程。
32、saycolor:返回或设置说话的字的颜色。
33、saybordercolor:返回或设置说话泡泡的边框颜色。
34、write:重定义写方法,增加angle参数,可以写斜字,默认为黑体,12号。
35、reborn:“重生”方法,让角色隐藏后在另一坐标重新显示。复用角色之用,可加delay参数,意为在一定的时间后才显示,异步执行。
36、nextcostume:下一个造型,别名是nextshape。
37、previouscostume:上一个造型,别名是previousshape。
38、costumeindex:指定造型编号,别名是shapeindex。
39、update:单独更新(重绘)角色,(屏幕也有这个方法,但会重绘所有角色。)
40、wait:方法,等待一定的时间,以秒为单位,默认等待0.01秒。在等的过程中会不断刷新屏幕。
41、slide:滑行命令,在一定时间滑行到某坐标,别名是glide。
42、draw_grid:指定格子宽度和高度画格子命令,它会在屏幕上铺满格子。
43、draw_grid2:画格子2命令,指定行数、列数、格子宽度、格子高度画格子。
44、draw_grid3:画格子3命令,指定行数、列数、格子宽度、格子高度、是否盖图章,并且角色当前方向来画格子的方法。
45、stampslide:图章滑行命令,别名为stampglide
46、hidestamp:隐藏图章命令,别名为stamphide。
47、showstamp:显示图章命令,别名为stampshow。
48、stampishide:判断图章是否隐藏命令。
49、wander: 在屏幕内漫游,它是gotorandom的慢版。
50、ishide:返回角色是否是隐藏的。
51、write2:用来写有阴影的字,有前景bg和fg参数,默认为中间对齐,宋体16号字。
52、find_overlapping:查找重叠命令。本命令用来查找有无和角色的矩形重叠的项目(包括画笔线条,圆点,多边形,圆弧,填充区域,图章,其它角色),可以有一个参数,叫排除参数。本命令返回找到的项目编号集合。
53、overlap_with:重叠命令。本命令有一个参数,它会查找和这个参数对应的项目有无重叠。(包括线条,圆点,多边形,圆弧,图章,填充区域,其它角色)。它的参数可以是序列、整数与角色或字符串,返回重叠的所有项目编号。
54、topleft:到左上角,返回坐标。
55、topright:到右上角,返回坐标。
56、bottomleft:到左下角,返回坐标。
57、bottomright:到右下角,返回坐标。
58、arc:画圆弧,实际上是一个派形图。参数为radius半径,start起始角,extent结束角,width线宽,fill填充颜色与outline边框颜色 ,返回项目编号。
59、polygon:画多边形,以角色所在坐标为第一个点画多边形,参数为其它坐标列表,width线宽,fill填充颜色与outline边框颜色 ,返回项目编号。
60、contained:返回完全包含在角色最小矩形内的所有项目编号集合。
61、contain:判断角色完全包括另一个角色或项目编号,返回真或假。
62、oval:产生椭形的方法,它会根据当前角色的方向而产生,即可产生斜的椭圆。
63、oval2:产生椭圆的方法,不会根据当前角色的方向产生,即总是“正的”。
64、setleft:设置角色的最左x坐标。
65、setright:设置角色的最右x坐标。
66、settop:设置角色的最上y坐标。
67、setbottom:设置角色的最下y坐标。
68、getleft:获取角色或项目编号的最左x坐标。
69、getright:获取角色或项目编号的最右x坐标。
70、gettop:获取角色或项目编号的最顶y坐标。
71、getbottom:获取角色或项目编号的最底y坐标。
72、pixelcollide:像素碰撞方法。用于两个角色之间的像素级别碰撞。返回碰撞点的坐标及两个角色在这个点的像素值及重叠区域矩形。
73、draggable:设置角色为可拖放。要取消只要设置ondrag方法的值为None即可。
74、saveshape:保存当前造型为图片,只支持image类型的角色。
75、coloroverlap:角色造型图片上的颜色重叠检测命令,属于像素级碰撞命令。
76、collidecolor:碰到颜色命令

三、screen新增命令:

在海龟画图中,屏幕的本质是继承自框架内的画布和滚动条。sprites模块中也一样,但是把屏幕放在了名为displayframe的框架中。
当使用Screen()命令时,不加参数或参数1,则窗口还是和原来一样。displayframe组件就是tk组件(即窗口组件)。
当使用Screen(2)时,新建的窗口会分为左右两大区,名称分别为leftframe和rightframe框架区。displayframe在leftframe区上面。
当使用Screen(3)时,新建的窗口会分为上下两大区,名称分别为topframe和bottomframe区。displayframe在topframe区的左边。

在sprites模块中,为了方便横版或竖版游戏的制作,让背景也能移动。

以下是给屏幕增加的方法。
1、resizable:sprites模块默认窗口是不可变大小的,用这个命令能让窗口重新可缩放。
2、onmousemove:即鼠标移动事件,需要定义一个函数绑定这个事件。
3、onscreenrelease:鼠标松开事件,需要定义一个函数绑定它。
4、move:在水平和垂直方向上移动背景图片。
5、setx:设置背景图片的x坐标。
6、sety:设置背景图片的y坐标。
7、xcor:获取背景图片的x坐标。
8、ycor:获取背景图片的y坐标。
9、goto:设定背景图片的x,y坐标
10、save:截屏,保存屏幕为图形对象或者为图片,屏幕需在最前面显示(不要最小化)。
11、titlebar:是否要标题栏的命令,参数为False,不显示标题栏,反之显示。
12、draggable:让窗口按住鼠标中键时可拖动。在没有标题栏时最好这样,要不然不方便了。
13、addpopup:绑定右键菜单
14、removepopup:移除绑定右键菜单

四、给_Root类增加的方法
1、position:获取窗体在计算机桌面上的x,y坐标,没有参数。
2、goto:设置窗体在计算机桌面上的坐标,参数为x,y整数值。
3、move:相对移动窗体,参数为dx,dy整数值,分别为水平与垂直单位移动距离。

五、单独函数:

1、makecolors:
默认产生128种鲜艳的颜色,导入本模块后它会运行一次,产生一个_colorlist列表。

2、mouse_pos:
获取鼠标指针的坐标,和屏幕的xscale和yscale无关。
它有5个别名,mouse_position、mouseposition、mousepos、getmousepos、getmouseposition。

3、explode:
产生爆炸效果的函数。需要传递坐标和序列帧图。它的别名是effect。

4、txt2image:
方便文字转图像的实用函数,这样就能把角色的造型设置成一个文字了。

5、txt3image:把多行文本转换成图像文件或图形对象。

6、txt4image:把文本文件转换成图像文件或图形对象。

六、单独类:

1、Key类:用来新建某个按键的实例,用于在循环中进行键盘按键检测。
2、Mouse类:用来新建鼠标按键的实例,用于在循环中进行鼠标按键检测。
3、Clock类:用来固定帧的时钟类,有tick方法和getfps方法。前者用来设置帧率,后者获取帧率。
4、Group类:用来给角色分组的一个类,在实例化时需要加标签为参数。

七、其它:
新增屏幕的_focus属性,用来跟踪屏幕是否激活。

注意以下问题:
1、不支持复合图形的拖动。
2、tilt倾斜等变形命令不会对图形进行变形。
3、如果用屏幕的tracer(0,0)关闭了自动渲染角色,那么在移动角色后要马上刷新屏幕,否则会出现意外效果。
原因是绑定盒命令得到的是先前没有刷新的角色的坐标,这样获取的不是最新坐标,当然会导致程序出意外。
4、屏幕的update命令会重新渲染所有的角色,如果角色较多,反而会让程序运行更慢。
5、本模块给RawTurtle类增加了update方法,这样能单独渲染一个角色。本模块已经把屏幕的自动绘画延时设为0及速度也设为最快了。
6、其实Turtle模块可以支持png图片,但要像以下这样写:
screen.addshape(‘scratch.png’,Shape(“image”, screen._image(‘scratch.png’)))
“””

 

 

发表在 arcade, python, sprites, turtle | 标签为 , , , , | Python精灵模块简介已关闭评论

是男人就下一百层雏形

python turtle 是男人就下一百层

python turtle 是男人就下一百层


"""
   是男人就下一百层雏形,这个游戏没有继续完善下去。
   只是提供最简单的代码,方便学习。
"""
from sprites import *

class Wood(Sprite):
    """继承自Sprite的Wood类,用来生成木条"""
    def __init__(self,shape='square',visible=False):
        Sprite.__init__(self,shape=shape,visible=visible)
        self.sw = self.screen.window_width()
        self.sh = self.screen.window_height()
        self.isdanger = random.choice([True,False,False])
        if self.isdanger:              # 如果是危险的则为红色
            self.color('gray','red')
        else:
            self.color('gray','green')       
        self.init()
        
    def init(self):
        self.hide()
        self.shapesize(1,random.randint(5,10),4)
        x = random.randint(-self.sw//2,self.sw//2)
        y = random.randint(-3 * self.sh,-self.sh//2 )
        self.goto(x,y)
        self.show()        

    def update(self):
        self.move(0,5)
        if self.ycor() > self.sh//2 + 20:
            self.init()

akey = Key('a')         # a键实例,注意不是A
dkey = Key('d')         # d键实例,按了大写D无法移动

screen = Screen()       # 新建屏幕
screen.setup(480,780)   # 设定屏幕分辨率
screen.bgcolor('black') # 设定屏幕背景为黑
screen.title("是男人就下一百层原理程序")

man = Sprite('man.png') # 只是个dummy
man.rotatemode(1)       # 左右翻转

# 人会移到脚的坐标靠上一定的距离
foot = Sprite(shape='square',pos=(0,200) )
foot.dy = -5
foot.da = -0.5                       # 加速度
foot.shapesize(0.3,1.5)              # 缩放大小

ws = [ Wood() for x in range(10)]    # 设10根
currentwood = ws[0]
screen.listen()
clock = Clock()
while 1:
    [w.update() for w in ws]        # 每根都移动
    if akey.down():                 # 按a键往左移
        foot.addx(-5)
        man.setheading(180)
    if dkey.down():                 # 按d键往右移 
        foot.addx(5)
        man.setheading(0)
        
    foot.addy(foot.dy)             # 往下掉
    x,y = foot.pos()               # 获取脚的坐标
    man.goto(x,y+50)               # 人移到脚的位置

    # 没有碰到则加速度下落
    if not foot.collide(currentwood):
        foot.dy = foot.dy + foot.da
    for w in ws:
        if foot.collide(w):
            foot.dy = 5
            foot.sety(w.ycor()+5)
            currentwood = w
            foot.da = 0
            break
    if not foot.collide(currentwood):
        foot.da = -0.5 
    
    screen.update()
    clock.tick(60)

发表在 python, sprites, turtle | 是男人就下一百层雏形已关闭评论

海龟画图屏幕失去焦点与得到焦点

当屏得到焦点时显示红色,失去焦点时显示灰色

"""
   海龟画图屏幕失去焦点与得到焦点
"""

from turtle import *

def got_focus(event):
    print(dir(event))
    screen.bgcolor('#333333')

def lost_focus(event):
    print(dir(event))
    screen.bgcolor('dodger blue')

screen = Screen()
screen.setup(480,360)
screen.cv.bind("", got_focus)
screen.cv.bind("", lost_focus)


发表在 python, sprites, turtle | 海龟画图屏幕失去焦点与得到焦点已关闭评论

最简滚动平台跳跃

python turtle platform jum game最简平台滚动游戏

python turtle platform jum game最简平台滚动游戏


用海龟画图模块制作的跳跃小游戏,方便学习此类游戏的基本原理

"""
   最简滚动平台跳跃
"""

from sprites import * 

width,height = 480,360
screen = Screen()    
screen.tracer(0,0)

screen.bgcolor('dodger blue')
screen.colormode(255)
screen.setup(width,height)
screen.title("最简滚动平台跳跃")
screen.bgpic("bg.png")

ground0 = Sprite(shape='square',visible=False)
ground0.goto(-100,20)
ground0.color('dodger blue')
ground0.shapesize(2,2)
ground0.show()

ground1 = Sprite(shape='square',visible=False)
ground1.goto(0,-150)
ground1.color('cyan')
ground1.shapesize(2,130)
ground1.show()

ground2 = Sprite(shape='square',visible=False)
ground2.goto(50,-50)
ground2.color('green')
ground2.shapesize(1,4)
ground2.show()

ground3 = Sprite(shape='square',visible=False)
ground3.goto(150,50)
ground3.color('blue')
ground3.shapesize(1,4)
ground3.show()

ground4 = Sprite(shape='square',visible=False)
ground4.goto(350,0)
ground4.color('brown')
ground4.shapesize(1,4)
ground4.show()

ground5 = Sprite(shape='square',visible=False)
ground5.penup()
ground5.goto(550,20)
ground5.color('magenta')
ground5.shapesize(1,4)
ground5.show()

grounds = [ground0,ground1,ground2,ground3,ground4,ground5]

akey = Key('a')                       # 新建a键实例 
dkey = Key('d')                       # 新建d键实例
wkey = Key('w')                       # 新建w键实例
images1 = ['cat1.png','cat2.png']     # 朝右造型表
images2 = ['cat1_l.png','cat2_l.png'] # 朝左造型表
sp = AnimatedSprite(images1,images2)
sp.up()                               # 抬笔
sp.dy = 0                             # 垂直速度
sp.da = -0.02                         # 加速度
screen.listen()

ground_dx = 0
m1 = Mouse()

以下代码省略......

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 最简滚动平台跳跃已关闭评论

星空飞碟大战

python turtle shoot game ufo大战飞碟

python turtle shoot game ufo大战飞碟


用python精灵模块制作的一款射击小游戏,有可滚动的向下背景,以衬托飞机向上飞行.

"""
   星空飞碟大战.py
   由于配音需要混音器,这里用到了pygame的混音器,
   所以本程序需要pygame支持,安装方法为在命令提示符里输入:pip install pygame --user
   
"""
from sprites import *
import pygame.mixer

def star_move():
  """动态星空背景函数"""
  for star in stars:
    star.move(0,-20)
    if star.ycor() < -height//2:
      x = random.randint(-width//2,width//2)
      y = random.randint(10+height//2,height*2)
      star.reborn(x,y,0,-20)

def spawn_enemy():
  """不定时产生敌机函数"""
  if random.randint(1,10)==1 and len(enemys)<10:
    x = random.randint(-200,200)
    y = random.randint(100,300)
    enemy = Sprite(shape='res/ufo.png',visible=False,pos=(x,y),tag='enemy')
    enemy._rotatemode = 1
    enemy.scale(0.5)
    enemy.setheading(random.randint(1,360))
    enemy.show()

def enemymove():
  """飞碟的移动"""  
  for e in enemys:
    e.fd(3)    
    # 设定一定的机率让ufo朝向player
    if random.randint(10,100) == 10 and \
       abs(e.xcor())<200 and abs(e.ycor()<250):
      e.heading(player)
    
    e.bounce_on_edge()
      
def bulletmove():
  """子弹的移动"""  
  for b in list(bullets):
     b.move(0,10)
     if b.collide_edge():b.remove()
     
def player_shoot():
  """玩家射击函数"""
  if player.alive == False : return 
  if m1.down() and framecounter % 5 == 0 :
     b = Sprite(shape='circle',visible=False,tag='bullet')
     b.scale(0.5)
     b.color('yellow')    
     b.goto(player.pos())        # 移到player坐标
     b.show()                    # 显示子弹
     shoot.play()                # 播放射击声

# 播放背景音乐与生成声效对象
pygame.mixer.init()
pygame.mixer.music.load('audio/FrozenJam.ogg')
pygame.mixer.music.play(-1,0)
explosion = pygame.mixer.Sound('audio/expl3.wav')
shoot = pygame.mixer.Sound('audio/pew.wav')

width,height = 480,640
screen = Screen()               # 新建屏幕
screen.bgcolor('black')         # 屏幕背景色为黑
screen.setup(width,height)
screen.title("星空飞碟大战by李兴球")

screen.addshape('res/fighter.png')
screen.addshape('res/ufo.png')
frames = ['res/explosion0.png','res/explosion1.png']
[screen.addshape(frame) for frame in frames]

# 星星,用来做向下滚动背景,星星的移动也可以通过移动图章实现
# 这样可以有更多的星星。如果用克隆的话有数量限制,根据计算机配置不同而不同。
star = Sprite(shape='circle')
star.color('white')
star.scale(0.1)
stars = [star]
stars.extend([star.clone() for _ in range(20)])
for star in stars:
  x = random.randint(-width//2,width//2)
  y = random.randint(10+height//2,height*2)
  star.goto(x,y)

# 哭脸
cry = Sprite(shape='cry.png',visible=False)
cry.goto(0,100)

# 玩家
player = Sprite(shape='res/fighter.png',pos=(0,-200))
player.scale(0.65)
player.alive = True             # 表示player是活的

m1 = Mouse()                    # 鼠标左键检测实例
clock = Clock()                 # 实钟对象,用来控制fps
framecounter = 0
counter = 0                     # 统计击中的ufo数量
bullets = Group('bullet')       # 子弹组
enemys = Group('enemy')         # ufo敌人组


以下代码省略......

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 星空飞碟大战已关闭评论

测试对象自毁程序

"""
   测试对象自毁程序,只适合于全局变量。
   本程序会找到对象自己的名字,然后删除这个名字。
"""
import inspect


def retrieve_name(var):
    """
    得到变量的名字
    """
    for fi in reversed(inspect.stack()):
        names = [var_name for var_name, var_val in fi.frame.f_locals.items() if var_val is var]
        if len(names) > 0:
            return names[0]
            
def get_name_of_obj(obj, except_word = ""):
    """得到变量的名字"""
    for name, item in globals().items():
        if item == obj and name != except_word:
            return name

            
class Test:
    def __init__(self):
        pass

    def kill(self):
        d = retrieve_name(self)
        globals().pop(d)   # 从全局映射表中弹出这个变量,所以它就自毁了.



        
x = Test()
x.kill()
print(x)       # 打印时说明x名字没有定义,是则程序正确



发表在 python | 测试对象自毁程序已关闭评论

控制fps的时钟Clock类源码

"""
   控制fps的时钟Clock类,
   本程序用来在循环中控制fps。
   如何在海龟画图中控制fps?这是一个比较重要的问题,否则程序可能有时候快有时候慢。
"""
import time
import colorsys
from turtle import *
from random import * 

class Clock:

    def __init__(self):
       self._old_start_time = time.perf_counter()
       self._start_time = time.perf_counter()

    def tick(self,fps=0):
        
        end_time = time.perf_counter()
        pass
    
    def getfps(self):
        """得到fps"""
        t = time.perf_counter() - self._old_start_time
        return round(1/t,2)


# 类定义好了,以下是测试Clock类的代码:

def makecolors(n=128):
        
    """产生颜色表,这种颜色表中的颜色更鲜艳"""
    cs = []
    pass
    return cs

colorlist = makecolors()
screen = Screen()
screen.tracer(0,0)
screen.setup(480,360)
screen.title("控制fps的时钟类")

fps = 10                # 设定fps
index = 0               # 颜色表索引
clock = Clock()         # 建立时钟对象

while 1:    
    screen.bgcolor(colorlist[index])
    index = index + 1
    index = index % len(colorlist)
    t = clock.tick(fps)
    screen.title("fps=" + str(clock.getfps())+ ":逝去的时间:" + str(t))

如需要查看完整源代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 控制fps的时钟Clock类源码已关闭评论

接苹果小游戏

python sprites pick up apple game接苹果小游戏

python sprites pick up apple game接苹果小游戏


通过本程序主要学习如何手动控制帧率,这也是本程序的主要目的。以下是部分代码预览:

"""
   接苹果小游戏,本程序实现手动控制帧率
   Sprite类是继承自Turtle的一个类,所以归于海龟画图。
"""

from turtle import * 

class Sprite(Turtle):
    pass

screen = Screen()
screen.tracer(0,0)
screen.setup(800,500)
screen.bgpic('greenforest.png')

basket = Sprite('basket.png')
basket.up()

counter = 0
fps = 60
start_time = time.perf_counter()

while 1:
    if randint(1,10)==1:
        x = randint(-380,380)
        y = 400
        a = Sprite('apple.png',pos=(x,y))
        a.tag = 'apple'
        a.scale(max(0.5,random()))
        a.up()
    
    for apple in screen.turtles():
        if not hasattr(apple,'tag'):continue         
        apple.move(0,-5)
        if apple.collide(basket):
            apple.kill()
            counter += 1
            continue
        if apple.ycor() < -250:apple.kill()
    basket.goto(mousepos()[0],-180)    
    screen.update()
    screen.title('接苹果小游戏,已接到:' + str(counter) + '个苹果')

    # 以下代码实现手动控制帧率为60
    pass
   

如需要查看完整源代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 接苹果小游戏已关闭评论

颜色表产生器

下面的颜色表中的颜色更加鲜艳呢。

"""颜色表产生器"""

import colorsys
from random import * 

def randomcolor():
    """设定随机颜色,颜色没那么鲜艳。"""    
    r = randint(0,255)
    g = randint(0,255)
    b = randint(0,255)
    return r,g,b

def makecolors(n=128):        
    """产生颜色表,这种颜色表中的颜色更鲜艳"""
    cs = []
    pass
    return cs

# 以下是测试代码段
from turtle import *

screen = Screen()
screen.delay(0)
screen.colormode(255)
screen.bgcolor('black')
screen.title('颜色表产生器')

t = Turtle(shape='circle')
t.penup()

width = screen.window_width()
height = screen.window_height()

colorlist = makecolors()
for _ in range(100):
    x = randint(-width//2,width//2)
    y = randint(-height//2,height//2)
    t.goto(x,y)
    t.dot(20,choice(colorlist))
    #t.dot(20,randomcolor())

如需查看完整源代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 颜色表产生器已关闭评论

云朵生成器

python cloud generator云朵生成器

python cloud generator云朵生成器

"""
   云朵生成器.py
   故乡的云朵飘来了...
   本程序能生成云朵。
"""

from time import sleep
from turtle import *
from random import randint

    
def draw_cloud(hg):
    """hg:海龟
       本程序用海龟对象画一个云朵
    """
    pass

screen = Screen()
screen.delay(0)
screen.bgcolor("dodger blue")

t = Turtle(visible=False)

while 1:
    t.clear()
    draw_cloud(t)
    sleep(1)
   

如需要查看完整源代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 云朵生成器已关闭评论

字母表点阵显示弯曲Hello World.


"""
   字母表点阵显示弯曲Hello World.
"""

import turtle
import random
from math import cos, sin, atan2, radians, degrees 

alphabet = {
    'A': ((0,0),(0.5,1),(0.75,0.5),(0.25,0.5),(0.75,0.5),(1,0)),
    'B': ((0,0),(0,1),(0.625 ,1),(0.75,0.875),(0.75,0.625),(0.625,0.5),(0,0.5),(0.625,0.5),(0.75,0.375),(0.75,0.125),(0.625,0),(0,0)),
    'C': ((0.75,0.125),(0.625,0),(0.125,0),(0,0.125),(0,0.875),(0.125,1),(0.625,1),(0.75,0.875)),
    'D': ((0,0),(0,1),(0.625 ,1),(0.75,0.875),(0.75,0.125),(0.625,0),(0,0)),
    'E': ((0.75,0),(0,0),(0,0.5),(0.75,0.5),(0,0.5),(0,1),(0.75,1)),
    'F': ((0,0),(0,0.5),(0.75,0.5),(0,0.5),(0,1),(0.75,1)),
    'G': ((0.75,0.5),(0.625,0.5),(0.75,0.5),(0.75,0.125),(0.625,0),(0.125,0),(0,0.125),(0,0.875),(0.125,1),(0.625,1),(0.75,0.875)),
    'H': ((0,0),(0,1),(0,0.5),(0.75,0.5),(0.75,1),(0.75,0)),
    'I': ((0,0),(0.25,0),(0.125,0),(0.125,1),(0,1),(0.25,1)),
    'J': ((0,0.125),(0.125,0),(0.375,0),(0.5,0.125),(0.5,1)),
    'K': ((0,0),(0,1),(0,0.5),(0.75,1),(0,0.5),(0.75,0)),
    'L': ((0,0),(0,1),(0,0),(0.75,0)),
    'M': ((0,0),(0,1),(0.5,0),(1,1),(1,0)),
    'N': ((0,0),(0,1),(0.75,0),(0.75,1)),
    'O': ((0.75,0.125),(0.625,0),(0.125,0),(0,0.125),(0,0.875),(0.125,1),(0.625,1),(0.75,0.875),(0.75,0.125)),
    'P': ((0,0),(0,1),(0.625,1),(0.75,0.875),(0.75,0.625),(0.625,0.5),(0,0.5)),
    'Q': ((0.75,0.125),(0.625,0),(0.125,0),(0,0.125),(0,0.875),(0.125,1),(0.625,1),(0.75,0.875),(0.75,0.125),(0.875,0)),
    'R': ((0,0),(0,1),(0.625,1),(0.75,0.875),(0.75,0.625),(0.625,0.5),(0,0.5),(0.625,0.5),(0.875,0)),
    'S': ((0,0.125),(0.125,0),(0.625,0),(0.75,0.125),(0.75,0.375),(0.675,0.5),(0.125,0.5),(0,0.625),(0,0.875),(0.125,1),(0.625,1),(0.75,0.875)),
    'T': ((0,1),(0.5,1),(0.5,0),(0.5,1),(1,1)),
    'U': ((0,1),(0,0.125),(0.125,0),(0.625,0),(0.75,0.125),(0.75,1)),
    'V': ((0,1),(0.375,0),(0.75,1)),
    'W': ((0,1),(0.25,0),(0.5,1),(0.75,0),(1,1)),
    'X': ((0,0),(0.375,0.5),(0,1),(0.375,0.5),(0.75,1),(0.375,0.5),(0.75,0)),
    'Y': ((0,1),(0.375,0.5),(0.375,0),(0.375,0.5),(0.75,1)),
    'Z': ((0,1),(0.75,1),(0,0),(0.75,0)),
}


writer = turtle.Turtle()
writer.hideturtle()
writer.speed(0)
window = turtle.Screen()
window.bgcolor("#000000")
writer.pensize(2)

def display_string(message,font_size,color,x,y):
  writer.color(color)
  message=message.upper()
  
  for character in message:
    if character in alphabet:
      letter=alphabet[character]
      writer.penup()
      for dot in letter:
        writer.goto(x + dot[0]*font_size, y + dot[1]*font_size)
        writer.pendown()
        
      x += font_size
      
    if character == " ":
      x += font_size
    x += char_spacing
    
def display_string2(message,font_size,color,x,y,rotationAngle):
  writer.color(color)
  message=message.upper()
  writer.penup()
  writer.goto(x,y)  
  for char in message:
    if char in alphabet:
      letter=alphabet[char]
      writer.setheading(rotationAngle)
      writer.penup()
    
      x=0
      y=0
      for dot in letter:
        angle = atan2((dot[1]-y),(dot[0]-x))
        angle= degrees(angle)    
  
        distance = ((dot[0]-x)**2 + (dot[1]-y)**2)**0.5
        writer.setheading(rotationAngle)
  
        writer.left(angle)
        writer.forward(distance*font_size)
        x = dot[0]
        y = dot[1]
        writer.pendown()
  
      writer.penup()
      angle = atan2((0-y),(0-x))
      angle = degrees(angle)    
  
      distance = ((0-x)**2 + (0-y)**2)**0.5
      writer.setheading(rotationAngle)
  
      writer.left(angle)
      writer.forward(distance*font_size)
  
    writer.setheading(rotationAngle)
    writer.penup()
    writer.forward(font_size)    
    
    writer.forward(char_spacing)


# 主要执行程序
font_size = 30
font_color="#FF00FF"
char_spacing = 5
cursorX = -150
cursorY = -100

message = "Hello World"
rotationAngle=90
writer.goto(cursorX,cursorY)

display_string(message,font_size,font_color,-190,0)
writer.up()
writer.goto(cursorX+50,cursorY+150)
for char in message:
  pos=writer.position()
  display_string2(char,font_size,'cyan',pos[0],pos[1],rotationAngle)
  rotationAngle-=180/(len(message)-1)


点阵字A示例图:

发表在 python, turtle | 字母表点阵显示弯曲Hello World.已关闭评论

画格子的虫子


以下Sprite类为Turtle的子类,格子是虫子画的。

"""
   画格子的虫子
"""
from sprites import *

width,height = 800,600
screen = Screen()
screen.delay(0)
screen.colormode(255)
screen.setup(width,height)
screen.title("画格子的虫子")   

b = Sprite()
for x in range(30):      
  b.addx(400)
  b.addx(-400)
  b.addy(10)
b.home()
for x in range(30):      
  b.addx(400)
  b.addx(-400)
  b.addy(-10)
b.home()

for x in range(30):      
  b.addx(-400)
  b.addx(400)
  b.addy(-10)
b.home()

for x in range(30):      
  b.addx(-400)
  b.addx(400)
  b.addy(10)
b.home()

for x in range(40):      
  b.addy(400)
  b.addy(-400)
  b.addx(10)
b.home()

for x in range(40):      
  b.addy(400)
  b.addy(-400)
  b.addx(-10)
b.home()

for x in range(40):      
  b.addy(-400)
  b.addy(400)
  b.addx(10)
b.home()

for x in range(40):      
  b.addy(-400)
  b.addy(400)
  b.addx(-10)
b.home()
b.penup()
b.dot(5,'red')
b.goto(100,100)
b.dot(5,'red')
b.goto(-100,100)
b.dot(5,'red')
b.goto(-100,-100)
b.dot(5,'red')
b.goto(100,-100)


b.dot(5,'blue')
b.goto(200,200)
b.dot(5,'blue')
b.goto(-200,200)
b.dot(5,'blue')
b.goto(-200,-200)
b.dot(5,'blue')
b.goto(200,-200)

def displaymouse():
    screen.title(str(mouse_pos()))
    screen.ontimer(displaymouse,100)

displaymouse()

发表在 python, sprites, turtle | 画格子的虫子已关闭评论

雪花帘子

python sprite8 snow curtain demo雪花帘子

python sprite8 snow curtain demo雪花帘子

"""
   雪花帘子.py
   克隆与可移动图章实现的一个动画
   下面的Sprite类继承自Turtle,所以本程序归于海龟画图.
"""
from sprites import *

width,height = 470,734
screen = Screen()
screen.tracer(0,0)
screen.title("雪花帘子")
screen.bgpic("girl.png")
screen.setup(width,height)

amounts = 18
snow = Sprite('snow.gif',visible=False)

snows=[snow]
for x in range(amounts-1):
    snows.append(snow.clone())

for i in range(amounts):
    snows[i].goto(-220 + i * 20,400)
    snows[i].show()
    
以下代码省略......



下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 雪花帘子已关闭评论

图章粒子效果

"""
    图章粒子效果,
    海龟画图的图章是静止的,可本程序实现了移动它。
    并且碰到它缘它还会自动消失。
"""

from sprites import *
from random import *

screen = Screen()
screen.tracer(0,0)
screen.bgcolor('black')
screen.setup(600,600)

ball = Sprite(shape='circle',visible=False)
ball.color('yellow')
ball.scale(0.05)

velocity = [x for x in range(-10,10) if x!=0]
speeds = {}
while 1:
    i = ball.stamp()                # 返回图章编号
    dx = choice(velocity)           # 水平速度
    dy = choice(velocity)           # 垂直速度  
    speeds[i] = (dx/20,dy/20)


以下代码省略......
    

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 图章粒子效果已关闭评论

炮弹旋转发射演示

python sprite8 canon shoot demo炮弹旋转发射演示

python sprite8 canon shoot demo炮弹旋转发射演示

"""
    炮弹旋转发射演示。
"""
from sprites import *

screen = Screen()                      # 新建屏幕

screen.bgcolor('#82f0f8')              # 屏幕背景色
screen.setup(600,600)                  # 设置宽高
screen.title("炮弹旋转发射演示")       # 设置标题 
screen.tracer(0,0)                     # 关闭自动刷新

pao = Sprite('大炮.png')               # 实例化大炮
pd_group = Group('炮弹')               # 实例化炮弹组

[Sprite('bullet.png',tag='炮弹',visible=False) for x in range(10)]

unfired_list = list(pd_group)          # 待发射的炮弹列表
fired_list = []                        # 已经发射出去的炮弹表

frame_counter = 0                      # 帧计数器
clock = Clock()                        # 新建时钟对象

while True:
    frame_counter += 1
    pao.right(1)
    代码省略......
    screen.title(str(len(unfired_list))) # 显示待发射炮弹的数量
    screen.update()
    clock.tick(120)
 

下载完整源代码与素材,(压缩包含两个版本的炮弹发射程序), 请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, sprites, turtle | 炮弹旋转发射演示已关闭评论

直接设定坐标点定义海龟形状为正五边形

"""
   直接设定坐标点定义海龟形状为正五边形
"""

import turtle, math

screen = turtle.getscreen()
screen.title("直接设定坐标点定义海龟形状为正五边形")

hg = turtle.Turtle(shape='blank',visible=False)

hg.color("purple")
hg.pensize(2)
 
pentagon=[]

R = 150
for n in range(0,5):
  x = R*math.cos(math.radians(n*72))
  y = R*math.sin(math.radians(n*72))
  pentagon.append((x,y))

screen.addshape('p',tuple(pentagon))
hg.shape('p')
hg.st()

while 1: hg.right(1)      # 不停地旋转
发表在 python, turtle | 直接设定坐标点定义海龟形状为正五边形已关闭评论

标准的创建可滚动画布的例子

"""
   标准的创建可滚动画布的例子
"""

from tkinter import *

class Test(Frame):
    
    def __init__(self, master=None):
        Frame.__init__(self, master)
        Pack.config(self)
        self.createWidgets()

    def createWidgets(self):
        self.question = Label(self, text="tkinter可滚动画布")
        self.question.pack()

        self.QUIT = Button(self, text='QUIT', background='red',
                           height=3, command=self.quit)
        self.QUIT.pack(side=BOTTOM, fill=BOTH)
        spacer = Frame(self, height="0.25i")
        spacer.pack(side=BOTTOM)

        # 创建画布,可滚动区域为20i,20i
        self.draw = Canvas(self, width="5i", height="5i",
                           background="dodger blue",
                           scrollregion=(0, 0, "20i", "20i"))
        # 创建滚动条
        self.draw.scrollX = Scrollbar(self, orient=HORIZONTAL)
        self.draw.scrollY = Scrollbar(self, orient=VERTICAL)

        # 在画布上设置好滚动条
        self.draw['xscrollcommand'] = self.draw.scrollX.set
        self.draw['yscrollcommand'] = self.draw.scrollY.set
        self.draw.scrollX['command'] = self.draw.xview
        self.draw.scrollY['command'] = self.draw.yview

        # 在画布上面画一个青色的矩形
        self.draw.create_rectangle(100, 100, "3.5i", "3.5i", fill="cyan")
       
        # 最终把滚动条放置好
        self.draw.scrollX.pack(side=BOTTOM, fill=X)
        self.draw.scrollY.pack(side=RIGHT, fill=Y)
        self.draw.pack(side=LEFT)


    def scrollCanvasX(self, *args):
        print("scrolling", args)
        print( self.draw.scrollX.get())



test = Test()

test.mainloop()

发表在 python, tkinter | 标准的创建可滚动画布的例子已关闭评论

tkinter拖动圆点并在非圆点处通过单击创建圆点

本程序演示了鼠标进入,鼠标指针离开,鼠标指针移动等事件。

"""
本程序演示拖动圆点并在非圆点处通过单击创建圆点
"""
from tkinter import *
class Testclass(Frame):

def __init__(self, master=None):
Frame.__init__(self, master)
Pack.config(self)
self.createWidgets()

def createWidgets(self):
self.QUIT = Button(self, text='QUIT', foreground='red',
command=self.quit)
self.QUIT.pack(side=LEFT, fill=BOTH)
self.draw = Canvas(self, width="5i", height="5i")
self.draw.pack(side=LEFT)

Widget.bind(self.draw, "<1>", self.mouseDown)
Widget.bind(self.draw, "", self.mouseMove)

def mouseDown(self, event):
# 检测鼠标指针是否在一个圆点内,如果时则把它设为tk的当前tag.
if not event.widget.find_withtag(CURRENT):
fred = self.draw.create_oval(
event.x - 10, event.y -10, event.x +10, event.y + 10,
fill="green", tags=CURRENT)

self.draw.tag_bind(fred, "", self.mouseEnter)
self.draw.tag_bind(fred, "", self.mouseLeave)

self.lastx = event.x
self.lasty = event.y

def mouseMove(self, event):
"""鼠标指针移动事件"""
self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
self.lastx = event.x
self.lasty = event.y

def mouseEnter(self, event):
"""鼠标指针进入则设为红色"""
self.draw.itemconfig(CURRENT, fill="red")

def mouseLeave(self, event):
"""鼠标指针进入则设为蓝色"""
self.draw.itemconfig(CURRENT, fill="blue")

Testclass = Testclass()
Testclass.mainloop()

发表在 python, tkinter | tkinter拖动圆点并在非圆点处通过单击创建圆点已关闭评论

高斯模糊渐变效果姑娘

python Gaussian blur effect maid高斯模糊效果姑娘

python Gaussian blur effect maid高斯模糊效果姑娘


本程序实现高斯模糊效果渐变的一个姑娘。以下是部分代码预览:

"""
   模糊效果姑娘.py
   本程序用海龟画图屏幕显示有高期模糊效果的一位姑娘。
"""
from time import sleep
from PIL import Image,ImageTk,ImageFilter
from turtle import Turtle,Screen,Shape

    
def setblur(turtle,r):
    """turtle:海龟对象,r:高期模糊半径"""    
    pass
    
width,height = 800,500
screen = Screen()
screen.delay(0)
screen.setup(width,height)
screen.bgpic("zhouzhuang.png")
screen.title("高斯模糊效果姑娘by李兴球")

filename = '姑娘b.png'

pass

maid.rawimagename = filename
maid.rawimage = rawimage
setblur(maid,0)

maid.up()
maid.st()

while 1:
    sleep(1.1)
    for alpha in range(0,210,1):
        setblur(maid,alpha/10)

    for alpha in range(210,-1,-1):
        setblur(maid,alpha/10)


如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 pillow, python, turtle | 高斯模糊渐变效果姑娘已关闭评论

淡入淡出姑娘_turtle+pil实现虚像效果

python turtle fade in fade out effect maid淡入淡出的姑娘演示

python turtle fade in fade out effect maid淡入淡出的姑娘演示


江南姑娘在古镇若隐若现。以下是部分代码预览:

"""
   淡入淡出姑娘.py
   曾经以为海龟画图不能支持虚像效果,其实这是对的。
   但这并不意味着不能显示透明图形,本程序配合PIL模块的相关命令,
   让海龟画图屏幕显示一张淡入淡出的姑娘图形,并且图形会跟随着鼠标指针移动。
   
"""
from PIL import Image,ImageTk
from turtle import Turtle,Screen,TurtleScreenBase,Shape

def _onmousemove(self, fun, add=None):
    """绑定鼠标移动事件"""    
    pass

def follow(x,y):
    pass
    
def setalpha(turtle,alpha):
    """turtle:海龟对象,alpha:透明度"""    
    pass
    
width,height = 800,500
screen = Screen()
screen.delay(0)
screen.setup(width,height)
screen.bgpic("zhouzhuang.png")
screen.title("淡入淡出姑娘by李兴球")

filename = '姑娘.png'
pass
maid = Turtle(visible=False,shape=filename)
maid.rawimagename = filename
maid.rawimage = rawimage
setalpha(maid,0)
screen.onmousemove(follow)
maid.up()
maid.st()

while 1:
    for alpha in range(0,256):
        setalpha(maid,alpha)

    for alpha in range(255,-1,-1):
        setalpha(maid,alpha)


如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 pillow, python, turtle | 淡入淡出姑娘_turtle+pil实现虚像效果已关闭评论

女儿经_turtle文字简单淡入淡出效果

女儿经截图python text fade in fade out

女儿经截图python text fade in fade out



以下是部分代码预览:

"""
   女儿经.py,本程序实现文字淡入淡出效果,
   配了音乐与背景图片。
   亮点就是本程序用海龟画图模块实现了一种文字的简单淡入淡出显示效果。
"""
from time import *
from turtle import *
from winsound import *

nv = [
"""
女儿经,仔细听,
早早起,出闺门,
烧茶汤,敬双亲,
勤梳洗,爱干净,""",
"""
学针线,莫懒身,
父母骂,莫作声,
哥嫂前,请教训,
火烛事,要小心,""",
"""
穿衣裳,旧如新,
做茶饭,要洁净,
凡笑语,莫高声,
人传话,不要听,""",
"""
出嫁後,公姑敬,
丈夫穷,莫生瞋,
夫子贵,莫骄矜,
出仕日,劝清政,""",
"""
抚百姓,劝宽仁,
我家富,莫欺贫,
借物件,就奉承,
应他急,感我情,""",
"""
积阴德,贻子孙,
夫妇和,家道成,
妯娌们,要孝顺,
邻居人,不可轻,""",
"""
亲戚来,把茶烹,
尊长至,要亲敬,
粗细茶,要鲜明,
公婆言,莫记恨,""",
"""
丈夫说,莫使性,
整肴馔,求丰盛,
著酱醋,要调匀,
用器物,洗洁净,""",
"""
都说好,贤慧人,
夫君话,就顺应,
不是处,也要禁,
事公姑,如捧盈,""",
"""
修己身,如履冰,
些小事,莫出门,
坐起时,要端正,
举止时,切莫轻,""",
"""
冲撞我,只在心,
分尊我,固当敬,
分卑我,也莫陵,
守淡薄,安本分,""",
"""
他家富,莫眼热,
行嫉妒,损了心,
勤治家,过光阴,
不伶俐,被人论,""",
"""
若行路,姊在前,
妹在後,若饮酒,
姆居左,妯居右,
公婆在,侧边从,""",
"""
慢开口,勿胡言,
齐捧杯,勿先尝,
即能饮,莫尽量,
沉醉後,恐颠狂,""",
"""
一失礼,便被谈,
肴面物,先奉上,
骨投地,礼所严,
动匙箸,忌声响,""",
"""
出席时,随尊长,
客进门,缓缓行,
急趋走,恐跌倾,
遇生人,就转身,""",
"""
洗锺盏,轻轻顿,
坛和罐,紧紧封,
公姑病,当殷勤,
丈夫病,要温存,""",
"""
爷娘病,时时问,
姑儿小,莫见尽,
叔儿幼,莫理论,
里有言,莫外说,""",
"""
外有言,莫内传,
勤纺织,缝衣裳,
烹五味,勿先尝,
造酒浆,我当然,""",
"""
无是非,是贤良,
姆婶事,决莫言,
若闻知,两参商,
伯叔话,休要管,""",
"""
勿唧唧,道短长,
孩童闹,规己子,
是与非,甚勿理,
略不逊,讼自起,""",
"""
公差到,悔则迟,
里长到,不可瞋,
留饮酒,是人情,
早完粮,得安宁,""",
"""
些小利,莫见尽,
论彼此,俗了人,
学大方,人自称,
晒东西,也莫轻,""",
"""
秽污衣,寻避静,
恐人见,起非论,
他骂我,我不听,
不回言,人自评,""",
"""
升斗上,要公平,
买物件,莫亏人,
夫君怒,说比论,
好言劝,解愁闷,""",
"""
夫骂人,莫齐逞,
或不是,陪小心,
纵怀憾,看你情,
祸自消,福自生,""",
"""
有儿女,不可轻,
抚育大,继宗承,
或耕耘,教勤谨,
或读书,莫鄙吝,""",
"""
倘是女,严闺门,
训礼义,教孝语,
能针业,方成人,
衣服破,缝几针,""",
"""
鞋袜破,被人论,
是不是,自己寻,
为人母,所当慎,
奴婢们,也是人,""",
"""
饮食类,一般平,
不是处,且宽忍,
十分刻,异心生,
若太宽,便不逊,""",
"""
最难养,是小人,
再叮咛,更警心,
妯娌多,都一心,
本等话,莫生瞋,""",
"""
同茶饭,莫吵分,
一闹嚷,四邻听,
任会说,非为能,
吵家的,个个论,""",
"""
公姑闹,不安宁,
各自居,也要命,
命不遇,只是贫,
那时节,才理论,""",
"""
这等事,当自忖,
管家娘,更须听,
赶捉牲,莫纷纷,
动宰割,忌刀声,"""
"""
亲锅厨,休铮铮,
最不孝,斩先脉,
夫无嗣,劝娶妾,
继宗祀,最为切,""",
"""
遵三从,行四德,
习礼义,难尽说,
看古人,多贤德,
宜以之,为法则。"""
]
def fade_write(t,string):
    ft = ('黑体',22,'normal')            
    pass


PlaySound("帝女花.wav",SND_ASYNC|SND_LOOP)        
screen = Screen()
screen.tracer(0,0)
screen.colormode(255)
screen.bgpic('nv.png')
screen.setup(800,600)
screen.title("女儿经")

t = Turtle(visible=False)
t.penup()
t.goto(-140,-20)
while 1:
  for s in nv:
     t.clear()
     fade_write(t,s)

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 女儿经_turtle文字简单淡入淡出效果已关闭评论

给turtle屏幕增加鼠标移动事件核心代码


当鼠标移动时彩色方块会变色,标题栏会显示坐标值。以下是部分代码预览:

"""
   给turtle的屏幕增加鼠标移动事件。
   本程序演示了如何给turtle.py模块增加鼠标移动事件
"""
import colorsys
from random import *
from turtle import *

def _onmousemove(self, fun, add=None):
    """绑定鼠标移动事件"""    
    pass

#  以下是产生颜色表
cs = []
for y in range(100):
    x = random()
    r,g,b = colorsys.hsv_to_rgb(x,1,1)
    r,g,b = int(r*255),int(g*255),int(b*255)
    cs.append((r,g,b))

screen = Screen()
screen.tracer(0,0)
screen.colormode(255)
screen.setup(480,360)
screen.bgcolor("dodger blue")

t = Turtle(shape='square')
t.penup()
t.shapesize(4,4,4)
ft = ('',32,'normal')
def writezi(x,y):    
    pass
    t.write(rgb,font=ft,align='center')
    t.sety(-100)
    t.write((x,y),font=ft,align='center')
    t.sety(100)
    screen.title('鼠标指针坐标:' + str((x,y)))

screen.onmousemove(writezi)
screen.mainloop()

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, tkinter, turtle | 给turtle屏幕增加鼠标移动事件核心代码已关闭评论

tkinter多线程粒子_布朗移动

tkinter brownian motion 多线程粒子布朗运动

tkinter brownian motion 多线程粒子布朗运动

"""
   tkinter多线程粒子_布朗移动
"""

from tkinter import *
import random
import threading
import time
import sys

WIDTH = 400
HEIGHT = 300
SIGMA = 10
BUZZ = 2
RADIUS = 1
LAMBDA = 10
FILL = 'blue'

stop = 0                                # 停止标志

def particle(canvas):
    r = RADIUS
    x = random.gauss(WIDTH/2.0, SIGMA)
    y = random.gauss(HEIGHT/2.0, SIGMA)
    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
    while not stop:
        dx = random.gauss(0, BUZZ)
        dy = random.gauss(0, BUZZ)
        dt = random.expovariate(LAMBDA)
        try:
            canvas.move(p, dx, dy)
        except TclError:
            break
        time.sleep(dt)
        

def main():
    global stop
    root = Tk()
    root.title('tkinter多线程粒子_布朗移动_brownian motion')
    canvas = Canvas(root, width=WIDTH, height=HEIGHT,bg='cyan')
    canvas.pack(fill='both', expand=1)
    np = 500
    if sys.argv[1:]:
        np = int(sys.argv[1])
    for i in range(np):
        t = threading.Thread(target=particle, args=(canvas,))
        t.start()
    try:
        root.mainloop()
    finally:
        stop = 1

main()

发表在 python, tkinter | tkinter多线程粒子_布朗移动已关闭评论

tkinter基本画板.py_tkinter画布绘画基本示例程序


以下是部分代码预览:

""""

   tkinter基本画板.py_tkinter画布绘画基本示例程序

"""

from tkinter import *

b1 = "up"
xold, yold = None, None

def main():
    root = Tk()
    root.title("tinter画布绘画基本示例程序")
    drawing_area = Canvas(root,bg='dodger blue')
    drawing_area.pack()
    drawing_area.bind("", motion)
    pass
    root.mainloop()

def b1down(event):
    global b1
    b1 = "down"           # 相当于落笔                          

def b1up(event):
    global b1, xold, yold
    b1 = "up"
    xold = None           # 相当于抬笔
    yold = None

def motion(event):
    pass
if __name__ == "__main__":
    main()

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, tkinter | tkinter基本画板.py_tkinter画布绘画基本示例程序已关闭评论

可爱的按钮_进入与离开事件

python turtle mouse enter leave event可爱的按钮

python turtle mouse enter leave event可爱的按钮

用Python的海龟画图制作的六个按钮。使用的是画布tag的进入与离开事件完成。以下是部分代码:

"""
   可爱的按钮_进入与离开事件.py
   本程序展示在海龟画图中的进入与离开事件,源于tkinter。
   可做为一个作品的开始按扭。
"""

__author__ = '李兴球'
__date__ = '2019/11/28'
__blog__ = 'www.lixingqiu.com'

from turtle import *

class Button(Turtle):
    """按钮类,继承自海龟类"""
    def __init__(self,shapes,pos=(0,0)):
        Turtle.__init__(self,visible=False)
        self.penup()
        self.shapes = shapes      # shapes是注册到形状字典的两个图
        self.index = 0
        self.shape(shapes[0])
        pass
        
im1 = ['button1.png','button2.png']
im2 = ['button3.png','button4.png']
im3 = ['button5.png','button6.png']
im4 = ['button7.png','button8.png']
im5 = ['buttonA.png','buttonB.png']
im6 = ['buttonC.png','buttonD.png']
images = [im1,im2,im3,im4,im5,im6]

width,height = 480,360
screen = Screen()
screen.delay(0)
screen.bgcolor('dodger blue')
screen.setup(width,height)
screen.title("可爱的按钮 www.lixingqiu.com")

for im in images:
    pass

index = 0
rows = 2
cols = 3
x0,y0 = -100,-50
for r in range(rows):
    for c in range(cols):
        x = x0 + c * 100
        y = y0 + r * 100
        Button(images[index],(x,y))
        index = index + 1

w = Turtle(visible=False)
w.penup()
w.sety(100)
w.color('yellow')
ft = ('楷体',22,'normal')
w.write("可爱的按钮",align='center',font=ft)

w.sety(-150)
w.color('#0f0f0f')
ft = ('宋体',12,'normal')
w.write("作者:李兴球",align='center',font=ft)

screen.mainloop()

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 可爱的按钮_进入与离开事件已关闭评论

飞行棋小游戏.py_源代码

python turtle flying chess game 飞行棋小游戏演示

python turtle flying chess game 飞行棋小游戏演示

用python的turtle制作的基本的一个飞行棋游戏,这是一个原形。可以轻易地把它扩展成一个好玩的飞行棋游戏。

以下是部分代码预览:

"""
   飞行棋小游戏.py
   按空格键会以抛物线扔出色子。QQ会根据色子的点数在棋内移动。
   
"""
import colorsys
from turtle import *
from random import *
from time import sleep

def loadmap(xs,ys):
    """
        xs,ys是以换行分隔的数据列表。
    """
    f1 = open(xs)
    xcors = f1.read()
    f1.close()
    xcors = xcors.split("\n")
    xcors.pop()
    xcors = [int(x) for x in xcors]
    f2 = open(ys)
    ycors = f2.read()
    f2.close()
    ycors = ycors.split("\n")
    ycors.pop()
    ycors = [int(y) for y in ycors]
    cors = [(x,y) for x,y in zip(xcors,ycors)]
    return cors

class Sprite(Turtle):
    """继承自Turtle的精灵类"""
    def __init__(self,image,cors):
        """image:造型,cors:坐标表"""
        Turtle.__init__(self,visible=False)
        self.end = False         # 描述是否到终点
        self.penup()
        self.shape(image)
        self.index = 0           # 坐标表从0开始
        self.cors = cors
        pass
        
    def move(self,steps):
        """从cors取坐标,移动"""
        pass
        
class Square(Turtle):
    """继承自Turtle的方块类,做色子的"""
    def __init__(self,images,cat=None):
        """初始化方法
           images:造型列表
           cat:海龟对象
        """
        Turtle.__init__(self,visible=False)
        self.penup()
        self.cat  = cat
        self.images = images
        self.amounts = len(images)
        self.sw = self.screen.window_width()
        self.sh = self.screen.window_height()
        self.da = -1              # 加速度
        self.screen.onkeypress(self.init,"space")
        
    def init(self):
        """设定初始速度准备做抛物线移动"""
        self.screen.onkeypress(None,"space")
        self.dx = randint(15,25)   # 水平速度
        self.dy = randint(15,25)   # 垂直速度
        self.goto(-self.sw//2,-self.sh//2)
        pass

    def move(self):
        """做抛物线移动"""
        pass     
        

if __name__ == '__main__':

    cors = loadmap("x表.txt","y表.txt")
    width,height = 480,360
    screen = Screen()
    screen.tracer(0,0)
    screen.colormode(255)
    screen.setup(width,height)
    screen.title("飞行棋小游戏by李兴球")
    # 注册色子的造型到形状字典中
    sezis = [f'im/{i}.png' for i in range(6)]    
    pass

    # 产生颜色表
    colorlist = []
    for y in range(100):
        x = random()
        r,g,b = colorsys.hsv_to_rgb(x,1,1)
        r,g,b = int(r*255),int(g*255),int(b*255)
        colorlist.append((r,g,b))

    # t根据cors铺地图
    t = Turtle(visible=False,shape='square')
    t.penup()
    t.shapesize(2.5,2.5,2.5)
    for cor in cors:
        t.color('gray',choice(colorlist))
        t.goto(cor)
        t.stamp()
        screen.update()
        sleep(0.01)

    sprite = Sprite(qq,cors)    # 新建一个精灵
    
    sezi = Square(sezis,sprite) # 新建一个色子
    
    screen.listen()             # 监听键盘按键

    screen.mainloop()


如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 飞行棋小游戏.py_源代码已关闭评论

彩色粒子效果克隆动画

python turtle  color particle effect clone animation彩色粒子效果克隆动画

python turtle color particle effect clone animation彩色粒子效果克隆动画


以下是部分代码预览:

"""
   彩色粒子效果克隆动画.py
   本程序产生了炫丽的彩色粒子效果,亮点:如何彻底删除一个海龟对象。
   要不然程序会越来越卡!
   Delete thoroughly python turtle object,designer: lixingqiu。
"""

import colorsys
from random import *
from turtle import *

class Particle(Turtle):
    """继承自海龟的粒子类"""
    def __init__(self):
        """初始化方法"""
        Turtle.__init__(self,visible=False,shape='circle')
        self.penup()
        self._scale = 0.1
        self.shapesize(0.1,0.1)
        r = [ i for i in range(-25,26) if i != 0] 
        self.goto(choice(r),choice(r))
        pass
        self.color(choice(cs))
        self.speed = self.distance(0,0)/10
        self.st()

    def move(self):
        """向前移动"""
        self.speed = self.distance(0,0)/10         
        self.fd(self.speed)
        pass


#  以下是产生颜色表
cs = []
for y in range(100):
    x = random()
    r,g,b = colorsys.hsv_to_rgb(x,1,1)
    r,g,b = int(r*255),int(g*255),int(b*255)
    cs.append((r,g,b))

width,height = 800,600
screen = Screen()
screen.setup(width,height)
screen.tracer(0,0)
screen.colormode(255)
screen.bgcolor('black')

pass

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 彩色粒子效果克隆动画已关闭评论

炫彩螺旋克隆动画_彻底删除海龟

python turtle Colorful spiral clone animation炫彩螺旋克隆动画

python turtle Colorful spiral clone animation炫彩螺旋克隆动画

在turtle编程中,如何彻底删除海龟对象是一个不小的问题。本程序里当海龟到了屏幕边缘时就会自我销毁。
从而让程序能更加流畅地运行下去。以下是部分代码预览。

"""
   炫彩螺旋克隆动画.py
   本程序产生了炫丽的螺旋效果,亮点:如何彻底删除一个海龟对象。
   要不然程序会越来越卡!
   Delete thoroughly python turtle object,designer: lixingqiu。
"""

import colorsys
from random import *
from turtle import *
from winsound import *

class Drawer(Turtle):
    """继承自海龟的画龟类"""
    def __init__(self):
        """初始化方法"""
        Turtle.__init__(self,visible=False)
        self._pp = 1
        self.color(choice(cs))
        self.pensize(self._pp) 
        self.setheading(randint(1,360)) 

    def move(self):
        """螺旋式移动"""
        self.fd(10)
        self.rt(2)
        self.pensize(self._pp)
        self._pp += 1
            
    def kill(self):
        """自毁"""
        pass

PlaySound('Instrumental Background Music.wav',SND_ASYNC|SND_LOOP)
            
#  以下是产生颜色表
cs = []
for y in range(100):
    x = random()

pass


如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 炫彩螺旋克隆动画_彻底删除海龟已关闭评论

《神童诗》名句鉴赏_多媒体课件演示

python Prodigy Poetry poem multimedia show 神童诗课件演示

python Prodigy Poetry poem multimedia show 神童诗课件演示

神童诗多媒体课件演示,相信这是用Python的海龟画图模块制作的吗?

import time
from turtle import *

pass

def xsleep(delay_time):
    """不阻塞进程的延时"""
    begin_time = time.time()
    while time.time() - begin_time < delay_time:
        print           # dummy的用处说不完
        screen.update()
        
title = "《神童诗》名句鉴赏"

p1 = """
自小多才学,平生志气高。
别人怀宝剑,我有笔如刀。
朝为田舍郎,暮登天子堂。
将相本无种,男儿当自强。
"""
p2 = """
久旱逢甘霖,他乡遇故知。
洞房花烛夜,金榜题名时。
"""

p3 = """
人在艳阳中,桃花映面红。
年年二三月,底事笑春风。
"""

p4 = """
墙角数枝梅,凌寒独自开。
遥知不是雪,惟有暗香来。
"""

p5 = """
春游芳草地,夏赏绿荷池。
秋饮黄花酒,冬吟白雪诗。
"""
poems = [p1,p2,p3,p4,p5]
index = 0
amounts = len(poems)

# 循环播放背景音乐
PlaySound('bgmusic.wav',SND_ASYNC|SND_LOOP)

# 新建屏幕对象
screen = Screen()
screen.setup(800,600)
screen.tracer(0,0)
screen.title(title + "by 李兴球")
screen.bgpic('naturebeauty.png')

pass

t = Turtle(visible=False)
t.color('red')
t.penup()

while True:
    pass
    

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 《神童诗》名句鉴赏_多媒体课件演示已关闭评论

旋转文字效果_turtle或tkinter旋转文字item

用海龟画图模块所写的文字不仅能旋转,还能移动。

python turtle rotate text ,tkinter rotate text 旋转的文字效果

python turtle rotate text ,tkinter rotate text 旋转的文字效果


以下部分代码预览:

"""
   海龟画图实现旋转的文字_tkinter旋转文字
"""
from time import sleep
from turtle import Screen, Turtle

pass

screen = Screen()
screen.bgcolor(0.2,0.3,0.5)
screen.tracer(0,0)
screen.setup(480,360)
screen.title("海龟画图实现旋转的文字_tkinter旋转文字")

turtle = Turtle(visible=False)
turtle.color('red')
ft = ('楷体',28,'normal')
item = None

def rotate(x,y)
    pass
screen.onclick(rotate,1)
screen.mainloop()

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, tkinter, turtle | 旋转文字效果_turtle或tkinter旋转文字item已关闭评论

金龟子图片查看器turtle版源代码

python turtle ladybug scarab picture viewer金龟子图像查看器

python turtle ladybug scarab picture viewer金龟子图像查看器


用Python的海龟画图模块当然可以制作图片查看器的。
以下是部分代码预览:

"""
   金龟子图片查看器.py
   用python的海龟画图制作的图片查看器,支持查看png/bmp/jpg等,还能看gif动画,
   这是一个雏形程序,还不是很完善,方便学习原理。
   可以把源码转换成exe程序,然后让这个exe程序和jpg,png,gif等产生关联,
   这样双击图片就能使用自制的图像查看器看图了。
   源程序打包方法pyinstaller -F 图片查看器.pyw
   
"""
import os
import sys
from turtle import Turtle,Screen,Shape
from PIL import Image,ImageTk, ImageSequence

class Viewer:
    """查看器"""
    def __init__(self,image):
       # 下面可以进行扩展名检测,把不是图片的排除...
       ext = os.path.splitext(image)[-1].lower()
       if ext == '.gif':
           self.isgif = True
           self.frames = []           
           im = Image.open(image)
           # 以下是拆帧
           for frame in ImageSequence.Iterator(im):
                new = Image.new("RGB",im.size,(255,0,0))
                new.paste(frame,(0,0))
                self.frames.append(new)
       else:
           im = Image.open(image)
           self.frames = [im]
           self.isgif = False
       
       self.screen = Screen()    # 新建屏幕
       self.screen.bgcolor(0.2,0.3,0.5)
       self.screen.title(image)  # 标题显示图像路径
       pass       
       self.turtle = Turtle(visible=False)
       self.turtle.penup()
       self.turtle.sety(50)
       self.turtle.color('gray')
       ft = ('楷体',32,'normal')
       self.turtle.write("金龟子图像查看器",align='center',font=ft)
       
       self.turtle.sety(-150)
       self.turtle.color('cyan')
       ft = ('黑体',12,'normal')
       self.turtle.write("www.lixingqiu.com",align='center',font=ft)
       
       self.turtle.home()
       # 注册所有造型到形状字典中
       [self.screen.addshape(str(i),self.shapes[i]) for i in range(len(self.shapes))]
       self.turtle.st()
       self.play()       
       self.scale = 1           # 原始比例为1
       self.screen.cv.bind_all("",self.on_mousewheel)
       self.screen.mainloop()
       
    def play(self):
      """显示静态或动态图片"""
      self.turtle.shape(str(self.index))
      self.screen.update()
      self.index += 1
      self.index %= self.amounts      
      if self.isgif : self.screen.ontimer(self.play,100)

    def on_mousewheel(self,event):
        """鼠标滚动事件,以后可以增加图片缩放功能"""
        self.scale += event.delta/1200        
        print(self.scale)

    pass

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 金龟子图片查看器turtle版源代码已关闭评论

turtle鼠标滚轮事件操作turtle放大缩小


"""
   turtle鼠标滚轮事件操作turtle放大缩小
   关键词,MouseWHeel,滚轮,缩放,画布绑定,
    
"""

from turtle import *

scale = 1

def on_mousewheel(event):
    global scale
    scale += event.delta/1200    
    代码省略......
    
screen = Screen()
canvas = screen.cv
canvas.bind_all("",on_mousewheel)


以下代码省略......

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | turtle鼠标滚轮事件操作turtle放大缩小已关闭评论

按住某键.py

"""
   按住某键.py
"""

import time
import turtle

WIDTH = 800
HEIGHT = 600

seconds = 0

def text(text, posx, posy, size):
    turtle.pencolor('black')
    turtle.goto(posx, posy)
    ft = ("Arial", size, "normal")    
    turtle.write(text, align='center',font=ft)

def press_space():
    global seconds
    seconds = time.time()
    turtle.onkeypress(None, ' ')

def release_space():
    if time.time() - seconds >= 3.0:
        turtle.onkeyrelease(None, ' ')
        text("thank you.", 0, 0, 15)

# 屏幕设定
turtle.screensize(WIDTH, HEIGHT)
turtle.title("按住某键测试")
turtle.hideturtle()
turtle.penup()

# 在屏幕上写文本
text('请按住空格键3秒', 0, 200, 15)

# 事件处理
turtle.listen()
turtle.onkeypress(press_space, ' ')
turtle.onkeyrelease(release_space, ' ')

# End
turtle.done()

发表在 python, turtle | 按住某键.py已关闭评论

迷宫地图转换器_迷宫游戏雏形

python turtle maze game  model简易迷宫游戏雏形

python turtle maze game model简易迷宫游戏雏形


用turtle当然可以制作精美的迷宫游戏。本程序实现一个简单的迷宫游戏。当迷宫生成后,操作一个小人在里面移动。当然小人只能在没有铺砖的地方移动。
以下是代码预览:

"""
   迷宫地图转换器_简易迷宫游戏雏形
"""

from turtle import *
from random import * 

maze1 = ["1111111111",
         "1000000001",
         "1001110101",
         "1000010101",
         "1000010001",
         "1001001001",
         "1000100001",
         "1000000001",
         "1011100111",
         "1111111111"]

tile_width = tile_height = 80     # 砖块宽度和高度
rows = len(maze1[0])              # 行的数量
cols = len(maze1)                 # 列的数量
maze_height  = cols * tile_height # 总共的宽度
maze_width = rows * tile_width    # 总共的高度

screen = Screen()                 # 新建屏幕
screen.delay(0)                   # 绘画延时为0
screen.setup(maze_width,maze_height)
screen.title('迷宫地图转换器_简易迷宫游戏雏形')

# 左上角起始铺砖点
startx = -maze_width//2 + tile_width//2 
starty = maze_height//2 - tile_height//2

pass

cors = {}                      
t = Turtle(shape='tile')
t.penup()

pass

def move_left():
    """基于预判的'碰撞检测'"""
    x = r.xcor() - tile_width
    y = r.ycor()
    if cors[(x,y)] == "0" : r.setx(x)
    
def move_right():
    x = r.xcor() + tile_width
    y = r.ycor()
    if cors[(x,y)] == "0" : r.setx(x)
    
def move_up():
    x = r.xcor() 
    y = r.ycor() +  tile_height
    if cors[(x,y)] == "0" : r.sety(y)
    
def move_down():
    x = r.xcor() 
    y = r.ycor() -  tile_height
    if cors[(x,y)] == "0" : r.sety(y)

screen.onkeypress(move_left,'Left')
screen.onkeypress(move_right,'Right')
screen.onkeypress(move_up,'Up')
screen.onkeypress(move_down,'Down')

screen.listen()
screen.mainloop()
       

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 迷宫地图转换器_迷宫游戏雏形已关闭评论

仿pygame按键检测_跳跳方块雏形游戏源码

turtle jump square source code跳跳方块

turtle jump square source code跳跳方块


终于可以像在pygame中一样自由的操作小方块前后跳了。想了很久才想出来的办法。以前的代码跳的时候不能同时左右移动。而这个代码则可以让小方块在跳的同时向前向后移动。

以下是代码预览:

"""
   仿pygame按键检测_跳跳方块雏形。
   可以向前跳,向后跳,左右移动的一个小方块。
   这可以做为一个小游戏的原形程序。
"""

from turtle import * 
from time import sleep

class Sprite(Turtle):
    def __init__(self):
        Turtle.__init__(self,shape='square')
        self.penup()        
        self.dx = 0
        self.dy = 0
        self.a = -0.5                  # self.a是加速度

    def update(self):       
        pass        

class Checkedkey:
    def __init__(self, screen,key):
        self.key = key
        self.down = False
        screen.onkeypress(self.press, key)
        screen.onkeyrelease(self.release, key)
    def press(self):
        pass

    def release(self):
        pass

screen = Screen()
screen.delay(0)
screen.setup(800,600)
screen.bgpic("redbg.png")
screen.title('仿pygame按键检测_跳跳方块雏形')

a_key = Checkedkey(screen,'a')
d_key = Checkedkey(screen,'d')
w_key = Checkedkey(screen,'w')

s = Sprite()
s.shapesize(2,2,4)
s.color('gray','red')
pass

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 仿pygame按键检测_跳跳方块雏形游戏源码已关闭评论

pygame精灵继承样本程序.py

pygame sprite template精灵继承样本

pygame sprite template精灵继承样本


Sprite类如何继承?这个程序有了答案。以下是部分代码预览:


"""
   pygame精灵继承样本程序.py
   这是一个pygame sprite example
   演示了如何继承pygame.sprite.Sprite类。
"""
import pygame
import random
import os

pass

# 设置素材所在文件夹
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, ".")

class Player(pygame.sprite.Sprite):
    """继承自Sprite的Player类"""
    def __init__(self,image):
        pygame.sprite.Sprite.__init__(self)
        self.image = image
        self.image.set_colorkey(BLACK)
        pass

# 初始化pygame和混音器
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("pygame精灵继承样本程序")
clock = pygame.time.Clock()

all_sprites = pygame.sprite.Group()    # 游戏的角色组
image = pygame.image.load(os.path.join(img_folder, "nano-a.png"))
player = Player(image)
all_sprites.add(player)

# 准备进入游戏循环
pass

pygame.quit()

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 pygame, python | pygame精灵继承样本程序.py已关闭评论

大风车动画

python windmil pen animation大风车动画

python windmil pen animation大风车动画


以下是部分代码预览:

"""
   大风车动画.py,一切都是画出来的,除了背景。
   本程序给大自然画一个风车,按空格键后让它旋转起来。
   演示了自定义形状的方法、 非本地变量、嵌套函数、按键事件等的使用。
"""

from turtle import *

screen = Screen()
screen.setup(800,600)
screen.bgpic("平原背景.png")
screen.title("大风车动画by lixingqiu")

t = Turtle(shape='turtle')

t.left(75)
t.begin_poly()
for i in range(3):
    t.fd(100)
    if i == 0:
        half = t.xcor() # 测试三角形底边半长
    t.left(105)
    t.fd(2*half)
    t.left(105)
    t.fd(100)
    t.right(90)
t.end_poly()

pass

# 转动起来
t.pu()
t.color("green","gold")
t.speed(5)

pass

# 按空格键开始旋转
screen.onkey(begin_rotate,"space")

screen.listen()
screen.mainloop()


如需要查看完整代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 大风车动画已关闭评论

钻石情缘_图章动画与复合形状

python turtle compoundshape and stamp animation钻石情缘

python turtle compoundshape and stamp animation钻石情缘


钻石,舞台,Python,海龟,图章,形状,动画的结合体。以下是部分代码预览:

"""
钻石情缘.py
不好给这个作品取什么名字,暂且用这个名字吧。
这个程序演示了复合形状如何设定。动画中连一个海龟都没有新建。
为什么却有这么多形状,这是用图章实现的,问题是图章不是静止的吗?
为什么图章们会旋转起来呢?对于你来说可能是个谜!

"""
from turtle import *

diamondshape = Shape("compound")          # 新建复合形状

poly1 = ((-7,-7), (7,-7), (7,7), (7,-7))  # 右下灰折线
diamondshape.addcomponent(poly1, "gray")
poly2 = ((-7,-7), (-7,7), (7,7), (-7,7))
diamondshape.addcomponent(poly2, "pink")  # 左上粉红折线
register_shape("diamond", diamondshape)   # 合起来是正方形

bgcolor("pink")
setup(800,600)
bgpic('舞台钻石背景.png')
shape("diamond")
shearfactor(0.3)
pu()
ht()
pass

如需要查看完整代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 钻石情缘_图章动画与复合形状已关闭评论

击鸟行动turtle小游戏

hit bird turtle game击鸟行动

hit bird turtle game击鸟行动


以下是部分代码预览:

"""
   击鸟行动.py
   一群小鸟飞过来,用鼠标指针去单击它。
   单击到了它就从天上掉落下来,沙滩上会有形成鸟的尸体。
   这是有配音的,注意鼠标的形状也改变了。
   
"""

import winsound
from time import sleep
from turtle import *
from random import randint

class Bird(Turtle):
    """继承自海龟类的鸟类"""
    def __init__(self,shapes,soundfile):
        Turtle.__init__(self,visible=False)
        self.up()
        self.sndfile = soundfile
        self.images = shapes
        self.shape_index = 0
        self.shape_amount = len(shapes)  # 造型数量                    
        self.sw = self.screen.window_width()  # 屏幕宽度
        self.sh = self.screen.window_height() # 屏幕高度
        
        
    def start(self):
        """重新起飞"""
        self.ht()
        self._dead = False               # 表示没死
        self.goto(-30-self.sw//2,randint(-50,self.sh//2))
        self.dx = randint(10,20)
        self.dy = randint(5,10)
        self.a = 0                     # 重力加速度
        self.st()
        
    def alt_shape(self):
        """每隔一定时间切换造型"""
        self.shape(self.images[self.shape_index])
        self.shape_index = self.shape_index + 1
        self.shape_index = self.shape_index % self.shape_amount
        self.screen.ontimer(self.alt_shape,50)

    def hit(self,x,y):        
        self.a = - 10                  # 重力加速度
        winsound.PlaySound(self.sndfile, winsound.SND_ASYNC) 

    def update(self):
        """更新坐标"""
        pass

def main():
    """主要执行函数"""
    width,height = 800,600
    screen = Screen()
    screen.delay(0)
    screen.setup(width,height)
    screen.bgpic('bg.png')
    screen.title("击鸟行动")

    # 注册鸟的造型到屏幕
    birds = [f'images/{i:04d}.png' for i in range(1,82)]
    pass
    screen.getcanvas().config(cursor="X_cursor")

    birds = [Bird(birds,'getroffen.wav') for i in range(3)]

    pass

if __name__ == "__main__":

    main()

如需要查看完整代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 击鸟行动turtle小游戏已关闭评论

原生海龟画图实时获取鼠标指针

"""
   原生海龟画图实时获取鼠标指针
"""

import turtle
import tkinter as tk
root = tk.Tk()
root.title("原生海龟画图")
cv = tk.Canvas(root, width=500,height=500)
cv.focus_set()
cv.pack(side = tk.LEFT)
pen = turtle.RawTurtle(cv)   # 在画布上新建原生海龟
pen.pencolor("red")
window = pen.getscreen()     # 画笔所在屏幕窗口
window.delay(0)

def get_mouse_pos(event):
   """获取鼠标指针"""
   cv.unbind("")
   x = root.winfo_pointerx()-root.winfo_rootx()
   y = root.winfo_pointery()-root.winfo_rooty()
   root.title(str(x) + "," + str(y))
   pen.goto(x,y)
   cv.bind("", get_mouse_pos)
       
def main():
    """主要执行函数"""
    window.setworldcoordinates(0,500,500,0)
    window.bgcolor("white")
    frame = tk.Frame(root)
    frame.pack(side = tk.RIGHT,fill=tk.BOTH)
    pointLabel = tk.Label(frame,text="这里是宽度")
    pointLabel.pack()
    cv.bind("", get_mouse_pos)
    cv.pack
    tk.mainloop()
    
if __name__ == "__main__":
  main()
  

发表在 python, tkinter, turtle | 原生海龟画图实时获取鼠标指针已关闭评论

pygame仿3D星空带劲爆音乐


如题,这是带了不错的音乐效果,星星从屏幕中央出发,越来越大。

import pygame
from pygame.locals import *
from random import randint
import math

pygame.init()

screen_width,screen_height = 480,360
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("3D星空带劲爆音乐:作者:李兴球 www.scratch8.net")

class Dot():
    def __init__(self):
        self.radius = 1   #半径
        self.image = pygame.Surface((2,2))        # 建立表面,是4个像素点
        self.image.set_colorkey((0,0,0))           # 设置表面的透明色
        pygame.draw.circle(self.image,(255,255,255),(1,1),1,0)   #在这个表面上画个白色的圆
        self.rect = self.image.get_rect()           #得到self.image在screen上的坐标与长宽
        self.screen_centerx = screen_width //2 - randint(-10,10)
        self.screen_centery = screen_height //2- randint(-10,10)
        self.rect.x = self.screen_centerx
        self.rect.y = self.screen_centery
        pass
        
    def move(self):
        self.rect.move_ip(self.xspeed,self.yspeed)
        #到屏幕中间的距离越大,它的图像也要越大
        pass
       
    def draw(self):
        screen.blit(self.newImage,self.rect)

def 播放背景音乐():
    pygame.mixer.init()
    pygame.mixer.music.load("2.wav")
    pygame.mixer.music.play(-1,0)    
    
def main():

    播放背景音乐()
    
    t = pygame.time.Clock()    
    dotList = []
    
    while True:
        dotList.append(Dot())
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()

        pass

        pygame.display.update()
        t.tick(60)                 # fps每秒显示30帧
       

if __name__ =="__main__":
    main()
        


下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 pygame, python | pygame仿3D星空带劲爆音乐已关闭评论

最简数字时钟.py

python simplest digital clock最简数字时钟

python simplest digital clock最简数字时钟


以下是部分代码预览:

"""
   最简数字时钟.py
   用turtle模块制作的最简单的时钟,
   本质就是tkinter制作。这是没有边框的。
   附tkinter版。
   
"""

from turtle import *
from time import strftime

screen = Screen()
root = screen._root
root.resizable(0,0)      # 固定大小
root.overrideredirect(1) # 移去边框

screen.title("最简时钟")
screen.bgcolor("black")
screen.tracer(0,0)
screen.setup(400,100)
t = Turtle(visible=False)
t.color("white")
pass
screen.mainloop()


# 下面是tkinter版
import tkinter
from time import strftime

root = tkinter.Tk()
root.title('时钟')
root.resizable(0,0)

以下代码省略......


如需要查看完整代码,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, tkinter, turtle | 最简数字时钟.py已关闭评论

邓丽君 – 我只在乎你相册展示MV _ turtle支持png图片,帧率恒定的动画

python邓丽君我只在乎你动画

python邓丽君我只在乎你动画

以下是部分代码预览:

"""
   我只在乎你,支持png图片,帧率恒定的动画。
   海龟画图模块是原生支持png图片作为对象的造型的,并不需要把gif图改名。
   这个动画还实现了帧率恒定,这是借用了pygame的时钟类实现的。
   本程序运行后会演唱邓丽君的 我只在乎你这首歌。
"""
from turtle import *
from winsound import *
from time import sleep
from pygame.time import Clock

PlaySound("邓丽君 - 我只在乎你.wav",SND_ASYNC|SND_LOOP)

width,height = 800,600
screen = Screen()
screen.setup(width,height)
screen.tracer(0,0)
screen.bgpic("bg.png")
screen.title('邓丽君 - 我只在乎你MV')

# 以下代码证明turtle模块原生支持png格式图片
pass

t = Turtle(visible=False)
t.penup()
t.speed(0)

# 新建时钟对象
clock = Clock()
index = 0
while True:
    t.goto(-width//2-200,0)
    t.shape(str(index))
    pass      
    index = index + 1
    index = index % amounts

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 python, turtle | 邓丽君 – 我只在乎你相册展示MV _ turtle支持png图片,帧率恒定的动画已关闭评论

键盘操作的坦克式前进倒退与改变方向

pygame tank forward game

pygame tank forward game

以下是部分代码预览:

"""键盘操作的坦克式前进倒退与改变方向"""
import pygame
from pygame.locals import *
from gameobjects.vector2 import Vector2
from math import *

bgfile = 'world.png'
spritefile = 'Tank1.png'

pygame.init()                    # 初始化pygame引擎
screen = pygame.display.set_mode((640, 480), 0, 32)# 新建屏幕对象
pygame.display.set_caption("鼠标操作的坦克式前进倒退与改变方向")

background = pygame.image.load(bgfile).convert()
sprite = pygame.image.load(spritefile).convert_alpha()

clock = pygame.time.Clock()

#pygame.mouse.set_visible(False)  # 隐藏鼠标指针
#pygame.event.set_grab(True)      # 不和其它应用程序共享设备输入

sprite_pos = Vector2(200, 150)   # 角色初始坐标
sprite_speed = 300.              # 角色前进速度
sprite_rotation = 0.
sprite_rotation_speed = 360.     # 每秒旋转角度

running = True
while running:
    # 遍历每个事件
    for event in pygame.event.get():
        if event.type == QUIT:running=False
        if event.type == KEYDOWN: # 按取消键退出程序
            if event.key == K_ESCAPE:running=False

    pass

    sprite_pos+= heading * sprite_speed * time_passed_seconds

    pygame.display.update()

pygame.quit()


下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

发表在 pygame, python | 键盘操作的坦克式前进倒退与改变方向已关闭评论