秋日私语_Python字幕动画_turtle版

Python创意多媒体动画秋日私语

Python创意多媒体动画秋日私语


收获的季节来了,金黄色的秋天来了,这个小小的程序也来了。本程序借用了pygame的混音模块以播放mp3做为背景音乐。下面是部分代码预览:

"""
   秋日私语,这是作者要对你说的话,
   Python创意编程汇编turtle篇改名为:Python创意编程100例turtle篇
   这是最后一个第101案例,这个案例是在秋天这个炫丽的季节慢慢地显示出字幕......
   字幕如下:

   《Python创意编程100例turtle篇》就先编到这里为止了,
   随着Python与操作系统的迭代更新,
   某些案例可能会随着岁月的流逝而无法运行。
   但我相信,你一定能稍加修改就能让它“焕发生机”,
   汝果欲学诗,功夫在诗外!
   www.scratch8.net
  
"""
from turtle import *
from pygame import mixer

__author__ = "李兴球"
__date__ = "2019/9/24"

mixer.init()
mixer.music.load("秋日的私语.mid")
mixer.music.play(0,-1)

width,height = 500,282
screen = Screen()
screen.tracer(0)
screen.title("秋日私语_编者的话_by 李兴球")
screen.setup(width,height)
bgimages = [f'images/{i}.png' for i in range(1,57)]
amounts = len(bgimages)

words = ['《Python创意编程100例turtle篇》就先编到这里为止了',
         '随着Python与操作系统的迭代更新,',
         '某些案例可能会随着岁月的流逝而无法运行。',
         '但我相信,你一定能稍加修改就能让它“焕发生机”',
         '汝果欲学诗,功夫在诗外!',
         'www.scratch8.net']

数量 = len(words)

hgs = [Turtle(visible=False) for w in words]
[t.penup() for t in hgs]             # 每只海龟都抬笔
[t.color('cyan') for t in hgs]       # 每只海龟的颜色
[t.setheading(90) for t in hgs]      # 每只海龟方向朝上
[t.sety(-180 - i * 20) for i,t in zip(range(数量),hgs)]

distance = 0
ft = ("",12,'normal')

.......................
screen.mainloop()

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

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

发表在 python, turtle | 秋日私语_Python字幕动画_turtle版已关闭评论

秋天的诗_叶子类的设计

这个是作品《秋天的诗》的叶子类的设计程序。

本程序运行后,叶子们会不断地往下落。下面是部分代码预览:

"""
   这个模块是作品:秋天的诗的叶子类,本程序定义了Leaf类,它一诞生后会不断地下落,
   到了最下边又会自动回到最上边,换个造型周而复始。
"""
from turtle import *
from random import *

class Leaf(Turtle):
    """
       Leaf类,继承自Turtle类
    """
    def __init__(self,images):
        Turtle.__init__(self,visible=False)
        self.penup()
        self.images = images

    def init(self):
        """进行换造型与下落的初始化定位"""    

    def move(self):
        """不断地移动落叶,直到最下面"""

def main():
    """主要执行函数"""
    leaves = ['leaf0.gif','leaf1.gif','leaf2.gif','leaf3.gif']
    screen = Screen()
    screen.delay(0)
    screen.setup(480,360)
    screen.title("落叶类的设计")
    [screen.addshape(im) for im in leaves]

    [Leaf(leaves) for x in range(10)]

    screen.mainloop()

if __name__ == "__main__":

    main()        

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

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

发表在 python, turtle | 秋天的诗_叶子类的设计已关闭评论

秋天的诗_ turtle渐变效果

这个是作品,秋天的诗的所有源代码,包括了叶子类的源代码。

秋天的诗 turtle渐变效果 by lixingqiu

秋天的诗 turtle渐变效果 by lixingqiu


下面是部分代码预览:

"""
   秋天的诗,这是一个用Python的海龟画图模块制作的一个小作品。
   蓝天下,树叶不断地落下,配合着音乐,描述了一幅秋天的景象。
"""
import time
from turtle import *
from leaf import *
from winsound import *

class Leaf(Turtle):
    """
       Leaf类,继承自Turtle类
    """ 

PlaySound("Music for pianorecorder.wav",SND_LOOP|SND_ASYNC)

screen = Screen()
screen.tracer(0)
screen.setup(480,360)
screen.bgpic("bg.png")
screen.title("秋天的诗 turtle渐变效果 by lixingqiu")

# 版权信息
cprt = Turtle(visible=False)
cprt.penup()
cprt.color("gray")
cprt.setheading(90)
cprt.goto(100,100)
ft = ("宋体",12,"normal")
cprt.write("编程:李兴球",font=ft)
cprt.bk(20)
cprt.write("作诗:李兴球",font=ft)
cprt.bk(20)
cprt.write("配音:李兴球",font=ft)
cprt.bk(20)
cprt.write("情景:李兴球",font=ft)
.................................

# 以下是落叶代码段
leaves = ['leaf0.gif','leaf1.gif','leaf2.gif','leaf3.gif']
[screen.addshape(im) for im in leaves]
[Leaf(leaves) for x in range(10)]      #  生成10片落叶 
    
screen.mainloop()

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

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

发表在 python, turtle | 秋天的诗_ turtle渐变效果已关闭评论

忍者的行为_横版跳跃游戏


用turtle模块制作的一个横版跳跃小游戏。分为几大Class,每个Class的代码在付款后可见。下面是部分代码预览:

"""
   忍者的行为,按向上方向箭头操作忍受者接到标有好行为或好习惯或好品德的泡泡。
   当然,要避开有不良行为或品德的泡泡。如果得分为负数,忍者会“死亡”。
   如果得分大于100,游戏结束,显示这是一个优秀的忍者。
   本程序全部采用海龟画图模块,即turtle模块制作。本站vip会员可向博主直接索取源代码和素材进行学习。
"""
class Sprite(Turtle):
     pass
class Scrollbg:
     pass
class PaoPao(Turtle):
    pass
from winsound import * 

def main():
    """
       主要执行函数
    """
    PlaySound("The Ninja Gaiden.wav",SND_LOOP|SND_ASYNC)
    width,height = 480,360
    screen = Screen()
    screen.delay(0)
    screen.setup(width,height)
    screen.title("忍者的行为")

    # 背景不断地向后移动
    bg1,bg2 = "images/background1.gif","images/background2.gif"
    sbg = Scrollbg(bg1,bg2,screen)

    # 生成10个标有好行为的泡泡
    images = [f"images/good{i}.gif" for i in range(11)]
    [screen.addshape(im) for im in images]
    goods = [PaoPao(images) for x in range(10)]

    # 生成10个标有不好的行为的泡泡
    images = [f"images/bad{i}.gif" for i in range(1,11)]
    [screen.addshape(im) for im in images]
    bads = [PaoPao(images) for x in range(10)]

    # 生成不断跑步的忍者角色
    images = [f'images/Run{i}.gif' for i in range(1,5)]
    [screen.addshape(im) for im in images]
    ninja = Sprite(images)

    screen.listen()

    # 下面开始进行碰撞检测
    score = 0                      # 得分
    gameover = False               # 描述游戏结束
    .................
           
    screen.mainloop()

if __name__ == "__main__":

    main()

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

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

发表在 python, turtle | 忍者的行为_横版跳跃游戏已关闭评论

python turtle 不断向后滚动的卡通城市背景

python turtle 不断向后滚动的卡通城市背景

python turtle 不断向后滚动的卡通城市背景


让海龟变身成为不断向后移动的背景!本程序设计了一个Scrollbg类。本程序为《忍者的行为》作品的背景类。这里单独列出来,供有需要的朋友。如果你已经购买了《忍者的行为》请不要扫码付款。下面是部分代码预览:

"""
   向后滚动的背景,基于screen的standard模式.
"""
from turtle import *

class Scrollbg:
    """向后滚动的背景类"""
    def __init__(self,image1,image2,screen):
        """
           两个图片不断地向后移动,相差屏幕宽度的距离
        """        
        if not image1 in screen.getshapes():
            screen.addshape(image1)
        if not image2 in screen.getshapes():
            screen.addshape(image2)    
        .............................     

        
    def scroll(self):
        """向后滚动"""
def main():
    """主要执行函数"""
    bg1,bg2 = "images/background1.gif","images/background2.gif"

    width,height = 480,360
    screen = Screen()
    screen.delay(0)
    screen.setup(width,height)
    screen.title("python turtle 不断向后滚动的卡通城市背景by lixingqiu")
    
    sbg = Scrollbg(bg1,bg2,screen)

    screen.mainloop()

if __name__ == "__main__":

     main()            

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

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

发表在 python, turtle | python turtle 不断向后滚动的卡通城市背景已关闭评论

python自由落体能跳跃的忍者小人儿角色

python自由落体能跳跃的忍者小人儿角色

python自由落体能跳跃的忍者小人儿角色


本程序为《忍者的行为》的角色Sprite类。如果你已经购买了《忍者的行为》。请不要扫码付款。下面是部分代码预览:

"""
   自由落体能跳跃的忍者小人儿角色
"""
from turtle import *

class Sprite(Turtle):
    """继承自Turtle的角色类"""
    def __init__(self,images):
        Turtle.__init__(self,visible=False)
        self.screen = self.getscreen()
        self.penup()          # 不需画画,所以抬笔
        self.goto(-100,0)     # 定位置
        ......................

def main():
    """主要函数"""
    screen = Screen()
    screen.delay(0)
    screen.setup(480,360)
    screen.bgcolor('light cyan')    
    screen.title("自由落体能跳跃的小人儿角色 by lixingqiu")
    
    images = [f'images/Run{i}.gif' for i in range(1,5)]
    [screen.addshape(im) for im in images]
    
    Sprite(images)

    screen.listen()
    screen.mainloop()

if __name__ == "__main__":

    main()

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

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

发表在 python, turtle | python自由落体能跳跃的忍者小人儿角色已关闭评论

不断从右边冒出来的泡泡,基于屏幕的standard模式。

python turtle不断地从右边冒出来的泡泡

python turtle不断地从右边冒出来的泡泡


本程序为《忍者的行为》的角色泡泡PaoPao类。如果你已经购买了《忍者的行为》。请不要扫码付款。下面是部分代码预览:

"""
   不断从右边冒出来的泡泡,基于屏幕的standard模式。
"""
from turtle import *
from random import *

class PaoPao(Turtle):
    """泡泡类,继承自Turtle类"""

def main():

    screen = Screen()
    screen.delay(0)
    screen.bgcolor("light cyan")
    screen.setup(480,360)
    screen.title("不断从右边冒出来的泡泡by lixingqiu")
    images = [f"images/good{i}.gif" for i in range(11)]
    [screen.addshape(im) for im in images]

    [PaoPao(images) for x in range(10)]

    screen.mainloop()

if __name__ == "__main__":
     main()       

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

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

发表在 python, turtle | 不断从右边冒出来的泡泡,基于屏幕的standard模式。已关闭评论

增广贤文精选_Python海龟画图动画源码

