""" 奥特曼打怪兽_按键.py 本程序设计了Background类, 还设计了继承自Sprite类的Actor类及Monster类。 为了让奥特曼能发射子弹,增加了按f键发红色小方块的功能。 """ import glob import time from tkinter import * from PIL import Image from random import randint from gameturtle import Sprite,group class Background: def __init__(self,cv,image): """image是磁盘上的一张图片""" self.w = int(cv.cget('width')) self.h = int(cv.cget('height')) self.cv = cv image = Image.open(image) im = image.convert("RGBA") self.pic1 = Sprite(cv,im) self.pic2 = Sprite(cv,im,pos=(1.5*self.w,self.h/2)) class Actor(Sprite): def __init__(self,canvas,frames,pos=None, visible=True,heading=0,tag='sprite'): Sprite.__init__(self,canvas=canvas,frames=frames,pos=pos, visible=visible,heading=heading,tag=tag) self.dx = 0 # 水平速度 self.dy = 0 # 垂直速度 self._canvas.bind("",self.moveback) self._canvas.bind("",self.moveup) self._canvas.bind(" ",self.movedown) self._canvas.bind("",self.movefd) self._canvas.bind(" ",self.movexstop) self._canvas.bind(" ",self.movexstop) self._canvas.bind(" ",self.moveystop) self._canvas.bind(" ",self.moveystop) def movexstop(self,event): self.dx = 0 def moveystop(self,event): self.dy = 0 def moveback(self,event): self.dx = -4 def movefd(self,event): self.dx = 4 def moveup(self,event): self.dy = -4 def movedown(self,event): self.dy = 4 class Monster(Sprite): def __init__(self,canvas,frames,pos=None, visible=False,heading=0,tag='monster'): Sprite.__init__(self,canvas=canvas,frames=frames,pos=pos, visible=visible,heading=heading,tag=tag) y = randint(0,360) self.goto(self._cv_width+100,y) self.randomshape() # 随机造型 self.setrotmode(1) # 旋转模式为左右翻转 self.right(180) # 向右转180度 self.show() # 显示 if __name__ == '__main__': root = Tk() root.title('奥特曼的诞生') cv = Canvas(width=480,height=360) cv.pack() # 放置画布 cv.focus_force() # 设置画布焦点 bg = Background(cv,'1.png') manpic = Image.open('奥特曼.png') # 奥特曼的造型图 sp = ultraman = Actor(cv,manpic) # 实例化奥特曼 monster_pics = glob.glob('res/*.png')# 怪兽造型图列表 monster_pics = [Image.open(im) for im in monster_pics] c = 0 zd_pic = Image.new("RGBA",(10,10),color='red') # 子弹图 cv.bind(" ",lambda event:Sprite(cv,zd_pic,pos=sp.pos(),tag='bullet')) while True: bg.pic1.addx(-10) # 背景图片1的x坐标减小 if bg.pic1.xcor() <= -bg.w/2: bg.pic1.setx(1.5*bg.w) bg.pic2.addx(-10) # 背景图片2的x坐标减小 if bg.pic2.xcor() <= -bg.w/2: bg.pic2.setx(1.5*bg.w) c = c + 1 if c%100==0:Monster(cv,monster_pics) ms = group(cv,'monster') [m.fd(2) for m in ms] [m.kill() for m in ms if m.xcor()<0 or m.collide_tag('bullet')] ultraman.addx(sp.dx) ultraman.addy(sp.dy) if ultraman.collide_tag('monster'):sp.dy=10 bullets = group(cv,'bullet') [b.fd(10) for b in bullets] [b.kill() for b in bullets if b.xcor()>480] cv.update() # 刷新画布显示 time.sleep(0.01) # 等待0.01秒
需要全部源代码和素材请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论