植物大战僵尸里的豌豆射手,可以用鼠标指针拖动它们。以下是部分源码。
"""
豌豆射手.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资源。)