增广贤文精选Python turtle animation 国学

增广贤文精选Python turtle animation 国学

Python、动画、国学、音乐等的结合体。本程序运行后,名人名言会不断地从小到大显示出来。下面是部分代码预览:

"""
   增广贤文精选,这是一个显示增文贤文名句的动画。
   在不断变化的背景上,名句由小变大,一个接着一个的显示出来。
   Python编程、音乐艺术、国学经典、动画技术等的完美结合。
   涉及Python海龟画图知识、文件输入、定时器异步执行、动画显示技巧、音乐播放等。
"""

from turtle import *
from winsound import *

PlaySound("DISCO1.wav",SND_ASYNC|SND_LOOP)
bgimages = [f'images/背景{i}.png' for i in range(3)]

screen = Screen()
screen.setup(480,360)
screen.title("增广贤文精选")

# 下在代码段是不停地变换背景图片
index = 0
................................
s = []                      # 保存增广贤文名句
f = open("增广贤文精选.txt")
for line in f:
    if line.strip()!="" : s.append(line.strip())
f.close()
................................
size = 10
number = 0                   # 表示每个名句的编号
t = Turtle(visible=False)    # 新建海龟对象,写字用
t.penup()                    # 抬笔,
t.sety(80)                   # 设置它的y坐标为80
t.color('blue')              # 设置颜色
...............................
slow_display()
screen.mainloop()

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

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

发表在 python, turtle | 增广贤文精选_Python海龟画图动画源码已关闭评论

python turtle制作的孙子兵法名人赞誉

音乐、国学、编程、创意、历史,跨界才是最美的。

孙子兵法名人赞誉python交互动画

孙子兵法名人赞誉python交互动画


下面是部分代码预览:

"""
   孙子兵法名人赞誉,这是一个交互动画,在欢快的音乐当中,
   不断地按空格键,就会不断地显示出世界各国人民对孙子的评价。
   python, turtle,历史,孙子兵法,中华文化,编程技巧, 音乐艺术, 世界名人的结合体,更重要的是代码还很简单!
"""
from turtle import *
from winsound import *

PlaySound("疯狂青蛙.wav",SND_ASYNC|SND_LOOP)
bgimages = [f'images/背景{i}.gif' for i in range(8)]
................................
width,height = 480,360
screen = Screen()
screen.setup(width,height)
screen.title("孙子兵法名人赞誉")
...................................
comments = [f'images/造型{i}.gif' for i in range(1,13)]
[screen.addshape(im) for im in comments]

# 新建海龟,它的造型是gif图,用来显示评价
number = 0
t = Turtle(visible=False)
t.penup()
t.goto(-width,0)
t.shape(comments[number])
t.st()
t.goto(0,0)

# 开始按空格进行下一个评价的显示
.......................................
screen.onkeypress(next_comment,"space")
screen.listen()
screen.mainloop()

 

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

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

发表在 python, turtle | python turtle制作的孙子兵法名人赞誉已关闭评论

Python三十六计展示 turtle版

Python三十六计展示-by-lixingqiu
用turtle模块制作的交互程序。每个计谋都有图文,还配了武士之歌。欣赏这个作品后,相信能让你激情飞扬!下面是部分代码预览:

"""
   三十六计,用海龟画图模块制作的一个展现古代兵法谋略的Python作品。
   单击每个计谋会显示它的图文说明,再单击说明又会显示36计总菜单。
   武士之歌为背景音乐,气场浩荡,激情飞扬。
"""

from turtle import * 
from random import randint

class Button(Turtle):
    """按钮类,每个按钮有三张图片,前两张是按钮的两个造型,第三张为计谋说明。"""
    pass     

def main():
    """主要函数"""
    
    from winsound import PlaySound,SND_ASYNC,SND_LOOP

    music = "Warrior Song.wav"
    PlaySound(music,SND_ASYNC|SND_LOOP)
    
    width,height = 960,720
    screen = Screen()
    screen.delay(0)
    screen.setup(width,height)
    screen.bgpic("背景1.png")
    screen.title("Python三十六计展示 by lixingqiu")

    plan36 = ['瞒天过海','围魏救赵','借刀杀人','以逸待劳',
              '趁火打劫','声东击西','无中生有','暗渡陈仓',
              '隔岸观火','笑里藏刀','李代桃僵','顺手牵羊',
              '打草惊蛇','借尸还魂','调虎离山','欲擒故纵',
              '抛砖引玉','擒贼擒王','釜底抽薪','混水摸鱼',
              '金蝉脱壳','关门捉贼','远交近攻','假道伐虢',
              '偷梁换柱','指桑骂槐','假痴不癫','上屋抽梯',
              '树上开花','反客为主','美人计','空城计',
              '反间计','苦肉计','连环计','走为上计']
    width ,height = 240,48
    positions = []
    start_x = -360
    start_y = 330
    for i in range(9):
        for j in range(4):
            x = start_x + 240 * j
            y = start_y - 56 * i
            positions.append((x,y))
   
    for plan,pos in zip(plan36,positions):
        images = f"images/{plan}0.gif",f"images/{plan}1.gif"
        image3 = f"images/{plan}说明.gif"
        screen.addshape(image3)
        [screen.addshape(im) for im in images]        
        Button(images,width,height,image3,pos)        
    screen.listen()
    screen.mainloop()

  
if __name__ == "__main__":

    main()  

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

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

发表在 python, turtle | Python三十六计展示 turtle版已关闭评论

tutle迷宫寻宝游戏 python maze game

turtle maze game迷宫寻宝游戏 by lixingqiu

turtle maze game迷宫寻宝游戏 by lixingqiu


用Python的海龟画图模块也能制作迷宫游戏!本迷宫游戏还特此配了音乐。下面是部分代码预览:

"""
   迷宫寻宝游戏,本程序演示了一个迷宫游戏。迷宫的地图是一个列表,
   这个列表的每一行字符代表迷宫中的不同物体。在本例中,X代表墙,
   空格代表可通行的地方,T代表财宝。每个字符在列表中的位置可以
   映射为坐标。
"""
from turtle import *
from winsound import *

def make_maze(level_map,block_image,prop_image):
    """
       产生迷宫,level_map是一个列表,block_image:方块gif图,prop_image:道具图
       本函数根据地图把迷宫给印出来,原理就是扫描level_map中的每一行,
       然后扫描每一行中的每一个字符,根据字符来决定印什么,同时生成墙列表和
       财宝列表。墙列表实际上记录的是所有墙的坐标,而财宝列表记录的是一个个
       的海龟对象,这是为了方便当角色碰到它时能方便地删除它们。
    """
   
    walls = []                   # 墙列表
    treasures = []               # 财宝列表
    t = Turtle(visible=False)    # 用来画墙的海龟对象
    t.penup()                    # 抬笔
    screen = t.getscreen()       # 获取所在的屏幕对象   
    screen.addshape(block_image) # 增加方块造型(墙)
    screen.addshape(prop_image)  # 增加道具,这里是财宝
    t.shape(block_image)         # 设造型为方块 
    start_x = -288               # 左上角起始x坐标
    start_y = 288                # 左上角起始y坐标   
    i = 0                        # i代表的其实是行的索引号
    ............................
class Player(Turtle):
    """
       玩家类,继承自Turtle
    """
    def __init__(self,image,pos,walls,treasures):
        """
           image:造型gif图,pos:初始坐标
           walls:墙列表,treasures:财宝列表
        """
        Turtle.__init__(self,visible=False)
        screen = self.getscreen()
        screen.addshape(image)
        self.shape(image)
        self.penup()
        self.goto(pos)
        self.showturtle()
        # 下面绑定上下左右键到相应的方法上
        screen.onkeypress(self.move_left,"Left")
        screen.onkeypress(self.move_right,"Right")
        screen.onkeypress(self.move_up,"Up")
        screen.onkeypress(self.move_down,"Down")
        screen.listen()
        self.walls = walls
        self.treasures = treasures
        self.gameover = False
        .....................

def main():
    """主要的执行函数"""
    PlaySound("music/SoundTest.wav",SND_LOOP|SND_ASYNC)
    # 下面这个表就是迷宫的地图,其中X代表墙,T代表财宝
    ..................
    screen = Screen()
    screen.delay(0)
    screen.title("迷宫寻宝游戏 by lixingqiu")
    screen.bgpic("images/bg.png")
    p = level_1,'images/block5.gif','images/treasure.gif'
    walls,treasures = make_maze(*p) 
    player1 = Player('images/girl.gif',(0,0),walls,treasures)
    screen.mainloop()    
        
if __name__ == "__main__":

    main()
    

 

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

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

发表在 python, turtle | tutle迷宫寻宝游戏 python maze game已关闭评论

英雄的黎明_电子投票turtle版

python hero votes英雄的黎明电子投票程序

python hero votes英雄的黎明电子投票程序

有三位中华名人,或英雄,或枭雄。请给他们投个票。下面是部分代码预览:

"""
   英雄的黎明电子投票程序。
   作品简介: 英雄的黎明是一个用Python海龟画图制作的电子投票程序,
   作品中融入了历史知识,采用的背景音乐是日本人制作的动漫《三国志》的开篇音乐。
   当单击历史人物图片时,柱状图会一直上升。   
"""

from turtle import * 

class Button(Turtle):
    """按钮类,每个按钮有两张图片,单击它,它的票数就会加1"""
    
def main():
    """主要函数"""
    from winsound import PlaySound,SND_ASYNC,SND_LOOP

    music = "images/英雄的黎明.wav"
    PlaySound(music,SND_ASYNC|SND_LOOP)
    
    width,height = 480,360
    screen = Screen()
    screen.delay(0)
    screen.setup(width,height)
    screen.bgpic("images/greatwall.png")
    screen.title("英雄的黎明_电子投票程序")

    # 下面是依次新建三个历史人物的代码,给他们都绑定鼠标移动事件
    sunimages = "images/孙中山0.gif","images/孙中山1.gif"
    [screen.addshape(im) for im in sunimages]             
    孙中山 = Button(sunimages,(-150,-100),121,140)     
    screen.cv.bind("",孙中山.onmousemove,add=True)

    sunimages = "images/毛泽东0.gif","images/毛泽东1.gif"
    [screen.addshape(im) for im in sunimages]              
    毛泽东 = Button(sunimages,(0,-100),121,140)        
    screen.cv.bind("",毛泽东.onmousemove,add=True)

    sunimages = "images/蒋介石0.gif","images/蒋介石1.gif"
    [screen.addshape(im) for im in sunimages]              
    蒋介石 = Button(sunimages,(148,-100),121,140)      
    screen.cv.bind("",蒋介石.onmousemove,add=True)
    
    screen.mainloop()
    
if __name__ == "__main__":

    main()
  

 

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

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

发表在 python, turtle | 英雄的黎明_电子投票turtle版已关闭评论

python turtle 简易彩虹图

简易彩虹图python turlte rainbow

简易彩虹图python turlte rainbow

"""
   简易彩虹图
"""
from turtle import *

