植物大战僵尸里的豌豆射手,可以用鼠标指针拖动它们。以下是部分源码。
""" 豌豆射手.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()
需要完整源代码和素材请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论