豌豆射手

如本文章标有价格,需议价或其它事情商议请加微信scratch8

李兴球Python植物大战僵尸里的豌豆射手动画演示

植物大战僵尸里的豌豆射手,可以用鼠标指针拖动它们。以下是部分源码。

"""
   豌豆射手.py
   本程序定义了一个Shooter类,它继承自Turtle类。
   实例化后,它会启动一个不断切换造型的线程。
   但是它的子弹是用屏幕的定时器功能实现不断地移动的。
"""
import time
from random import randint
from PIL import Image,ImageTk
from threading import Thread
from turtle import Turtle,Screen,Shape

def appendcostume(imagefile,screen):
    """添加图形到屏幕的造型字典"""
    pass                              # 这里省略部分代码 
    
class Shooter(Turtle):
    def __init__(self,frames,pos):
        Turtle.__init__(self,shape='blank')
        self.penup()
        self.speed(0)
        self.goto(pos)
        self.index = 0
        self.frames = frames
        self.amounts = len(frames)
        pass                              # 这里省略部分代码    
        self.sw = self.screen.window_width()
        self.sh = self.screen.window_height()
        
    def altcostume(self):
        """不断地切换造型,这在一个线程中"""
        while True:
            self.shape(self.frames[self.index])
            self.index += 1
            self.index %= self.amounts
            time.sleep(0.2)
            if randint(1,10)==1 and not self.bullet.isvisible():
                self.bullet.showturtle()
                self.begin_shoot()
                
    def begin_shoot(self):
        """开始准备发射"""
        if  self.bullet.isvisible():
            self.bullet.setx(self.xcor() + 10)
            self.bullet.sety(self.ycor() + 10)
            self.shooting()
            
    def shooting(self):
        """如果是可见的,则移动。
           在移动的过程中,如果超过边缘就隐藏
           否则不断地调用shooting,实现‘重复执行’。
        """
        if self.bullet.isvisible():
            self.bullet.fd(10)
            if self.bullet.xcor()>self.sw//2:
                self.bullet.ht()
            else:
                self.screen.ontimer(self.shooting,50)        

def main():
    screen = Screen()
    screen.delay(0)
    screen.bgpic('院子.png')
    screen.setup(960,720)
    frames = [f"wd/{i}.png" for i in range(22)]
    [appendcostume(frame,screen) for frame in frames]

    for y in range(150,-250,-80):
       Shooter(frames,(-200,y))
    screen.mainloop()

if __name__ == "__main__":
    main()

需要完整源代码和素材请扫码付款:

VIP免费查看

已有0人支付

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

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

李兴球博客 风火轮编程主页