t = Turtle(shape='turtle')
t.speed(0)

screen =  Screen()
screen.bgcolor("cyan")
screen.title("简易彩虹图")

color_list = ["#FF0000","#FFA600","#FFFF00", "#62FF00",
              "#1E56FC","#4800FF","#CC00FF","#69C5FF"]

diameter=180

t.penup()
t.goto(0,-120)

for color in color_list:
  t.color(color)  
  t.begin_fill()
  t.circle(diameter)
  t.end_fill()
  diameter -= 10
  

 

发表在 python, turtle | python turtle 简易彩虹图已关闭评论

朝向四面八方的子弹类源代码

本程序设计了一个子弹类。运行后,子弹们会朝向四面八方射击。由于子弹是可重复使用的,所以程序并不会运行得越来越慢。

下面是部分代码预览:

"""
   朝向四面八方发射的子弹
"""
from turtle import *
from random import randint,choice

class Bullet(Turtle):
    """
       子弹类,继承自Turtle
    """
    def __init__(self,image,pos,direction):
        """
           初始化方法,image:gif图片,代表子弹图
           pos:初始坐标,heading:朝向,1或-1
        """
        Turtle.__init__(self,visible=False)
        self.penup()        
        if image in self.screen.getshapes():
            self.shape(image)            
        self.sw = self.screen.window_width()
        self.sh = self.screen.window_height()
        self.setposition(pos)     # 起始坐标
        self.direction = direction# 速度向量
        self.st()                 # 显示对象       
        
    def move(self):
        """不断移动直到边缘"""

         
if __name__ == '__main__':

    screen = Screen()
    screen.delay(0)
    image = 'images/bullet.gif'
    screen.addshape(image)
    d = list(range(-5,6))
    d.remove(0)
    print(d)
    .......
      
    

 

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

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

发表在 python, turtle | 朝向四面八方的子弹类源代码已关闭评论

python海龟画图制作的合金弹头主角

这是用Python的海龟画图turtle模块制作的一个角色,人物和背景取自合金弹头,角色可以跳,可以左右行走.

python海龟画图制作的合金弹头主角

python海龟画图制作的合金弹头主角


下面是部分代码预览:

"""
   合金弹头Macro角色
"""
from turtle import *

class Sprite(Turtle):
    """继承自Turtle类的角色"""
    def __init__(self,mr,ml):
        """
           mr:右造型序列表
           ml:左造型序列表
        """
        Turtle.__init__(self)
        self.penup()
        self.mr = mr         # 右造型序列
        self.ml = ml         # 左造型序列
        self.images = [mr,ml]# 造型列表
        self.shapes_index = 0# 默认为向右造型序列
        self.costume_index = 0
        self.set_costume()    # 设置造型
        self.screen.onkeypress(self.move_right,"Right")
        self.screen.onkeypress(self.move_left,"Left")
        self.screen.onkeypress(self.jump,"Up")
        self.screen.listen()
        self.dy = 0
        self.gravity()

def main():
    """主要函数"""
    width,height = 480,360
    screen = Screen()
    screen.title("海龟画图制作的合金弹头主角by lixingqiu")
    screen.bgpic("bg/07.png")
    screen.setup(width,height)
    .......................
    
    macro = Sprite(mr,ml)
    screen.update() 

    
if __name__ == "__main__":

    main()
    

 

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

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

发表在 python, turtle | python海龟画图制作的合金弹头主角已关闭评论

中途岛海战0.1版

python midway war中途岛海战0.1版

python midway war中途岛海战0.1版


中途岛海战是本人编写的一个飞机大战游戏。这个版本的敌机有三种阵形,一种是一字型阵列,一种是走8字型阵列,还有一种是走椭圆形阵列。这是最原始的版本,方便学习。vip会员扫码付款后,可向博主直接索取代码。 下面是部分代码预览:

"""
   中途岛海战2019年9月20号雏形程序,含三个阵列。
   这个版本是最基础的原形了,含有所有的模块,没有配音,没有封面,单人版本.
   雏形版本方便学习。vip会员可直接向博主索取源代码。   
"""
import pygame
from pygame.locals import *
from enemy0 import Enemy0
from enemy2 import Enemy2
from enemy8 import Enemy8
from player import * 
from player_bullet import *

def reden(image):
    """去掉绿色和蓝色,保留红色像素值"""
    image_3Darray = pygame.surfarray.array3d(image) # 转为矩阵
    image_3Darray[:,:,1:] = 0
    return pygame.surfarray.make_surface(image_3Darray)

def spawn_player_bullet(imgright,imgleft,imgup,screen,pbg,shoot_int,pos):
    """
       每隔一定时间产生玩家所射击的子弹
    """
    global frame_counter ,scatter_bullet_amounts 
    if frame_counter % shoot_int == 0 :        
        if scatter_bullet_amounts > 0 :
            scatter_bullet_amounts -= 2                
            pb2 = Player_Bullet(imgright,pos,(14,-14),screen)
            pb3 = Player_Bullet(imgleft,pos,(-14,-14),screen)               
            pbg.add(pb2)                   # 增加到子弹组
            pbg.add(pb3)                   # 增加到子弹组
        
        pb1 = Player_Bullet(imgup,pos,(0,-20),screen)
        pbg.add(pb1)                       # 增加到子弹组
    ...............................................
def main():
    """主要函数"""
    global frame_counter ,scatter_bullet_amounts,shoot_interval
    
    width,height = size = 960,720
        
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Python中途岛海战by李兴球")
    bg = pygame.image.load('images/海洋.png')    

    # 玩家飞机程序段
    player_images = ["player_images/Plane 1.png"]
    player_images.append("player_images/Plane 2.png")
    player_images.append("player_images/Plane 3.png")
    dead_images = ["player_images/Plane Explode.png"]
    dead_images.append("player_images/Death1.png")
    dead_images.append("player_images/Death2.png")
    dead_images.append("player_images/Death3.png")
    dead_images.append("player_images/Death4.png")
    dead_images.append("player_images/Death5.png")

    player_images = [pygame.image.load(im) for im in player_images]
    dead_images = [pygame.image.load(im) for im in dead_images]
    

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

发表在 pygame, python | 中途岛海战0.1版已关闭评论

画绿树_Python漂亮的二叉分形递归树

画绿树Python漂亮的二叉分形树递归

画绿树Python漂亮的二叉分形树递归


这是用python的海龟画图模块画的一颗绿树。下面是部分代码预览:

"""
   画绿树,本程序要用到coloradd模块,安装方法为在命令提示符下输入:
   pip install coloradd,它能让RGB 255三元组颜色进行增加,就像scratch中的颜色增加命令一样.
""""
   
from turtle import *
from coloradd import *

def draw_tree(t,n,distance):
    """画二叉树的函数"""
    if n > 0:
        t.fd(distance)
        t.left(45)
        draw_tree(t,n-1,distance-20)
        t.right(90)

screen = Screen()
screen.colormode(255)
screen.title("画绿树by www.lixingqiu.com")
screen.tracer(0)

t = Turtle(visible=False)
t.left(90)
t.bk(100)

color = (29,195,10)               # 起始颜色
width = 100
..................
screen.mainloop()

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

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

发表在 python, turtle | 画绿树_Python漂亮的二叉分形递归树已关闭评论

Python 2D双人乒乓球小游戏

Python 2D双人乒乓球小游戏

Python 2D双人乒乓球小游戏


用pygame模块制作的双人乒乓小游戏。在程序中有拍子类,有球类,有玩家类,有碰撞检测等等。下面是部分代码预览:

"""
   2D双人乒乓球小游戏
"""
__author__ = '李兴球'
__date__ = '2019年3月30日'

import random
import pygame
from pygame.locals import *

class Ball(pygame.sprite.Sprite):
    """球类,继承自Sprite类"""
    def __init__(self,image,screen):
        """image:球图"""
        
    def update(self):
        """更新小球的移动"""
    
    
class Bat(pygame.sprite.Sprite):
    """拍子类"""
        
class Player(pygame.sprite.Sprite):
    """玩家类"""
        
def collide_check(ball,bat_up,bat_down,player_up,player_down,scorefont):
    """球碰到球拍的碰撞检测"""
               
def game_over_check(ball,height,蓝方赢,红方赢):
    """游戏结束检测,球的速度会越来越快,小球超出上边界,则下方赢,反之上方赢"""
    global end_string,game_over
    .......................

def main():
    """主要函数"""
    global collide_delay_counter,game_over,end_string,up_score_string,down_score_string
    width,height = 500,800
    pygame.init()
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption("2D双人乒乓球小游戏")

    background = pygame.image.load("场地.png")

    Referee = pygame.image.load("cp.png")    # 裁判
    up_score_string = pygame.Surface((0,0))
    down_score_string = pygame.Surface((0,0))
    collide_delay_counter = 0                # 防止重复碰撞的变量    

    images_bat = "蓝拍右.png","红拍左.png"
    images_bat = [ pygame.image.load(image) for image in images_bat]    

    images_player = "人右.png","人左.png"
    images_player = [ pygame.image.load(image) for image in images_player]

    image_ball = pygame.image.load("ball2.png")
    # 生成球
    ball = Ball(image_ball,screen) 
    
    # 下玩家建立
    keys = [K_UP,K_DOWN,K_LEFT,K_RIGHT]
    position = (width//2,height-50)
    player_down = Player(images_player[0],keys,position)

    # 上玩家建立
    keys = [K_w,K_s,K_a,K_d]
    position = (width//2, 50)
    player_up = Player(images_player[1],keys,position)

    # 下拍子建立
    bat_down = Bat(images_bat[0],player_down,1)
    # 上拍子建立
    bat_up = Bat(images_bat[1],player_up,-1)         

    myfont = pygame.font.Font("msyh.ttf",32)
    scorefont = pygame.font.Font("msyh.ttf",22)
    蓝方赢 = myfont.render("蓝方赢",True,(5,0,255))
    红方赢 = myfont.render("红方赢",True,(205,0,5))
    end_string = ""
    game_over = False
    
    clock = pygame.time.Clock()
    running = True
    while running:
        if collide_delay_counter>0:collide_delay_counter-=1
        for event in pygame.event.get():
            if event.type == QUIT:running = False
        player_down.key_detect()
        player_down.update()
        player_up.key_detect()
        player_up.update()

        bat_down.update()
        bat_up.update()
        ball.update()        
        
        collide_check(ball,bat_up,bat_down,player_up,player_down,scorefont)
        game_over_check(ball,height,蓝方赢,红方赢)
        
        screen.blit(background,(0,0))
        screen.blit(player_down.image,player_down.rect)
        screen.blit(player_up.image,player_up.rect)
        screen.blit(bat_down.image,bat_down.rect)
        screen.blit(bat_up.image,bat_up.rect)
        if not game_over: screen.blit(ball.image,ball.rect)
        .......................
            
        screen.blit(up_score_string,(25,30))
        screen.blit(down_score_string,(width-50,height-60))        
        pygame.display.update()
        clock.tick(60)

    pygame.quit()
            
if __name__ == "__main__":
    
        main()

    

 

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

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

发表在 pygame, python | Python 2D双人乒乓球小游戏已关闭评论

中途岛海战向下滚动背景类

中途岛海是本人编写的一个飞机大战游戏。这是向下滚动的背景类,以供给有需要的朋友。

python midway scrollbackground向下滚动背景

python midway scrollbackground向下滚动背景

下面是部分代码预览:

"""
   向下滚动的背景
"""
__author__ = '李兴球'
__date__ = '2019/9/16'

import pygame
from pygame.locals import *

class ScrollBackground:
    """滚动的背景"""

    def __init__(self,image,screen):
        """image:背景图,screen:屏幕"""
        self.screen = screen
        self.sh  = screen.get_height()
        self.image0 = image
        self.image1 = image.copy()
        print(id(self.image0),id(self.image1))
        self.rect0 = self.image0.get_rect(topleft=(0,0))
        self.rect1 = self.image1.get_rect(bottomleft=(0,0))        
        self.dy = 10
        
    def update(self):
        """更新坐标"""
        self.rect0.move_ip(0,self.dy)
        if self.rect0.top >= self.sh : self.rect0.bottom = 0
        self.rect1.move_ip(0,self.dy)
        if self.rect1.top >= self.sh : self.rect1.bottom = 0

    def draw(self):
        self.screen.blit(self.image0,self.rect0)
        self.screen.blit(self.image1,self.rect1)
main():
    """主要函数"""
    bg = 'images/海洋.png'    
    width,height = size = 960,720
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("中途岛海战向下滚动背景测试程序by李兴球")
    bg_image = pygame.image.load(bg)
    
    scrbg = ScrollBackground(bg_image,screen)
    clock = pygame.time.Clock()
    
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False

        scrbg.update()

        screen.fill((0,120,172))
        scrbg.draw()
        pygame.display.update()
        clock.tick(60)
        
    pygame.quit()
    
if __name__ == "__main__":
    
    main()   

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

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

发表在 pygame, python | 中途岛海战向下滚动背景类已关闭评论

重复文件移除模块

"""
   重复文件移除器,  根据md5值删除重复文件
   根据每个文件md5值的唯一性,删除相同的文件。
   程序运行过程,获取文件的md5值,把它放到集合里。
   如果新的md5值在集合里,则把这文件删除。"""

import os
import hashlib

def getHash(filename):   
    try:
        f1=open(filename,'rb')
        line=f1.readline()  
        hash=hashlib.md5()  
        while(line):  
            hash.update(line)  
            line=f1.readline()  
        return hash.hexdigest()
    except:        
        return "error"

def remove_repeat_file(path):
    '''移除path路径下面所有的重复文件'''
    md5set = set()
    for item in os.walk(path):        #返回的是三元组
        for eachfile in item[2]:
            filename = item[0] + os.sep + eachfile
            md5=getHash(filename)
            if md5 == 'error' :
                print('读取',filename,'md5值发生错误')
                continue
            if md5 in md5set:            
                os.remove(filename)
            else:
                md5set.add(md5)

if __name__ == "__main__":

    path = 'c:/test'
    remove_repeat_file(path)

 

发表在 python | 重复文件移除模块已关闭评论

中途岛海战Boss发射一拔子弹类的设计

这是本人设计的中途岛海战飞机大战游戏的Boss发射子弹模块,供给单独需要的人。

python midway boss bullet

python midway boss bullet


下面是部分代码预览:

"""
   中途岛海战大boss发射的子弹类设计,
   游戏中最后的boss会不定时的发射一序列大颗粒子弹。
   
"""
__author__ = "李兴球"
__date__ = "2019/9/13"

import time
import pygame
from pygame.locals import *
from random import *

class Boss_Bullet(pygame.sprite.Sprite):
    """boss发射的子弹"""
    def __init__(self,image,pos,screen):
        """
           image:子弹造型,pos:起始坐标
        """
      

    def update(self):
        """更新"""

def spawn_boss_bullet():
    """产生一些子弹"""
    global bbcounter,bbg
    bbcounter += + 1

if __name__ == '__main__':

    width,height = 960,720
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption("中途岛海战Boss发射一拔子弹测试")
    boss_bullet_image = pygame.image.load('boss_images/boss_bullet.png').convert_alpha()

    bbg = pygame.sprite.Group()
    clock = pygame.time.Clock()
    bbcounter = 0
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
        spawn_boss_bullet()
        bbg.update()
        screen.fill((0,31,43))
        bbg.draw(screen)
        pygame.display.update()
        clock.tick(60)
        
    pygame.quit()   

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

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

发表在 pygame, python | 中途岛海战Boss发射一拔子弹类的设计已关闭评论

中途岛海战大BOSS类设计

这是本人设计的飞机大战中途岛海战的BOSS类。供给单独需要的人。
中途岛海战midway war Boss class design 下面是部分代码预览:

"""
   中途岛海战大BOSS类设计,
   游戏中最后的boss是一架特大的飞机。它会不断地发射大颗粒子弹。
   当它的生命值降到一定的时候,会起火,最后爆炸。
"""
__author__ = "李兴球"
__date__ = "2019/9/13"

import time
import pygame
from pygame.locals import *
from random import * 

class Boss(pygame.sprite.Sprite):
    """继承自角色类的Boss类,在游戏中,它只有一个,
       所以让它属于pygame.sprite.GroupSingle组。
    """
    def __init__(self,image,explosion_images,screen):
        """
           image:造型,explosion_images:爆炸序列,screen:屏幕
        """
        pygame.sprite.Sprite.__init__(self)
        self.sw = screen.get_width()
        self.sh = screen.get_height()
        self._position = self.sw//2,self.sh//2     
        self.image = image
        self.rect = image.get_rect(center=self._position)
        # 以下是爆炸造型属性
        self.explosion_index = 0
        self.explosion_images = explosion_images
        self.explosion_rects = [im.get_rect() for im in explosion_images]
        self.explosion_amounts = len(explosion_images)

    def bounce_on_edge(self):
        """碰到边缘就反弹"""
               
    def update(self):
        """更新BOSS"""


if __name__ == "__main__":

    width,height = 960,720
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption('中途岛海战Boss类设计程序by lixingqiu')
    
    boss_image = pygame.image.load("boss_images/bigboss.png").convert_alpha()
    boss_ex_images = [ f"boss_images/explode_{i}.png" for i in range(25)]
    boss_ex_images = [pygame.image.load(im).convert_alpha() for im in boss_ex_images]

    boss = Boss(boss_image,boss_ex_images,screen)
    boss_group = pygame.sprite.GroupSingle()
    boss_group.add(boss)
    
    clock = pygame.time.Clock()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
            if event.type == KEYDOWN:
                boss.lives -= 1
                if boss.lives <= 0:
                    boss.update_interval = 0.2
                    boss.status = 'explosion'
        
        boss_group.update()

        screen.fill((40,60,80))
        boss_group.draw(screen)
        pygame.display.update()
        clock.tick(60)
        
    pygame.quit()        

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

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

发表在 pygame, python | 中途岛海战大BOSS类设计已关闭评论

中途岛海战大敌机类设计程序

这是本人开发的飞机大战中途岛海战里的rover漫游的大敌机模块。它有上升,攻击,下沉,IDLE状态。

下面是部分代码预览:

"""
   中途岛海战的敌机,送子弹与生命值的,
   这架敌机经常会在云下面,这时候,无法射击它。
   当它在云上面时,才能够被击中。
"""

__author__= '李兴球'
__date__ = '2019/9/12'

import time
import pygame
from pygame.locals import *
from random import *

class Enemy_rover(pygame.sprite.Sprite):
    """
       随机移动的敌机,有三种状态,当往上升的时候,大小越来越大。
       当在云上的时候这时可以被击中,被击时会显示另一个造型,
       当往下移的时候,越来越小。
    """
    def __init__(self,images,hurt_image,explosion_images,screen):
        """
          images:从小到大的造型列表,
          hurt_image:被击中时的造型,
          explosion_images:爆炸时的造型列表,
          screen:所在屏幕
        """
        pygame.sprite.Sprite.__init__(self)
        # 爆炸造型列表
        self.explosion_images = explosion_images
        self.explosion_rects = [im.get_rect() for im in explosion_images]
        self.explosion_amounts = len(explosion_images)
        # 被攻击时的造型 
        self.hurt_image = hurt_image
        self.hurt_rect = hurt_image.get_rect()
          
    def set_costume(self):
        """设置造型"""

    def bounce_on_edge(self):
        """碰到边缘就反弹"""
    
    def update_status(self):
        """根据状态来更新造型等"""
            
    def update(self):
        """更新状态,造型与位置"""

                
if __name__ == "__main__":

    width,height = 960,720
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption("中途岛海战大敌机测试程序 by lixginqiu")
    
    .........................
    
    clock = pygame.time.Clock()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
            if event.type == KEYDOWN: rover.attacking = True
            if event.type == KEYUP:rover.attacking=False

        rover_group.update()

        screen.fill((0,0,0))
        rover_group.draw(screen)

        pygame.display.update()
    pygame.quit()        

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

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

发表在 pygame, python | 中途岛海战大敌机类设计程序已关闭评论

2019年9月12日版中途岛海战淡入淡出的云彩类程序

这是本人编写的中途岛海战的淡入淡出的云彩类模块。供给有需要的人士。下面是部分代码预览:

python midway war fade in fade out cloud

python midway war fade in fade out cloud

"""
   中途岛海战淡入淡出的云彩类程序
"""

__author__ = "李兴球"
__date__ = "2019/9/12"

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

class Cloud(pygame.sprite.Sprite):
    """从上到下移动淡入淡出的云彩类"""
    def __init__(self,images,screen):
        """
           images:越来越透明的每像素图形,screen:屏幕
        """
        pygame.sprite.Sprite.__init__(self)
        self.images = images
        self.amounts = len(images)  # 造型数量
        self.sw = screen.get_width()
        self.sh = screen.get_height()
        self.index = 0
        self.image = images[0]      # 最透明的图
        self.rect = self.image.get_rect()
        self.rect.centerx = randint(0,self.sw)
        self.rect.bottom = 0

    def update(self):
        """更新坐标与造型"""


def load_cloud_images(image,n):
    """加载云图片
       image:图像文件,n:数量
    """
    image = pygame.image.load(image).convert_alpha() 
    images = [image.copy() for _ in range(n)]
    
    # alphas是存储每张图片的透明通道的列表
    alphas = [pygame.surfarray.pixels_alpha(image) for image in images]    
    .................................
    
def main():

    width,height = 960,720
    
    screen = pygame.display.set_mode((width,height),0,32)

    images = load_cloud_images('images/Cloud2.png')
    cloud = Cloud(images,screen)
    cloud_group = pygame.sprite.Group()

    pygame.time.set_timer(USEREVENT,1000) # 1秒产生一片云朵
    clock = pygame.time.Clock()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
            if event.type == USEREVENT:
                cloud_group.add(Cloud(images,screen))
                
        cloud_group.update()
        
        screen.fill((90,120,0))
        cloud_group.draw(screen)
        
        pygame.display.update()
        clock.tick(60)
    pygame.quit()

if __name__== "__main__":

    main()  

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

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

发表在 pygame, python | 2019年9月12日版中途岛海战淡入淡出的云彩类程序已关闭评论

python低通滤波器图像模糊处理_防盗印图像处理测试程序

"""低通滤波器图像模糊处理_防盗印图像处理测试程序,由于pillow的高斯模糊无法满足要求,所以用opencv"""

import cv2,os 
import numpy as np
from matplotlib import pyplot as plt

path = 'C:\\Users\\Administrator\\Desktop\\images'
imagefile = path + os.sep + "001.jpg"  # I 不支持中文路径和png图

img = cv2.imread(imagefile)

dst = cv2.blur(img,(2,2))             # 低通滤波器糊模处理

# 以jpeg50质量保存为测试图
cv2.imwrite('c:/test.jpg',dst,[int(cv2.IMWRITE_JPEG_QUALITY),50])

'''
plt.subplot(121),plt.imshow(img,cmap='gray'),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(dst,cmap='gray'),plt.title('Averaging')
plt.xticks([]),plt.yticks([])
plt.show()
'''

附pillow的Box模糊图片处理程序:

from PIL import Image, ImageFilter
import os


path = 'C:\\Users\\Administrator\\Desktop\\images'
imagefile = path + os.sep + "图001.png"

img = Image.open(imagefile).filter(ImageFilter.BoxBlur)
img.save("C:/test.png")

 

发表在 pillow, python | python低通滤波器图像模糊处理_防盗印图像处理测试程序已关闭评论

2019/9/9版的PixelArray类研究与map_rgb及unmap_rgb测试程序

"""
   pygame像素直接访问类PxielArray类研究程序
"""

__author__ = "李兴球"
__date__ = "2019/9/9"

import pygame

image = pygame.image.load('images/test.png')

screen = pygame.display.set_mode(image.get_size(),0,32)
image = image.convert_alpha()
print(image.unmap_rgb(-65536))       # 红色
print(image.map_rgb((0, 0, 0, 255))) #  黑色
print(image.map_rgb((0, 0, 0, 0)))   #  透明黑色

print("_____________")

print(image.map_rgb((0, 0, 0, 16)))   #   黑色
print(image.map_rgb((0, 0, 0, 32)))   #   黑色
print(image.map_rgb((0, 0, 0, 48)))   #   黑色
print(image.map_rgb((0, 0, 0, 64)))   #   黑色
print(image.map_rgb((0, 0, 0, 80)))   #   黑色
print(image.map_rgb((0, 0, 0, 96)))   #   黑色
print(image.map_rgb((0, 0, 0, 112)))   #   黑色
print(image.map_rgb((0, 0, 0, 128)))   #   黑色
print(image.map_rgb((0, 0, 0, 144)))   #   黑色
print(image.map_rgb((0, 0, 0, 160)))   #   黑色
print(image.map_rgb((0, 0, 0, 176)))   #   黑色
print(image.map_rgb((0, 0, 0, 192)))   #   黑色
print(image.map_rgb((0, 0, 0, 208)))   #   黑色
print(image.map_rgb((0, 0, 0, 224)))   #   黑色
print(image.map_rgb((0, 0, 0, 240)))   #   黑色
print("_____________")


print(image.map_rgb((255, 255, 255, 255))) #  白色

pxarray = pygame.PixelArray(image)

pxarray.replace(-65536,-234)         # 把所有红色换成黄色
pxarray.replace(-16777216,-234)      # 把所有黑色换成黄色
pxarray.replace(-1,-234)             # 把所有白色换成黄色

# 如何改变全部黑色像素的透明度为0
pxarray.close()

screen.blit(image,(0,0))
pygame.display.update()
while not any(pygame.key.get_pressed()):
    pygame.event.pump()
    pygame.time.delay(100)
pygame.quit()

 

发表在 pygame, python | 2019/9/9版的PixelArray类研究与map_rgb及unmap_rgb测试程序已关闭评论

中途岛海战淡入淡出的云彩类测试程序

"""
   中途岛海战淡入淡出的云彩类测试程序,本程序还有待改进,留此版本以做纪念.
"""

__author__ = "李兴球"
__date__ = "2019/9/9"

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

class Cloud(pygame.sprite.Sprite):
    """从上到下移动淡入淡出的云彩类"""
    def __init__(self,images,screen):
        """
           images:越来越透明的每像素图形,screen:屏幕
        """
        pygame.sprite.Sprite.__init__(self)
        self.images = images
        self.amounts = len(images)  # 造型数量
        self.sw = screen.get_width()
        self.sh = screen.get_height()
        self.index = 0
        self.image = images[0]      # 最透明的图
        self.rect = self.image.get_rect()
        self.rect.centerx = randint(0,self.sw)
        self.rect.bottom = 0

    def update(self):
        """更新坐标与造型"""
        self.rect.move_ip(0,1)
        if self.rect.centery < self.sh: # 没到最下边
            if self.index < self.amounts-1:
                self.index += 1
                self.image = self.images[self.index]
        
        else:
            if  self.index > 0:
                self.index -= 1
                self.image = self.images[self.index]
            else:
                self.kill()
        
def main():

    width,height = 960,720
    
    screen = pygame.display.set_mode((width,height),0,32)
    
    image = pygame.image.load('images/Cloud2.png').convert_alpha()
 
    images = [image.copy() for _ in range(16)]

    alphas = [pygame.surfarray.pixels_alpha(image) for image in images]    
    
    for index in range(0,16):
        print(index * 16)
        alphas[index][:] = index * 16
    del alphas

    for image in images:
        pxarray = pygame.PixelArray(image)
        pxarray.replace(268435456,0)
        pxarray.replace(536870912,0)
        pxarray.replace(805306368,0)
        pxarray.replace(1073741824,0)
        pxarray.replace(1342177280,0)
        pxarray.replace(1610612736,0)
        pxarray.replace(1879048192,0)
        pxarray.replace(-2147483648,0)
        pxarray.replace(-1879048192,0)
        pxarray.replace(-1610612736,0)
        pxarray.replace(-1342177280,0)
        pxarray.replace(-1073741824,0)
        pxarray.replace(-805306368,0)
        pxarray.replace(-536870912,0)
        pxarray.replace(-268435456,0)
        pxarray.close()

    cloud = Cloud(images,screen)
    cloud_group = pygame.sprite.Group()

    pygame.time.set_timer(USEREVENT,1000) # 1秒产生一片云朵
    clock = pygame.time.Clock()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
            if event.type == USEREVENT:
                cloud_group.add(Cloud(images,screen))
                
        cloud_group.update()
        
        screen.fill((90,120,0))
        cloud_group.draw(screen)
        
        pygame.display.update()
        clock.tick(60)
    pygame.quit()

if __name__== "__main__":

    main()






        

 

发表在 pygame, python | 中途岛海战淡入淡出的云彩类测试程序已关闭评论

简易的音乐播放模块,使用pygame

"""
   简易的音乐播放模块,使用pygame
"""

import os
try:
    import pygame
    pygame.mixer.init()
except:
    pass

def playmusic(filename,times=-1):
    """音乐文件名与播放次数,-1表示重复播放"""
    if os.path.exists(filename):
        try:
            pygame.mixer.music.load(filename)
            pygame.mixer.music.play(times,0)
        except:
            print("同学你好,音乐文件格式无法识别哦。")
            print(filename)
    else:
        print("同学你好,音乐文件没找到呢 :-) ")
         
            

if __name__ == "__main__":

    playmusic("背景音乐.WAV",1)

 

发表在 pygame, python | 简易的音乐播放模块,使用pygame已关闭评论

python看图编程序练习_简易海龟画图形

from turtle import *

screen = Screen()
screen.delay(0)
 
t = Turtle(visible=False)
t.pensize(2)
t.color("white")

t.dot(200,'green')

t.dot(50,'red')

for i in range(12):
    t.penup()
    t.fd(25)
    t.pendown()
    t.fd(75)
    t.penup()
    t.bk(100)
    t.right(30)

 

发表在 python, turtle | python看图编程序练习_简易海龟画图形已关闭评论

历史档案:2015年我写的:《星空培训少儿编程课程提纲草稿》

星空培训少儿编程课程提纲草稿

 

定位:大众化计算机编程教育。

课程安排:仿效英国编码俱乐部以阶段来化分。目前分为七个队。

1、幼猫队:编程启蒙,丰富多彩的编程教育游戏,ScatchJr编程等,7、8岁。

2、小猫队:Scratch初级,Scatch编程绘画,小动画/小游戏,9-10岁。

3、花猫队:Scratch中级,游戏/动画/创意绘画/数学算法入门,   11岁+。

4、啄木鸟队:计算机综合:主要练习英文打字,常用软件/搜索/安全等,10岁+。

5、蜘蛛队:网页制作,HTML,CSS,11岁+,英文打字基础。

6、蟒蛇队:Python入门,12岁+,英文打字基础。

7、雄鹰队:Visual Basic6入门,12岁+,英文打字基础。

1、2、3、4为零基础可以学习, 5、6、7需先学习英文打字。

常用编程语言或编程教育软件简介:

1、Scratch:美国麻省理工学院的搭积木式儿童编程语言。

2、Visua Basic 6:经典入门计算机语言,国内中学正在教的。

3、编程机器人:寓教于乐的编程教育软件,采用符号编写算法,指挥机器人闯关。

4、Pragmatica坦克编程:采用符号算法,指挥坦克闯关。

5、机器谜题:采用符号语言编写算法,让主角遍历完整个路径。

6、代码猴子:编写算法让猴子吃到香蕉的一个在线编程启蒙网站。

7、冰雪奇缘: 全球编程一小时里采用Blockly进行编程启蒙的网站。

8、The foos:5岁儿童编程教育游戏,在玩中体验编程基本概念。

9、Kodu:微软公司娃娃编程语言,让孩子在3D世界里创造游戏。

10、Python:美国主流大学计算机入门编程语言,简单强大优雅。

 

发表在 杂谈 | 历史档案:2015年我写的:《星空培训少儿编程课程提纲草稿》已关闭评论

python写mp3文件的一个程序

"""
   写mp3文件的一个程序,本程序于2015年5月编写,现在发到博客以肆读者。
   
"""

__author__ = '李兴球'
__date__ = '2015年5月'

import os
def setMp3Header(mp3file):
     mp3Id3V1 = {        
         "SongName":125,
         "SongPeople":95,
         "ZhuanJi":65,
         "Year":35,
         "Bak":31
         }
     tags = ['SongName','SongPeople','ZhuanJi','Bak']
     f = open(mp3file,'r+')
     filesize=os.path.getsize(mp3file)
     try:
         f.seek(filesize-128)
         try:
             tempstr = f.read(3)
             print(tempstr)
             if tempstr == 'TAG':  #在MP3文件的倒数每128个字节是TAG标签,否则认为不是MP3
                 for tag,startPos in mp3Id3V1.items():
                     print("writeMp3Header['%s']=%s" % (tag,writeMp3Header[tag]))
                     if writeMp3Header[tag] != '':
                         f.seek(filesize-startPos)
                         if tag in tags:
                             if len(writeMp3Header[tag]) > 30: 
                                 f.write(writeMp3Header[tag][:30])
                             else:
                                 f.write(writeMp3Header[tag])
                         print(startPos,tag,writeMp3Header[tag])
             else:
                 print('is not a mp3file')
         except IOError:
             print('read error')
     finally:
         f.close()


#定义字典
writeMp3Header = {
     "SongName":"",
     "SongPeople":"",
     "ZhuanJi":"",
     "Year":"",
     "Bak":""
     }

writeMp3Header['SongName'] = 'testsongname'
writeMp3Header['SongPeople'] = 'lixingqiu'
writeMp3Header['ZhuanJi'] = 'zhuangji'
writeMp3Header['Year'] = '2015'
writeMp3Header['Bak'] = 'www.scratch8.net'
setMp3Header(r'D:\CrazyFrogPlayTheGame.mp3')

 

发表在 python | python写mp3文件的一个程序已关闭评论

RawTurtle类测试程序

"""
   RawTurtle类测试程序
"""

from turtle import TurtleScreen, RawTurtle, TK

root = TK.Tk()   # 新建根窗口

canvas1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
canvas1.pack()

screen = TurtleScreen(canvas1)
龟1 = RawTurtle(screen)
for i in range(4):
    龟1.fd(100)
    龟1.right(90)

root.mainloop()

 

发表在 python, turtle | RawTurtle类测试程序已关闭评论

tkinter入门简易动画之左右摇摆的图片

"""
   tkinter入门动画之左右摇摆的图片
"""

from tkinter import *
import time

window = Tk()
window.title("风火轮编程")

canvas = Canvas(window,width=800,height=800)
canvas.pack()

image1 = PhotoImage(name='i1',file="彩色十字架.gif")
imageid = canvas.create_image(00,00,anchor='nw',image=image1)

print("id=",image1  .name)


while True:
    for i in range(10):
        canvas.move(imageid,10,0)
        window.update()
        time.sleep(0.1)
    time.sleep(1)
    for i in range(10):
        canvas.move(imageid,-10,0)
        window.update()
        time.sleep(0.1)
    time.sleep(1)

 

发表在 python, tkinter | tkinter入门简易动画之左右摇摆的图片已关闭评论

splitlist分隔与列表拆分

"""
   列表拆分示例程序,这个程序可以按数量拆分列表
"""

def splitlist(biglist,number):
    """number是要分成的份数"""
    retlist=[]
    listlen=len(biglist)
    everyamounts=listlen//number
    slicelist=[]
    for i in range(number):
        start=i*everyamounts
        end=(i+1)*everyamounts
        if i==(number-1):          #加这句是让最后的列表把剩余的也包括进去。
            end=listlen
        slicelist=biglist[start:end]
        retlist.append(slicelist)
    return retlist

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

发表在 python | splitlist分隔与列表拆分已关闭评论

校验电子信箱地址电子邮件email正则表达式

"""
   校验电子信箱地址电子邮件email正则表达式
"""
import re

s=""" 以下是测试的数据,风火轮编程招聘兼职教师: 主要工作内容:培训儿童编程, 要求: 懂scratch,懂Python,有教师资格证最好,幼师也可以. 工资:8000-10000,联系电子信箱: 406273900@qq.com 联系电话:13810703250 其它:email: shen zhen@sina.com 123.com@163.com.qq """

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

发表在 python | 校验电子信箱地址电子邮件email正则表达式已关闭评论

当你失去它的时候,你才会有重大感悟

当你在行走时,你可能不知道在百米或千米之外有人正在通过远程高清探头收集你的活体信息,包括走路的姿势,眨眼,摇头,说话张嘴等各种信息,然后贩卖给某某公司。
这用途就大了,听说黑客几分钟就能克隆手机SIM卡,通过黑客社会工程学猜出你的密码,所以你的钱财可能分分钟被盗掉。

当你用百度搜索某关键词时,这个关键词可能被撰改为其它词语,然后百度服务器接收的是这个被撰改后的词语,返回的这个词的搜索结果又被撰改回看起来较正常的结果。
这并不是什么难事,用 python 加一个模块mitmproxy 即可完成。mitmproxy 译为中间人代理工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求,引发服务端或客户端特定的行为。

类似的原理可以应用在微信转账,如当你要转账100元时,这100只是个数字,这个数字在没有被加密前即可被木马截获取并撰改,然后发送给腾讯服务器,腾讯服务器收到的信息可能是要转账
1000元,然后就扣了1000元。

并不需要很高超的编程技巧,设计一个自动执行程序,安装在手机里,平时会记录你各种操作的密码。在某天晚上,你没有关机,这个自动执行程序就会偷偷运行,打开微信,模拟人的操作,自动转账
。这也是可以用Python编程完成的,难点只是在于如何把这个程序安装在别人手机里。

当你的手机功能越多,在里面存的钱越多,意味着对你越发重要,这种集中式管理一方面是好事,另一方面却是坏事。只有当你失去它的时候,你才会有重大感悟。

发表在 杂谈 | 当你失去它的时候,你才会有重大感悟已关闭评论

pygame精准每像素透明度淡入效果研究

"""
   pygame精准每像素透明度淡入效果研究
"""

__author__ = "李兴球"
__date__ = "2019/8/31"

import pygame

image = pygame.image.load('images/test.png')
screen = pygame.display.set_mode(image.get_size(),0,32)
image = image.convert_alpha()
images = [image.copy() for _ in range(32)]

alphas = [pygame.surfarray.pixels_alpha(image) for image in images]

for index in range(0,32):
    alphas[index][:] = index * 8

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

发表在 pygame, python | pygame精准每像素透明度淡入效果研究已关闭评论

pygame的8位深图图与调色板研究

"""
   pygame的8位深图图与调色板研究
   pygame.surfarray.make_surface能转换一个2D阵列到一个8位深的表面。
   如果是3D阵列,那么就转换为32位深的表面。

   位深代表能显示的颜色数量,8位深的图能显示265种颜色。这个时候的数值是从0到255,
   但0到255的数值不代表一种颜色,而是代表一种颜色的索引号。
   Pygame不会存储具体的RGBA三元组值在内存中,而是存储一个整数。
   如果是大于8位深的图,那么这个整数可以解码成具体的RGBA值。
   如果是8位深的图,通过内置的调色板让每个整数对应一个RGBA值,
   这个调色板能通过surface.get_palette()获取,也可以通过命令
   surface.set_palette()设置调色板。       

"""

import pygame

width,height = 200,200

screen = pygame.display.set_mode((width,height))

# 8位深只支持256种颜色,下面把从0到99行列的像素设为:128,122,0这种颜色
# 而实际显示的是170,109,0这种调色板上的颜色
s = pygame.Surface((width,height),depth=8)
for x in range(100):
    for y in range(100):
        s.set_at((x,y),(128,122,0,255))
print("8位深的调色板",s.get_palette())
screen.blit(s,(0,0))

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

发表在 pygame, python | pygame的8位深图图与调色板研究已关闭评论

平铺图像与8位图mask做alpha透明度示例

"""
    平铺图像与8位图mask做alpha透明度示例
"""

__author__ = "李兴球"
__date__ = "2019/8/30"

import random
import pygame

def tile_texture(texture, size):
    """texture:图像,作为纹理,size:尺寸,要比texture大"""
    result = pygame.Surface(size, depth=32)
    for x in range(0, size[0], texture.get_width()):
        for y in range(0, size[1], texture.get_height()):
            result.blit(texture,(x,y))
    return result


def apply_alpha(texture, mask):
    """
    texture是24位或32位的图形,mask是有alpha的8位图
    """
    texture = texture.convert_alpha()
    target = pygame.surfarray.pixels_alpha(texture)
    
    target[:] = pygame.surfarray.array2d(mask) # 修改每个像素透明度
    # surfarray 会锁定图层,当工作完成后把target删除 
    del target
    return texture

def stamp(image, texture, mask):
    """在image上渲染带mask的texture"""
    image.fill((0,120,128))
    image.blit(apply_alpha(texture, mask), (0,0))

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

发表在 pygame, python | 平铺图像与8位图mask做alpha透明度示例已关闭评论

pygame每像素精准透明度测试程序pygame.surfarray.pixels_alpha例子

"""
   pygame精准透明度测试程序pygame.surfarray.pixels_alpha例子
   
"""

__author__ = "李兴球"
__date__ = "2019/8/30"

import pygame

image = pygame.image.load('images/test.png')
screen = pygame.display.set_mode(image.get_size(),0,32)
image = image.convert_alpha()

alpha = pygame.surfarray.pixels_alpha(image)
alpha[:] = 100    # 直接改变每个像素的透明度为100

print(alpha)
del alpha

print('每个像素的透明度已被改变!',image.get_at((10,10)))
screen.blit(image,(0,0))
pygame.display.flip()

# 以下为按任意键关闭pygame窗口
while not any(pygame.key.get_pressed()):
    pygame.event.pump()
    pygame.time.delay(100)
pygame.quit()

 

发表在 pygame, python | pygame每像素精准透明度测试程序pygame.surfarray.pixels_alpha例子已关闭评论

中途岛海战玩家子弹类测试程序

这是本人编写的飞机大战中途岛海战的玩家子弹类模块。供给单独需要的人。

python midway war player bullet

python midway war player bullet

下面是部分代码预览:

"""
   玩家的子弹类,子弹从飞机的坐标出发不断地向上移动,
   如果接到了散射道具,那么就能发散射子弹,即两边都能发子弹。
   
"""
__author__ = '李兴球'
__date__ = '2019/8/30'

import pygame
from pygame.locals import *

class Player_Bullet(pygame.sprite.Sprite):
    """
      玩家飞机的子弹类
    """
    def __init__(self,image,pos,speed,screen):
        """
          image:图形,pos:起始坐标,speed:速度向量,screen:所在屏幕
        """
        
            
def main():

    width,height = 960,720
    
    shot_image = pygame.image.load('images/Shot 1.png')
    shot_image_rightup = pygame.transform.rotate(shot_image,45)
    shot_image_up = pygame.transform.rotate(shot_image,90)
    shot_image_leftup = pygame.transform.rotate(shot_image,135)
    scatter_bullet_amounts = 100           # 初始有1千发散射子弹
    frames = 0               # 帧计数器
    shoot_interval = 60      # 子弹发射击的帧间隔
    pos = (width//2,height-100)

    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption('中途岛海战玩家子弹类测试程序by李兴球')

    player_bullet_group = pygame.sprite.Group()
    clock = pygame.time.Clock()
    running = True
    while running:
        frames += 1
        for event in pygame.event.get():
            if event.type == QUIT:running=False
            # 以下是仅测试用,按任意键加100发子弹
            if event.type == KEYDOWN:scatter_bullet_amounts+=10
            
        ......................
        
        player_bullet_group.update()
        screen.fill((0,0,0))
        player_bullet_group.draw(screen)
        pygame.display.update()
    pygame.quit()

if __name__== "__main__":

    main()  
    

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

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

发表在 pygame, python | 中途岛海战玩家子弹类测试程序已关闭评论

如何预防这种人类种族清洗计划的实施

未来,z国实现了无现金等诸多美好的愿景等等,然而m国却早已派出间谍通过应聘等诸多方式成功打入了z国某几个大公司内部,并成为这几个大公司的骨干力量。

某天m国要发大招了,只要轻轻松松指挥下间谍们,z国的社会即陷入全面瘫痪。人们这时才猛然发现,自己的支付与收款权早已被剥夺,导致无法购买粮食大米,更别谈坐交通工具了。

商场、娱乐场所等全部关门。由于通讯靠xG网络,导致政府也无法立即做出适当的反应。只得派民警城管们走上街头通过原始的办法,喊!来通知超市免费开放,让人们按次序免费领取生活必用品。

而高铁,自动驾驶或什么VR虚拟现实总之一切依赖xG网络的都失效,一下子交通事故大爆发而死人无数。远程教育全中断,街上的机器人全部倒下,无人机坠毁。远程医疗当然也会突然中断,正在实施
远程手术的人有的就马上死去了。由于那个时候的衣服自带恒温系统,失去xG网络的衣服当然这个功能也就失效了,导致很多人冻死(假设发生在冬天)。相当多的人大脑植入了纳米芯片,由于无法联接
到网络,导致这些人的“思考能力,记忆能力”大大下降,几乎成为傻子。为什么呢?因为他们大脑内置的纳米芯片长期都在”帮”他们,导致大脑本身功能不断退化。结果就是连一个电话号码也记不住了
。100以内的加法也不会算了。 结果z国人傻,国乱,m国趁势秘密从月球基地派出无数纳米无人机,在z国人民睡觉时进行大脑人侵.一夜之间,z国人民全部不能起床。z国从此神秘消失,联合国就此问题经
过讨论,认可m国可暂时管理z国的土地,建立z国文化展览馆以留纪念……..

如果m国能从这次行动中以较小的损耗获取巨大利益,你说这有可能会发生吗? 请设计一个方案,如何预防这种人类种族清洗计划的实施。

发表在 杂谈 | 如何预防这种人类种族清洗计划的实施已关闭评论

中途岛海战玩家飞机类设计模块

这是本人编写的飞机大战中途岛海战的玩家所操控的飞机类之模块。以供给有需要的人士。

python midway war player plane

python midway war player plane


下面是部分代码预览:

"""
   中途岛海战玩家飞机类设计测试程序,飞机会不断地切换飞翔时的造型,按上下左右键操作飞机,
   这里测试按空格键,它会爆炸,依次显示坠毁和爆炸的造型.
"""
import time
import pygame
from pygame.locals import *
'''
class _Death(pygame.sprite.Sprite):
    本类已废,留做读者查阅
    """玩家操作的飞机爆毁时切换造型类,继承自Sprite"""
    def __init__(self,deadimages,pos):
        pygame.sprite.Sprite.__init__(self)
        self.index = 0              # 造型索引号
        self.images = deadimages
        self.image = images[0]      # 第一个造型
        self.amounts = len(images)  # 造型数量
        self.interval = 0.1         # 造型切换间隔时间       
        self.start_time = time.time()
        
    def update(self):
        """更新,时间到了就换造型,造型换完了就kill"""
        if time.time() - self.start_time > self.interval:
            if self.index < self.amounts:
                self.image = self.images[self.index]
                self.index += 1
                self.start_time = time.time()
            else:
                self.kill()
'''                
class Player(pygame.sprite.Sprite):
    """玩家操作的飞机类,继承自Sprite"""
    def __init__(self,images,deadimages,pos,keys):
        pygame.sprite.Sprite.__init__(self)
        self.index = 0              # 造型索引号
        self.images = images
        self.image = images[0]      # 第一个造型
    
    def alt_death_costume(self):        
        """时间到了就轮换队毁时的造型"""
        
    def alt_costume(self):        
        """时间到了就轮换造型"""
            
    def keys_check(self):
        """ 按键检测 """      
        
    def update(self):
        """更新飞机"""

def main():
    player_images = ["player_images/Plane 1.png"]
    player_images.append("player_images/Plane 2.png")
    player_images.append("player_images/Plane 3.png")
    dead_images = ["player_images/Plane Explode.png"]
    dead_images.append("player_images/Death1.png")
    dead_images.append("player_images/Death2.png")
    dead_images.append("player_images/Death3.png")
    dead_images.append("player_images/Death4.png")
    dead_images.append("player_images/Death5.png")

    player_images = [pygame.image.load(im) for im in player_images]
    dead_images = [pygame.image.load(im) for im in dead_images]
    
    width,height = 960,720
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption("中途岛海战玩家飞机类设计测试程序by李兴球")
     
    player_group = pygame.sprite.Group()
    death_group = pygame.sprite.Group()
    
    ks = [K_UP,K_DOWN,K_LEFT,K_RIGHT]
    pos = width//2,height-100
    p = player_images,dead_images,pos,ks
    p1 = Player(*p)
    player_group.add(p1)
    
    clock = pygame.time.Clock()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running = False
        player_group.update()
        screen.fill((0,0,0))
        player_group.draw(screen)
        pygame.display.update()
        clock.tick(60)
    pygame.quit()

if __name__ == "__main__":

    main()          
        

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

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

发表在 pygame, python | 中途岛海战玩家飞机类设计模块已关闭评论

pygame和numpy演示灰度算法测试示例_gray example

"""
   pygame和numpy演示灰度算法测试示例,本程序会显示一幅彩色图,2秒后它会变成灰度图,演示了用numpy进行灰度图像处理的基本原理.pygame仅是用来显示的,.
"""
import pygame
import numpy as np
from time import sleep


'''仅测试的数据
x = np.array([[[32,76,8],[77,66,99],[12,133,32]],
        [[125,66,32],[81,12,56],[23,53,211]],
        [[5,6,12],[41,112,156],[68,63,35]]])
# 转为图像
image = pygame.surfarray.make_surface(x)
'''

# 加载图像
image = pygame.image.load("兰喂芝.png")
width,height = image.get_size()
x = pygame.surfarray.array3d(image)
print(x.shape)
screen = pygame.display.set_mode((width,height))
screen.blit(image,(0,0))
pygame.display.update()

sleep(2)

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

发表在 pygame, python | pygame和numpy演示灰度算法测试示例_gray example已关闭评论

中途岛海战敌机发射的子弹类模块

这是本人编写的飞机大战中途岛海战的敌机发射的子弹类之模块。以供给有需要的人士。

下面是部分代码预览:

"""
   中途岛海战敌机发射的子弹类
   本程序新建敌机子弹类,子弹有一个目的地,
   它实例化后会朝目的地不断地移动。
"""
import math
import pygame
from pygame.locals import *
from random import randint

class Enemy_Bullet(pygame.sprite.Sprite):
    """
       敌机子弹类      
    """
    def __init__(self,image,pos,dest,screen):
        """
           image:图形,pos:初始坐标,dest:目标,screen:屏幕
        """       

    def update(self):
        """更新"""

def main():
    """主要函数"""
    bg = 'images/海洋.png'
    image = "images/Shot.png"
    width,height = size = 960,720
    center = width//2,height//2
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("中途岛海战敌机发射的子弹类by lixingqiu")
    bg = pygame.image.load(bg)

    # 下面准备把图像缩小
    image = pygame.image.load(image)
    w,h = image.get_size()
    image = pygame.transform.scale(image,(w//2,h//2))
    enemy_bullet_group = pygame.sprite.Group() # 新建敌人组

    pygame.time.set_timer(USEREVENT,100) # 设置自定义事件定时器
    clock = pygame.time.Clock()

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running=False            
            if event.type == USEREVENT:
                x = randint(0,width)
                y = randint(0,height)
                p = image,(x,y),center,screen
                enemy_bullet_group.add(Enemy_Bullet(*p))                
                info = '当前子弹数:'+ str(len(enemy_bullet_group))
                info = info + ',中途岛海战敌机发射的子弹类by lixingqiu'
                pygame.display.set_caption(info)       

        enemy_bullet_group.update()
        screen.blit(bg,(0,0))          # 渲染背景
        enemy_bullet_group.draw(screen)# 画每个子弹
        pygame.display.update()        # 更新显示
        clock.tick(60)
        
    pygame.quit()

if __name__ == "__main__":

    main()

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

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

发表在 pygame, python | 中途岛海战敌机发射的子弹类模块已关闭评论

中途岛海战8字飞行阵列测试模块

这是本人编写的飞机大战中途岛海战的玩家所操控的敌机8字型阵列模块。以供给有需要的人士。

python midway war enemy8 array

python midway war enemy8 array


下面是部分代码预览:

"""
   中途岛海战敌机的八字飞行阵列,
   本程序新建敌机类,然后让敌机绕着画8的轨迹不断地移动。
"""
import math
import pygame
from pygame.locals import *

class Enemy8(pygame.sprite.Sprite):
    """
       绕8字飞行的敌机类       
    """
    amounts = 100                    # 出动的数量
    counter = 0                      # 计数器
    end = False
    def __init__(self,image,pos):
        """
           image:图形,pos:初始坐标
        """
        pygame.sprite.Sprite.__init__(self)
        # 由于图像为向上,把它转为向右朝向的造型,以便
        # 和它默认的朝向在视觉上一致
        self.rawimage = pygame.transform.rotate(image,-90)        
        self._angle = 180        # 和x轴的夹角
        self.rotate_image()
        self.rect = self.image.get_rect(center=pos)        
        self.frame_counter = 0
        Enemy8.counter += 1      # 统计敌机数目
        
    def setheading(self,angle):
        """设置和x轴的夹角,相当于方向"""
        
    def right(self,da):
        """向右旋转da度"""
        
    def left(self,da):
        """向左旋转da度"""
        
    def rotate_image(self):
        """根据和x轴的角度旋转图形"""

 
    def fd(self,distance):
        """朝当前方向移动一定的距离"""

    def update(self):
        """更新"""


def main():
    """主要函数"""
    bg = 'images/海洋.png'
    image = "images/Raven_128x128_red.png"
    width,height = size = 960,720
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("中途岛海战八字飞行阵列by lixingqiu")
    bg = pygame.image.load(bg)
    
    # 下面准备把图像缩小
    image = pygame.image.load(image)
    w,h = image.get_size()
    image = pygame.transform.scale(image,(w//3,h//3))
    group = pygame.sprite.Group()

    pygame.time.set_timer(USEREVENT,200) # 设置自定义事件定时器
    clock = pygame.time.Clock()
    Enemy = Enemy8
    p = image,(width//2,100)
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:running=False
            if Enemy.counter < Enemy.amounts:
               if event.type == USEREVENT:
                  group.add(Enemy(*p))                     
        group.update()
        screen.blit(bg,(0,0))       # 渲染背景
        group.draw(screen)          # 画每架飞机
        pygame.display.update()     # 更新显示
        clock.tick(60)
        
    pygame.quit()

if __name__ == "__main__":

    main()

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

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

发表在 pygame, python | 中途岛海战8字飞行阵列测试模块已关闭评论

中途岛海战扫荡敌机的棍子类

当“棍子“碰到了敌机,那么敌机就会发射了枚子弹。这就是”棍子“类存在的意义。

"""
   棍子类,它会在屏幕上不断地扫荡,
   在游戏中,它是不会渲染的,这里为了看到效果,所以blit了它.
"""
import pygame
from pygame.locals import *
from random import *

class Stick(pygame.sprite.Sprite):
    """棍子类,用来扫敌机,如果敌机碰到了,那么就会
      在这个位置上朝向玩家射出一枚子弹,它是不会显示的
    """
    def __init__(self,screen):
        pygame.sprite.Sprite.__init__(self)
        self.sw = screen.get_width()
        self.sh = screen.get_height()
        self.image = pygame.Surface((30,30))
        self.image.fill((0,0,255))
        pos = (50,randint(100,self.sh-100))
        self.rect = self.image.get_rect(center=pos)
        self.dx = 5
        
    def update(self):
        self.rect.move_ip(self.dx,0)
        if self.rect.right >= self.sw or self.rect.left<=0:
            self.dx = -self.dx
            self.rect.centery = randint(100,self.sh-100)
            

def main():

    width,height = 960,720
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption("中途岛海战扫荡敌机的棍子类by李兴球")
   

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

发表在 pygame, python | 中途岛海战扫荡敌机的棍子类已关闭评论

中途岛海战飞行阵列测试程序

"""
   中途岛海战飞行阵列测试程序,
   本程序演示三种飞行阵列依次显示,
   这三种阵列依次是一字,椭圆,8字阵列。
"""
import pygame
from pygame.locals import *
from enemy0 import Enemy0
from enemy2 import Enemy2
from enemy8 import Enemy8

def main():
    """主要函数"""
    bg = 'images/海洋.png'
    image = "images/Raven_128x128_red.png"
    width,height = size = 960,720
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("中途岛海战飞行阵列测试程序by李兴球")
    bg = pygame.image.load(bg)
    
    # 下面准备把图像缩小
    image = pygame.image.load(image)
    w,h = image.get_size()
    image = pygame.transform.scale(image,(w//3,h//3))
    group = pygame.sprite.Group()

    clock = pygame.time.Clock()
    running = True
    Enemys = [Enemy0,Enemy2,Enemy8]
    p0 = image,(0,height//2),screen
    p2 = image,350,200,(width//2,height//2)
    p8 = image,(width//2,100)
    ps = [p0,p2,p8]
    intervals = [400,200,200]    

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

发表在 pygame, python | 中途岛海战飞行阵列测试程序已关闭评论

中途岛海战飞行阵列之一字排开阵列,

"""
   中途岛海战飞行阵列之一字排开阵列,
   本程序新建敌机类,然后让敌机依次从左到右出现.
"""
import math
import pygame
from pygame.locals import *

class Enemy0(pygame.sprite.Sprite):
    """
       从左到右移动的敌机类
    """
    amounts = 100                    # 出动的数量
    counter = 0                      # 计数器
    def __init__(self,image,pos,screen):
        """
           image:图形,pos:坐标,screen:屏幕
        """
        pygame.sprite.Sprite.__init__(self)       
        self.image = pygame.transform.rotate(image,-90)
        self.rect = self.image.get_rect(center=pos)
        self.sw = screen.get_width() # 获取屏幕宽度
        Enemy0.counter += 1
        
    def update(self):
        """更新"""
        self.rect.move_ip(3,0)
        if self.rect.left > self.sw:self.kill()

def main():
    """主要函数"""
    bg = 'images/海洋.png'
    image = "Raven_128x128_red.png"
    width,height = size = 960,720
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("中途岛海战飞行阵列之一字排开阵列by lixingqiu")
    bg = pygame.image.load(bg)
    

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

发表在 pygame, python | 中途岛海战飞行阵列之一字排开阵列,已关闭评论

pyautogui简介_python中的按键精灵_键盘鼠标模拟

以下翻译来自官司网说明网站 pyautogui.readthedocs.io

pyautogui模块的目的是提供跨平台的自动化键盘鼠标操作。这个模块我们尽可能设计得容易使用。例如,下面的代码都会把鼠标指针移到计算机屏幕中央。

>>> import pyautogui
>>> screenWidth, screenHeight = pyautogui.size()
>>> pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

pyautogui模块能让你模拟鼠标指针的移动、单击鼠标、拖曳鼠标指针,按住或松开某键,或者组合键也是没问题的。下面是一个例子:

>>> import pyautogui
>>> screenWidth, screenHeight = pyautogui.size()                # 获取屏幕尺寸
>>> currentMouseX, currentMouseY = pyautogui.position()         # 当前鼠标指针坐标
>>> pyautogui.moveTo(100, 150)                                  # 移动鼠标到(100,150)坐标 
>>> pyautogui.click()                                           # 单击  
>>> pyautogui.moveRel(None, 10)  # move mouse 10 pixels down    向下移动鼠标指针10个像素 
>>> pyautogui.doubleClick()                                     # 双击 
>>> pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad)  # 2秒内移动鼠标指针到某坐标
# 下面是模拟输入英文字符
>>> pyautogui.typewrite('Hello world!', interval=0.25)  # 1/4秒的间隔时间输入一个字符
>>> pyautogui.press('esc')                              # 按esc键
>>> pyautogui.keyDown('shift')                          # 按住上档键
>>> pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left']) #  按左左左左左左
>>> pyautogui.keyUp('shift')                            # 松开上档键
>>> pyautogui.hotkey('ctrl', 'c')                       # 按Ctrl + C键

下面的例子是拖动鼠标指针画一个方形螺旋图,请先打开mspaint,方法是按Win+r键,然后在运行对话框中输入 mspaint。

>>> distance = 200
>>> while distance > 0:
        pyautogui.dragRel(distance, 0, duration=0.5)   # 向右移动
        distance -= 5
        pyautogui.dragRel(0, distance, duration=0.5)   # 向下移动
        pyautogui.dragRel(-distance, 0, duration=0.5)  # 向左移动
        distance -= 5
        pyautogui.dragRel(0, -distance, duration=0.5)  # 向上移动

在Windows操作系统中,pyautogui不需要依赖其它模块。如,它不需要有pywin32模块支持,这是由于它使用ctypes模块。安装pyautogui的方法很简单,用 pip install pyautogui命令即可,它会安装pillow,以实现截屏功能。通过命令pyautogui.PAUSE = 2.5,可以让每次动作后暂停2.5秒。以下是右击,中击,双击,三击模拟代码:

>>> pyautogui.rightClick(x=moveToX, y=moveToY)    # 右击
>>> pyautogui.middleClick(x=moveToX, y=moveToY)   # 中击
>>> pyautogui.doubleClick(x=moveToX, y=moveToY)   # 双击
>>> pyautogui.tripleClick(x=moveToX, y=moveToY)   # 三击

以下是信息提示框功能:

>>> pyautogui.alert('显示一个有OK的提示对话框')
>>> pyautogui.confirm('显示一个有OK和Cancle的对话框')
'OK'
>>> pyautogui.prompt('输入对话框')
'This is what I typed in.'

下面是截屏功能:

>>> pyautogui.screenshot()  # 返回pilllow图像模式
<PIL.Image.Image image mode=RGB size=1920x1080 at 0x24C3EF0>
>>> pyautogui.screenshot('风火轮编程.png')  #返回图像并保存到文件中
<PIL.Image.Image image mode=RGB size=1920x1080 at 0x31AA198>

如果你想查找计算机屏上的某个图片,用locateOnScreen命令。以下是代码:

>>> pyautogui.locateOnScreen('风火轮编程_李兴球原创Python创意程序.png')  # 返回找到的第一个矩形 (left, top, width, height) 
(863, 417, 70, 13)

locateAllOnScreen命令能返回所有找到的图形,返回它们的矩形,以下是代码:

>>> for i in pyautogui.locateAllOnScreen('风火轮编程_李兴球_www.lixingqiu.com.png')
...
...
(863, 117, 70, 13)
(623, 137, 70, 13)
(853, 577, 70, 13)
(883, 617, 70, 13)
(973, 657, 70, 13)
(933, 877, 70, 13)

或像下面这样的代码也可以呀:

>>> list(pyautogui.locateAllOnScreen('www.scratch8.net.png'))
[(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]

下面的代码可以不断地获取鼠标指针坐标:

import pyautogui, sys
print('Press Ctrl-C to quit.')        # 按Ctrl+C 中断
try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
    print('\n')

onScreen命令检测坐标是否在计算机屏幕范围内:

>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
>>> pyautogui.onScreen(0, 99999999)
False
>>> pyautogui.size()                     # 屏幕尺寸
(1920, 1080)
>>> pyautogui.onScreen(1920, 1080)
False
>>> pyautogui.onScreen(1919, 1079)
True

拖动鼠标指针示例代码:

>>> pyautogui.dragTo(100, 200, button='left')     # 按住左键,拖动鼠标指针到100,200坐标
>>> pyautogui.dragTo(300, 400, 2, button='left')  # 按住左键,在2秒内拖动鼠标指针到100,200坐标
>>> pyautogui.drag(30, 0, 2, button='right')   # 按住右键,在2秒内拖动鼠标指针到30,0坐标

下面的命令滚动鼠标,就是按滚轮模拟:

>>> pyautogui.scroll(10)   # 向上滚动10次
>>> pyautogui.scroll(-10)  # 向下滚动10次
>>> pyautogui.scroll(10, x=100, y=100)  # 移动鼠标指针到100, 200, 然后滚动10次

以下是模拟键盘按键代码:

>>> pyautogui.keyDown('shift')  # 按住shift键
>>> pyautogui.press('left')     # 按左方向箭头
>>> pyautogui.press('left')     # 按左方向箭头
>>> pyautogui.press('left')     # 按左方向箭头
>>> pyautogui.keyUp('shift')    # 松开shift键

下面是按键表:

['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']

查找屏幕上的像素:

>>> import pyautogui
>>> im = pyautogui.screenshot()    # 获取快照,截屏
>>> im.getpixel((100, 200))        # 得到坐标点像素值
(130, 135, 144)

检测屏幕上某坐标点是否匹配像素值:

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (0, 0, 0))
False

 

发表在 python | pyautogui简介_python中的按键精灵_键盘鼠标模拟已关闭评论